Hace ya un tiempo escribimos sobre estos módulos para reproducir MP3 llamados DFPlayer Mini. Para hacer un pequeño resumen, este módulo es capaz de reproducir archivos de música mp3 tanto de manera autónoma con unos pulsadores como con una conexión serial con algún dispositivo tipo Arduino, ESP8266 o ESP32, por poner algunos ejemplos.
El DFPlayer Mini cuenta además con un amplificador de 3W y 6 niveles de ecualización entre otras características que puedes ver aquí.
Para el programa que presento hoy DFPlayer Mini Bluetooth for Android, vamos a usar el ESP32, siendo más específicos un DOIT Esp32 DevKit v1, pero el código nos puede servir para cualquier ESP32.
La elección de este microcontrolador es, por supuesto, que lleva el Bluetooth integrado. Esto nos ahorra material, tiempo y dinero.
Diferencias con los programas anteriores:
La principal diferencia con los programas anteriores es el uso de la librería de DFRobot, DFRobotDFPlayerMini. El cambio se debe a que la que usábamos anteriormente: DFPlayer-Mini-mp3, (también del mismo autor) esta descontinuada.
Por otra parte DFPlayer Mini Bluetooth for Android ha tenido un evidente lavado de cara y se han añadido las nuevas funciones de la nueva librería.
Las conexíones del módulo utilizamos Tx2 y Rx2 que corresponden a los pines Gpio 17 y Gpio 16 respectivamente para la comunicación con el módulo DFPlayer y el pin Gpio 19 para la función busy.
La función busy es imprescindible para detectar el final de la canción, si no, el módulo no sabe cuando tiene que pasar a la siguiente.
Problemas con reinicios: Si el módulo no tienen una buena alimentación puede dar problemas en el momento de, por ejemplo, subir el volumen al máximo. Esto hará que el módulo DFPlayer Mini se reinicie emitiendo un sonido un poco desagradable
Aquí están los programas para probar el módulo DFPlayerMini:
Ya os presente uno de los mejores proyectos para Radio Control el ESP32 Engine sound. En este proyecto una de las últimas opciones que implementaron fue la pantalla con velocímetro o dashboard
En ese apartado, se sincroniza una pequeña pantalla de 160x80 con conexión SPI. Simplemente genial.
¿Cual es mi problema con esto? Pues en principio ninguno, pero no disponía de una pantalla SPI, pero si una OLED de 128x32 y
conexión I2C
Librería U8g2Lib
El panel original viene un frok del ESP32 Engine Sound original al que como hemos comentado, se le añadió la pantalla con cuatro relojes, Velocidad, RPM, Gasolina y ADblue y los iconos de las funciones más comunes en todos los vehículos.
Como me pareció sencillo, decidí probar si ese código se podría portar a una pantalla I2C. Para la comunicación I2C con la pantalla he probado las 2 librerías más famosas para la pantalla SSD1306, la librería U8g2Lib y la librería Adafruit_SSD1306 siendo esta última la que me mejor a funcionado.
El proyecto lo he dividido en 2 partes, la primera es para usarlo de manera independiente y la segunda es con la pantalla ya integrada en el sistema ESP32 Engine Sound.
Los componentes que se han utilizado para el proyecto son los siguientes:
ESP32 WROOM Dev Kit V1
Oled SSD1306 128x32 I2C
Para no liar con lo que ya esta hecho, primero he renombrado los archivos dashboardc.cpp y dashboard.h a dashboardi2c.cpp dashboardi2c.h. y borrar todo lo que no esta relacionado con la pantalla "Garimaldi"
Para el manejo de la pantalla he usado la librería de Adafruit_SSD1306.h y Adafrit_GFX.h. Esto ha llevado cambios en la inicialización del programa y los tamaños de las esferas. Estos valores los cambiamos en el archivo dashboardi2c.h
En este archivo encontraremos los valores predefinidos como el radio de las esferas, iconos, colores o la posición de los iconos en la pantalla. Después de las definiciones, esta la clase "Dashboard" sustituida por "DashboardI2c" junto con sus funciones, menos la función "drawLogo()" que no afecta al funcionamiento normal del programa.
Puedes encontrar los archivos para su descarga al final de este articulo.
Una vez que ya he probado las funciones y parece que todo funciona bien, añado un puerto para el I2c en la placa con el programa RC Engine Sound ESP32 y copio los archivos a la carpeta "RC_Engine_Sound_ESP32/src/src/"
En el archivo 9_Dashboard.h añado la siguiente linea para poder activar o desactivar la pantalla:
#define I2C_DASHBOARD
Con la definición creada ya podemos añadir los cambios en el archivo "src.ino". Primero declaramos el objeto dashboard:
En la función void setup() tenemos que desactivar los pines que correspondes al puerto I2C que en la placa DOIT ESP32 DEVKIT V1 corresponden a los pines GPIO21 (SCL) y GPIO22(SDA) y en el programa a las funciones "Beacon1" y "Cablight":
// Added for I2c dashboard
#if not defined I2C_DASHBOARD
beaconLight1.begin(BEACON_LIGHT1_PIN, 9, 20000); // Timer 9, 20kHz
cabLight.begin(CABLIGHT_PIN, 12, 20000); // Timer 12, 20kHz
#endif
Un poco más abajo en la misma función setup() ponemos un mensaje para mostrar en el monitor serial que la pantalla esta activada:
#if defined I2C_DASHBOARD
// Dashboard setup
Serial.printf("I2C_DASHBOARD enabled. Pins 21 (beacon1), 22 (cablights) not usable!\n");
Serial.printf("-------------------------------------\n");
dashboard.init(dashRotation);
#endif
Como la tasa de refresco de la pantalla es bastante baja, el tiempo en el que se muestra tiene que ser mayor, si no gastará mucho tiempo "dibujando" y el programa ira excesivamente lento, para esto añadimos en la función "updateDashboard()" lo siguiente:
#ifdef I2C_DASHBOARD
if (millis() - lastFrameTime > 300) // We need to save processing time!
#else
if (millis() - lastFrameTime > 40) // 40) // We need to save processing time!
#endif
Y por último actualizamos la pantalla en la función loop():
#ifdef I2C_DASHBOARD
updateDashboard();
#endif
Por supuesto todo esto ha sido para poder implementar la pantalla junto con su código en el programa original RC Engine Sound, pero no solo de código vive el hombre, así que este es el diagrama de conexiones que utilizo actualmente:
Al conservar los nombres que le dieron a las funciones en la clase Dashboard original, solo con unos pocos cambios podemos hacer compatibles esta pantalla I2C con el sistema RC Engine Sound ESP32. Si bien no dispone de todo el colorido y la rapidez de la pantalla SPI. Quedará muy bien en cualquier vehículo RC.
Como comente al principio, la librería U8G2Lib que, aunque si que dibuja la pantalla, la tasa de refresco es muy inferior a la tasa de refresco de la librería Adafruit. Esto hace que la pantalla no muestre los datos de una manera fluida e incluso produzca cuelgues en el ESP32.
Puedes hacer las placas para RC Engine Sound ESP32 de una manera profesional desde el repositorio PCBway.com de "Thediyguy
Espero que os guste esta pequeña modificación para este excelente programa y para los que os gusta trastear, esta es una manera más clara de aprender a como dibujar en una pantalla de estas características.
Una de las cosas que más realismo le da a un coche R/C de este tipo (camiones) es que puedan configurar de una manera sencilla y que que suene... que suene de verdad...
Si bien hay muchos "emuladores de sonido" para coches y camiones R/C. Aunque uno que alguno modelos sean asequibles para el bolsillo, parece que estemos en un juego de coches de los 80's en un 386... Los modelos más caros suelen tener un buen sonido, pero suelen rondar los 50€~60€. Y pueden sonar bien, pero no tienen la cantidad de accesorios que incluye el repositorio del que vamos a tratar.
Empecemos!
Pues bien, navegando por GitHub encontré un proyecto llamado Rc_Engine_Sound_ESP32 de TheDIYGuy999, no solo cumple con las expectativas de sonido, Además también incluye todos los controles para luces como intermitencias o luces de freno y varios accesorios como 5ª rueda y el cabestrante.
PAM8403
En el apartado de sonido lo mejor que tiene esta amplificado con el módulo basado en el chipset PAM8403 altavoces de hasta 3W que dispone de dos canales de audio y hace que no tenga que parar un sonido para reproducir otro.
Y la verdad es que suena muy bien, tanto en potencia como en calidad. Se pueden usar 2 altavoces pueden usar cualquier potencia siempre que no supere los 3W.
En mi caso use unos altavoces de algún pequeño equipo para móviles que tenía por casa.
Además incluye una gran cantidad de sonidos para motores de muchos vehículos diferentes. En mi caso uso la motorización del MAN KAT y las luces como intermitencias y frenos. Una cosa que me gusto mucho es que con un motor se puede hacer que simule la vibración del motor. También simula el panel de control con un pequeño Oled de 80*160 al que se le puede cambiar la apariencia.
Muy buenas a todos y todas enamorados de los microcontroladores!!!
El ESP32 es un microcontrolador potente y versátil con módulos WiFi y Bluetooth integrados de bajo costo y alta potencia desarrollado por la compañía china Espressif.
Es muy utilizado en el internet de las cosas (IOT) como domótica, robótica, estaciones meteorológicas y una amplia gama de proyectos y aplicaciones que, sobre todo, necesiten un bajo consumo de energía.
Es fácil de programar ya que se programa con el puerto USB, y cuenta con una gran comunidad de usuarios a sus espaldas.
Podríamos decir que es el sucesor del más que famoso ESP8266 el cual es mono núcleo y no cuenta con comunicación bluetooth. En una de las cosas que si se parecen es en su bajo coste, se pueden encontrar desde unos 3€ aproximadamente.
A día de hoy, en 2024, existen varias series y modelos del microcontrolador ESP32, cada uno con características y enfoques específicos pero en este articulo vamos a centrarnos en el modelo WROOM32.
Muy buenas a todos y todas los amantes de los microcontroladores!!!
Últimamente estoy usando mucho este tipo de chips, tanto el ESP8266 como el ESP32 ya que tienen una mejor conectividad necesaría para casi cualquier proyecto relacionado IOT (el internet de las cosas).
Antes de empezar podemos ver en la tabla las características técnicas relacionadas con la conectividad:
Diferencias de conectividad entre ESP8266 y ESP32:
Característica
ESP8266
ESP32
Wi-Fi Estándar
802.11 b/g/n
802.11 b/g/n
Banda
2.4 GHz
2.4 GHz
Modos Wi-Fi
STA/AP
STA/AP/STA+AP
Bluetooth
✘ No
✔️ BLE 4.2 + Classic
El problema:
Debido a la distancia entre el router y la habitación donde normalmente uso el PC en la maqueta provoca que haya múltiples desconexiones y conexiones con el router haciendo casi imposible tener una conexión estable.
Ya tengo otro repetidor comercial para el ordenador, pero quería separar las redes para poder hacer pruebas y no interferir en la de casa. Y como tengo también unas cuantas baterías de tipo 18650, la idea es hacerlo para poder usarlo también fuera de casa.
Para probar este proyecto he usado el microcontrolador ESP8266 en su versión NodeMcu V3.
Los archivos necesarios están en formato .bin así que he utilizado la herramienta "esptool.py".
Podemos instalar esptool.py desde el terminal con: