Control RoverC HAT con JoyC HAT
Vídeo completo del taller de 1 hora:
Veamos los pasos para programar el control de BugC HAT con JoyC HAT.

Antes de empezar con este tutorial, deberías leer los siguientes artículos:
- Dispositivos M5Stack: https://aprendiendoarduino.wordpress.com/2020/04/25/dispositivos-m5stack/
- Programación Dispositivos M5Stack con UIFlow: https://aprendiendoarduino.wordpress.com/2020/04/25/programacion-dispositivos-m5stack-con-uiflow/
Hardware necesario:
- 2x M5StickC https://docs.m5stack.com/#/en/core/m5stickc
- 1x RoverC HAT: https://docs.m5stack.com/#/en/hat/hat-roverc
- 1x JoyC HAT: https://docs.m5stack.com/#/en/hat/hat-joyc
Cada módulo M5StickC programable se conecta a los HATs del Rover y el JoyStick. Lo que vamos a programar con los M5StickC.
RoverC es una base de robot móvil omnidireccional programable compatible con M5stickC, y puede iniciarse insertando el M5stickC. El controlador principal de la base es el microcontrolador stm32f030f4. La base viene con motores de engranaje helicoidal N20 que son accionados directamente por un controlador de motor de cuatro canales. Estos motores están conectados a ruedas mecanum que pueden moverse en todas las direcciones. Además, se proporcionan dos puertos I2C compatibles con grove para facilitar la expansión de otros módulos. La base también es compatible con los bloques de LEGO y puede expandirse en su estructura. Se instala una batería 16340 en la parte posterior de la base para cumplir con los requisitos de potencia y resistencia del automóvil y se puede controlar mediante un interruptor independiente.
I2C Address 0x38
Para moverlo:
Antes de usar, asegúrese de que el RoverC está completamente cargado. Método de carga: inserte m5stickc en el roverc y conecte el cable USB para cargar.
JoyC es un módulo basculante diseñado para el M5StickC. Admite la operación con las dos manos. Chip de control principal STM32F030F4 integrado, que utiliza el protocolo de comunicación I2C y el host M5StickC para la transmisión de datos. El rango del joystick es 0 ~ 200, hay 12 LED RGB debajo de los joysticks izquierdo y derecho, y la parte inferior del joystick está equipada con una base de batería 16340 para una vida útil continua de la batería.
I2C Address 0x38
Como vamos a programar con UIFLow, lo primero es cargar el firmware de UIFlow con el M5Burner, que puede descargarse en: https://m5stack.com/pages/download. Cargar en ambos M5StickC.
Ejemplo básico control RoverC:
Vídeo:
Ejemplo básico control JoyC:
Código: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/Basic_JoyC.m5f
Código con todos los datos del JoyC: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/M5StickC_JoyStick_Control.m5f
Vídeo:
Para comunicar ambos módulos voy a usar el protocolo ESP-NOW: https://docs.m5stack.com/#/en/uiflow/advanced?id=esp-now
ESP-NOW es un protocolo de comunicación de corto alcance y baja potencia que permite que múltiples dispositivos se comuniquen sin Wi-Fi. Este protocolo es similar a la conexión inalámbrica de 2,4 GHz de baja potencia que se encuentra en los ratones inalámbricos: los dispositivos se emparejan antes de comunicarse. Después del emparejamiento, las conexiones entre dispositivos son continuas, de igual a igual, y no requieren un protocolo de protocolo de enlace.
Para emparejar ambos dispositivos necesito saber su dirección.
Ejemplo básico receptor:
Ejemplo básico emisor:
En un M5Stack lo uso de receptor de ESP-NOW para ver lo que llega: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/M5/M5Stack_Receptor.m5f
Código:
- Emisor: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/ESP-NOW_Basic_Emisor.m5f
- Receptor: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/ESP-NOW_Basic_Receptor.m5f
Vídeo:
Los códigos finales con comunicación ESP-NOW:
- JoyStick: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/C%C3%B3digo%20Final/M5StickC_JoyStick_ESPNOW.m5f
- Rover: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/C%C3%B3digo%20Final/M5StickC_Rover_ESPNOW.m5f
- M5Stack: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20RoverC%20y%20JoyC/C%C3%B3digo%20Final/M5Stack_Receptor.m5f
Comentarios del código:
- La conexión es uno a uno y cifrada con contraseña
- Uso un M5Stack que recibe los datos y los muestra por pantalla
- Los datos que mando son: Velocidad, Dirección y Ángulo, añadiendo el caracter V, D o A delante del valor.
- Solo mando el valor si cambia más de 5 unidades sobre el valor anteriormente enviado. Ahorrando el envío de datos y mejorando la experiencia con el Joystick
- Si el valor del Joystick es menor de 30 lo dejo en 0, porque sino los motores apenas se mueven y hace ruido.
- Uso en cada receptor un contador para saber cuantos mensajes llegan
- El M5Stick del rover lee el dato recibido, analiza si es Velocidad, Dirección y Ángulo y aplica el valor a los motores del rover.
Vídeo:
Control BugC HAT
Vamos a hacer andar el BugC.
Material:
- 1x M5StickC https://docs.m5stack.com/#/en/core/m5stickc
- 1x BugC Hat: https://docs.m5stack.com/#/en/hat/hat-bugc
BugC es una base de robot programable compatible con el M5StickC. Esto tiene cuatro motores de CC, controlador de motor, dos LED RGB, soporte de batería y un interruptor. La base Bugc debe usarse junto con el controlador M5StickC. La base viene con un microcontrolador STM32F030F4 que controla todos los motores y LED y esto es controlado a través del protocolo I2C (0x38) por el M5StickC que se encuentra en la parte superior de la base.
Ejemplo básico de uso:
Código: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20BugC/Basic_BugC.m5f
Vídeo:
Una vez hecho el ejemplo básico, para aprender cómo se mueve hacemos tres movimientos que cambian al pulsar el botón A.
Código: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20BugC/M5StickC_BugC_Demo.m5f
Vídeo:
Por último vamos a hacerlo andar, moviendo de un lado a otro.
Código: https://github.com/jecrespo/M5StickC-UIFlow/blob/master/Proyecto%20BugC/M5StickC_BugC_Anda.m5f
Vídeo: