Muy buenas a todos Arduineros y Arduineras
![]() |
Librería Adafruit |
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 |
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:
// Other objects -----
// Dashboard
#ifdef I2C_DASHBOARD
DashboardI2c dashboard;
#else
Dashboard dashboard;
#endif
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 "Cab light":
// 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.
Tienes mas información sobre el sistema en el artículo:Man Kat con Rc Engine Sound esp32.
Los archivos, tanto para la librería Adafruit como para U8g2Lib, para el velocímetro los puedes descargar en:
Descargar ESP32 oled i2c 128x32_dashboard desde GitHub
El programa original, en ingles, lo podéis encontrar en el siguiente enlace:
Repositorio oficial de RC Engine Sound ESP32 en GitHub
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.
Saludos!!
No hay comentarios :
Publicar un comentario