escoRnaFID para M5Stack Core2

Introducción

La idea de este proyecto es replicar la funcionalidad de la placa de control del proyecto escoRnaFID para utilizarlo con el dispositivo M5Stack Core2 de la empresa M5Stack. 

A este dispositivo le añadiremos la base M5GO Battery Bottom2 (for Core2 only) que nos proporcionará 10 LEDs RGB (5 en cada lado) y una mayor batería. Por último para la lectura de las tarjetas RFID utilizaremos la unidad Mini RFID Reader/Writer Unit (MFRC522).

Mediante la utilización de estos dispositivos simplificamos y facilitamos el uso del proyecto escoRnaFID al reemplazar la placa de control (que para muchos usuarios puede ser un engorro el tener que lidiar con placas PCB y soldaduras) por un conjunto más amigable, manajable y fácil de montar.

Las características de los dispositivos que utilizaremos los tenéis en los siguientes enlaces:

https://m5stack.com/products/m5stack-core2-esp32-iot-development-kit?variant=35960244109476

https://m5stack.com/collections/m5-base/products/m5go-battery-bottom2-for-core2-only

https://m5stack.com/collections/m5-unit/products/rfid-sensor-unit

Pero… ¿qué es el proyecto escoRnaFID? … bueno si no sabes de qué va el proyecto aquí te dejo un enlace con toda la información:

https://mecatronicalab.es/escornabot-proyecto-para-ninos-con-discapacidad-visual-o-ceguera/

Podrás pensar, ¡ostras!, el proyecto me parece chulo pero no quiero realizar las modificaciones en el Escornabot para que lea las tarjetas RFID ¡lo veo complicado!. Bueno ¡no pasa nada! podrás utilizar igualmente lo explicado en este proyecto con la salvedad que no tendrás ciertas funcionalidades del proyecto escoRnaFID como el aviso de que el robot va por el buen camino y que ha llegado al final esperado pero por lo demás todo te funcionará.

Lo que sí necesitarás es un Escornabot con un módulo Bluetooth Low Energy (como el HM-10). 

Más adelante te explicaré qué firmware tienes que instalar en tu robot en función de las funcionalidades que quieras tener.

Listado de componentes

  • M5Stack Core2 ESP32 IoT Development Kit.
  • M5Stack M5GO Battery Bottom2 (for Core2 only).
  • M5Stack Mini RFID Reader/Writer Unit (MFRC522).
  • Tarjetas MIFARE Classic® 1K – 13,56MHz.
  • Tarjeta MicroSD (máximo de 16GB).
  • Módulo HM-10 Bluetooth 4.0 BLE (en mi caso de la marca DSD TECH) conectado al Escornabot.

Instalación

Paso 1. Preparar el IDE de Arduino

El M5Stack Core2 es una placa basada en el ESP32 y para poder utilizarla con el IDE de Arduino tendremos que instalar ciertas librerías y drivers. Para ello tenéis que seguir los pasos que se describen en el siguiente enlace:

https://docs.m5stack.com/#/en/arduino/arduino_core2_development

NOTA: Os recomiendo que instaleis los últimos drivers del sitio oficial:

https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

Por otro lado se necesitan instalar ciertas librerías que utiliza el programa que cargaremos en el M5Stack Core2. Son las siguientes:

https://github.com/adafruit/Adafruit_NeoPixel

https://github.com/earlephilhower/ESP8266Audio

https://github.com/Gianbacchio/ESP8266_Spiram

https://github.com/avilmaru/escornafid_para_m5stackcore2/blob/master/librerias/MFRC522-I2C-Library-master.zip

IMPORTANTE: Si durante la carga de los programas en el dispositivo M5Stack Core2 os sale un error de este estilo:

Traceback (most recent call last): File «/Users/xxxxxxx/Library/Arduino15/packages/esp32/tools/esptool_py/x.x.x/esptool.py», line xx, in <module> import serial ImportError: No module named serial

… tenéis que instalar el PySerial. Aquí se explica como:

https://learn.adafruit.com/arduino-lesson-17-email-sending-movement-detector/installing-python-and-pyserial

 

Paso 2. Montaje del hardware

  1. Coger el dispositivo M5Stack Core2 y quitar los tornillos de su base.
  2. Una vez abierto, desconectar la batería que tiene en su interior y guardar tanto la base que hemos quitado con la batería como la placa que tapa los pines de conexión ya que no se utilizarán más.
  3. Ahora acoplamos la base M5GO Battery Bottom2 al M5Stack Core2 y la fijamos con los tornillos que vienen con la base (son más largos).
  4. Por último conectamos al puerto “A I2C“ del M5Stack Core2 la unidad Mini RFID Reader/Writer Unit (MFRC522).

Nos tiene que quedar un conjunto como el mostrado en las siguientes fotografías:

 

Paso 3. Grabar los recursos en la tarjeta MicroSD

El siguiente paso será coger una tarjeta MicroSD (el lector solo puede leer tarjetas de máximo de 16GB de capacidad) y grabar en el directorio principal los directorios “image” y “mp3” que están disponibles en el siguiente enlace:

https://github.com/avilmaru/escornafid_para_m5stackcore2/tree/master/TarjetaSD

En dichos directorios se encuentran las imágenes y audios utilizados en el proyecto.

 

Paso 4. Cargar el programa en el M5Stack Core2

Previo a la carga del programa (sketch) en el M5Stack Core2 tenemos que realizar un par de cosas:

  • Adquirir los identificadores de las tarjetas RFID MIFARE que servirán para dar las instrucciones al robot:
    1. Tarjeta para el movimiento de avanzar.
    2. Tarjeta para el movimiento de retroceder.
    3. Tarjeta para el movimiento de girar a la izquierda.
    4. Tarjeta para el movimiento de girar a la derecha.
    5. Tarjeta para la acción de resetear los movimientos.
    6. Tarjeta para la acción de ejecutar los movimientos.
  • Saber el identificador de servicio y característica del módulo Bluetooth LE acoplado a vuestro Escornabot.

 

Obteniendo los identificadores de las tarjetas RFID MIFARE

Para saber los identificadores de las tarjetas bastará cargar en el IDE de Arduino el siguiente programa y subirlo al M5Stack Core2:

https://github.com/avilmaru/escornafid_para_m5stackcore2/tree/master/leerUIDsTarjetas_M5Core2

Una vez subido abriremos el monitor serie del IDE de Arduino e iremos acercando al módulo RFID-RC522 las diferentes tarjetas (en total tenemos que identificar 6 tarjetas).

Conforme vayamos identificando cada tarjeta la iremos etiquetando y guardando su identificador (el identificador está en formato hexadecimal).

Ejemplo: Código hexadecimal escaneado: 71 9C 07 01 → {0x71, 0x9C, 0x07, 0x01}

 

Identificando el Servicio y la Característica del Módulo HM-10

La comunicación entre el M5Stack Core2 y el dispositivo HM-10 conectado al Escornabot se realizará mediante Bluetooth Low Energy.

Tenemos que identificar qué servicio y qué característica tiene nuestro dispositivo HM-10 para que el M5Stack Core2 se pueda conectar a él.

Los identificadores que están por defecto en el programa son los siguientes:

Servicio UUID:  ffe0

Característica UUID: ffe1

Estos identificadores son los típicos que os vais a encontrar en vuestros módulos HM-10 y son los que ya se encuentran incluidos en el programa que cargaremos en el M5Stack Core2 pero si fueran diferentes o queréis verificarlos bastará seguir la operativa que os describo en el siguiente enlace.

https://mecatronicalab.es/escornabot-control-por-acelerometro/anexo-obteniendo-los-uuids/

NOTA: La operativa anterior hace referencia a otro proyecto donde en vez de utilizar el M5Stack Core2 se utiliza una placa Arduino Nano 33 BLE Sense, por tanto cuando leáis el documento del enlace anterior tenéis que tener presente que cuando se hace referencia a la placa “Arduino Nano 33 BLE Sense”  mentalmente teneis que cambiarlo por el dispositivo “M5Stack Core2”.

 

Modificando el programa para introducir los datos anteriores

Una vez que hemos realizado todos los pasos anteriores ya tenemos toda la información  necesaria para introducirla en el programa que cargaremos en el M5Stack Core2. 

