Questo è un esempio per l’utilizzo della Multimedia Board (mmb) con i display oled I2C SSD1306 che trovi come sempre sul repository su GitHub.
Maggiori informazioni sulla connessione della mmb con i display le trovi qui
Anche in questo caso l’esempio può essere riprodotto e/o modificato anche su una classica breadboard in mancanza di una mmb.
Per iniziare ad utilizzare gli esempi, è necessario clonare in locale il repository . Informazioni dettagliate su come clonare un repository remoto le trovi nell’apposito articolo.
Andiamo ad analizzare come sempre prima la configurazione su platformio.ini e poi il sorgente.
Per utilizzare i display oled SSD1306 facciamo affidamento alla libreria Adafruit_SSD1306, che a sua volta dipende dalla libreria BusIO. Le andiamo quindi ad includere tra le dipendenze.
Dobbiamo inoltre adattare alcune variabili che troviamo sotto build_flags. I display SSD1306 solitamente hanno un formato di 128x64px oppure 128x32px. L’indirizzo I2C solitamente è 0x3C e non è necessario cambiarlo. Ma se qualcosa non dovesse funzionare, probabilmente il problema è quello, e devi trovare l’indirizzo I2C del tuo display Se stai usando una mmb i pin SDA ed SCL sono il 15 ed il 13.
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
monitor_filters = esp32_exception_decoder
lib_deps = https://github.com/adafruit/Adafruit_SSD1306
https://github.com/adafruit/Adafruit_BusIO
build_flags =
-D SCREEN_WIDTH=128
-D SCREEN_HEIGHT=32
-D SCREEN_ADDRESS=0x3C
-D SCREEN_SDA=15
-D SCREEN_SCL=13
Di seguito trovi il sorgente completo dell’esempio.
Includiamo ed inizializziamo le librerie, definiamo un logo 32x32px che abbiamo precedentemente convertito. Nel setup() utilizziamo delle semplici funzioni per visualizzare il logo e del testo.
NB: Un tool online che trovo utilissimo per convertire le immagini in codice cpp pronto è image2cpp.
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define LOGO_HEIGHT 32
#define LOGO_WIDTH 32
static const unsigned char PROGMEM logo_bmp[] =
{ 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xfc, 0x7f, 0xfe, 0x3f,
0xf8, 0xff, 0xff, 0x1f, 0xf3, 0xff, 0xff, 0xcf, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xff, 0xff, 0xe7,
0xcf, 0xff, 0xff, 0xf3, 0xdf, 0xff, 0xff, 0xfb, 0x9f, 0x3f, 0xff, 0xf9, 0x9f, 0x3f, 0xff, 0xf9,
0xbf, 0x3f, 0xff, 0xfd, 0xb8, 0x07, 0xe0, 0x1d, 0xbf, 0x3f, 0xff, 0xfd, 0x3f, 0x3f, 0xff, 0xfc,
0x3f, 0x3f, 0xff, 0xfc, 0xbf, 0xbf, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xfd,
0x9f, 0xf8, 0x1f, 0xf9, 0x9e, 0xf0, 0x0f, 0x79, 0xde, 0x00, 0x00, 0x7b, 0xcf, 0x00, 0x00, 0xf3,
0xe7, 0x01, 0x80, 0xe7, 0xe7, 0xc3, 0xc3, 0xe7, 0xf3, 0xff, 0xff, 0xcf, 0xf8, 0xff, 0xff, 0x1f,
0xfc, 0x7f, 0xfe, 0x3f, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xfe, 0x7f, 0xff };
void setup() {
Serial.begin(115200);
Wire.begin(SCREEN_SDA, SCREEN_SCL);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.drawBitmap(0, 0, logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
display.display();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(WHITE); // Draw white text
display.setCursor(35,5); // Start at top-left corner
display.println(F("ZioTester Lab"));
display.setCursor(35,15); // Start at top-left corner
display.println(F("I2C Oled"));
display.setCursor(35,25); // Start at top-left corner
display.println(F("example"));
display.display();
}
void loop() {}