Primero descargamos en local los archivos del siguiente enlace:

https://github.com/avilmaru/escornafid_para_m5stackcore2/tree/master/firmware_M5Core2/escoRnaFID_M5Core2

Abrimos el fichero “escoRnaFID_M5Core2.ino” en el IDE de Arduino y localizamos la siguiente parte del código:

/**************************************************************************
* Identificadores de tarjeta
**************************************************************************/
// NOTA: Cambiar por los códigos de vuestras tarjetas (6 tarjetas son necesarias)
byte tarjetaGirarIzquierda[4]  = {0xF1, 0x81, 0xE1, 0x1E};   
byte tarjetaGirarDerecha[4]    = {0xB4, 0x5C, 0x5E, 0x13};
byte tarjetaAvanzar[4]         = {0xF7, 0x74, 0x7C, 0x01}; 
byte tarjetaRetroceder[4]      = {0xD3, 0xFA, 0xD3, 0x1C}; 
byte tarjetaResetear[4]        = {0x73, 0x21, 0x2F, 0x1D}; 
byte tarjetaEjecutar[4]        = {0xBC, 0x21, 0x53, 0x83};

Una vez localizado el código anterior tenéis que sustituir los códigos de las tarjetas que aparecen por los códigos obtenidos de vuestras tarjetas.

Ejemplo: Código hexadecimal escaneado: 71 9C 07 01 → {0x71, 0x9C, 0x07, 0x01}

Ahora localizamos la siguiente parte del código:

// El identificador del servicio es ...
static BLEUUID serviceUUID("ffe0");
// El identificador de la caracteristica asociado al servicio anterior es ...
static BLEUUID    charUUID("ffe1");

Una vez localizado tenéis que sustituir (en caso de que fueran diferentes) los identificadores del servicio y característica  que aparecen por los de vuestro módulo HM-10.

Una vez realizado todo lo anterior ya podéis grabar los cambios y cargar el programa en el M5Stack Core2.

 

Paso 4. Cargar el firmware modificado en el Escornabot 

Se ha tenido que modificar el firmware oficial del Escornabot para que el robot envíe por bluetooth todos los movimientos que está ejecutando al M5Stack Core2. También se ha tenido que añadir la funcionalidad para que el robot pueda leer tarjetas RFID. 

La versión que he modificado para realizar este proyecto se basa en la versión 1.6.2 del firmware oficial.

Tenéis dos versiones disponibles:

a) Si tenéis un Escornabot  con las modificaciones para que lea las tarjetas RFID teneis que cargar el firmware del siguiente enlace:

https://github.com/avilmaru/escornafid_para_m5stackcore2/tree/master/firmware_escornabot/arduino_modificado_MFRC522-1.6.2

Recordad que si tenéis el Escornabot con esa modificación tendréis las siguientes funcionalidades:

1) Cuando el Escornabot termina cada movimiento chequeará y por tanto leerá que exista una tarjeta RFID debajo de él. Si encuentra una tarjeta querrá decir que va por el buen camino. Si por el contrario no encuentra ninguna tarjeta querrá decir que se ha equivocado de camino y enviará por bluetooth un mensaje indicando que se ha “perdido” invitando al usuario a que vuelva a intentarlo. En este escenario el robot se parará y no ejecutará más movimientos.

2) Cuando el robot haya acabado de finalizar todos los movimientos se validará si realmente ha llegado al final. Si ha llegado al final el robot enviará por bluetooth un mensaje conforme lo he realizado correctamente y un mensaje con lo contrario en caso de que no haya llegado al final esperado.

b) Si tenéis un Escornabot  sin las modificaciones anteriores (solo perdeis las dos funcionalidades anteriormente descritas) tenéis que cargar el siguiente firmware:

 https://github.com/avilmaru/escornafid_para_m5stackcore2/tree/master/firmware_escornabot/arduino_modificado-1.6.2

 

NOTA: En ambos casos tenéis que tener un Escornabot con un módulo Bluetooth Low Energy (como el HM-10). 

NOTA: Acordaros de cambiar el fichero de configuración por el vuestro o poner en el fichero los valores correspondientes de vuestro robot.