CARATTERISTICHE:
Il modulo display OLED SSD1306 da 0,96" pollici è un'unità compatta e autonoma che include uno schermo OLED e un circuito integrato: il driver grafico SSD1306 che controlla il display e gestisce la comunicazione tra lo schermo e il dispositivo host, ad esempio un microcontrollore. Lo schermo ha una risoluzione di 128x64 pixel ed è suddiviso in due zone distinte di colore: una zona sottile nella parte alta dello schermo che presenta una colorazione gialla e una colorazione azzurra nella zona rimanente. In entrambi le zone è possibile impostare questi colori come background oppure come colori del testo o della rappresenatazione grafica in corso.
Essendo equipaggiato con tecnologia OLED è meno energivoro poichè non è presente la retroilluminazione come nei display TFT LCD.
Il modulo OLED è ideale per la visualizzazione di informazioni grafiche e testuali. E' spesso utilizzato in dispositivi portatili, dispositivi indossabili e in altri progetti di elettronica in cui è necessario un piccolo e performante display a basso consumo energetico.
Il modulo è adatto per tutti quei progetti sviluppati con microcontrollori come ESP32, ARDUINO, RASPBERRY, STM32 ed altri controller.
COME UTILIZZARLO:
Il display SSD1306 OLED da 0,96" presenta un' interfaccia seriale I2C.
Il modulo è predisposto con 4 pin da 2,54 mm per effetuare i collegamenti: GND, VCC per l'alimentazione e SDA, SCL per la comunicazione.
In questo modulo OLED è integrato un regolatore di tensione LDO (Low Dropout) da 3,3V che permette di alimentarlo anche a 5V.
Le linee di comunicazione SDA e SCL non posseggono un convertitore di livello logico quindi è consigliabile usare un livello logico di 3,3V.
L'indirizzo I2C di base del dispositivo è impostato su 03xC.
E' possibile modificare l'indirizzo I2C del modulo: sul retro della scheda sono presenti due piazzole smd aventi due serigrafie 0x7B e 0x7A, il pin centrale è in comune e permettono la saldatura di una piccola resistenza. Di default la resistenza è montata verso sinistra, sulla piazzola con serigrafia 0x7B e in questo caso l'indirizzo I2C del modulo è 0x3C. Per modificare l'indirizzo I2C in 0x3D è necessario dissaldare la resistenza e spostarla verso destra quindi saldarla sulla piazzola che presenta la serigrafia 0x7A.
Il circuito di reset è a bordo del modulo quindi non è necessario un pin di controllo per il reset.
Specifiche:
- Dimensione del schermo: 0.96“
- Risoluzione: 128 x 64 pixel
- Driver IC: SSD1306
- Tensione: 3,3V - 5V DC
- Consumo energetico: 0,06W
- Angolo di visione: > 160°
- Temperatura di lavoro: -30°C ~ 70°C
- Dimensioni del modulo: 26mm x 26mm
ESEMPIO DI UTILIZZO CON PLATFORMIO E ARDUINO IDE:
Per maggiori informazioni su PlatformIO.
Dispositivi utilizzati per l’esempio:
- Microcontrollore ESP32 DevKitC 38 PIN
- SSD1306 Display OLED 128×64 pixel I2C
- ESP32 DevKitC 38 PIN Screw Terminal Board o Breadboard
In alternativa all' ESP32 DevKitC 38 PIN Screw Terminal Board è possibile utilizzare:
Qui è possibile consultare ulteriori esempi sui display:
- https://ziotester.github.io/code/tft-espi/
- https://ziotester.github.io/code/lvgl/
- https://ziotester.github.io/retrogaming/nesp32/
Collegamenti:
- Pin Vcc display ➞ 3.3V Esp32
- Pin GND display ➞ GND Esp32
- Pin SDA display ➞ GPIO 32 Esp32
- Pin SCL display ➞ GPIO 33 Esp32
In questo esempio vedremo anche come leggere e scrivere sulla seriale l'indirizzo del dispositivo connesso al bus I2C, inizializzando uno scanner I2C.
Codice:
Platformio.ini:
[env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 upload_speed = 921600 monitor_filters = esp32_exception_decoder lib_deps = adafruit/Adafruit SSD1306 @ ^2.5.7 = adafruit/Adafruit GFX Library @ ^1.11.5
Per l’esempio abbiamo aggiunto ed utilizzato le librerie: https://github.com/adafruit/Adafruit_SSD1306 - https://github.com/adafruit/Adafruit-GFX-Library
Main.cpp:
#include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Wire.h> // Dimensioni dello schermo #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() {
// Inizializza la comunicazione I2C Wire.begin(32, 33); Serial.begin(115200);
// Scansione indirizzo del dispositivo collegato sul bus SDA/SCL Serial.println("\nI2C Scanner"); byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for (address = 1; address < 127; address++) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) {
// Stampa dell' indirizzo sulla seriale all'avvio del programma Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); nDevices++; } else if (error == 4) { Serial.print("Unknow error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); } void loop() {
// Visualizzazione sul display display.begin(SSD1306_SWITCHCAPVCC, 0X3C); display.clearDisplay(); display.display(); display.fillRect(0, 0, 128, 15, WHITE); display.setTextSize(1.5); display.setTextColor(BLACK, WHITE); display.setCursor(28, 3); display.println("ZIO TESTER.IT"); display.display(); delay(1500); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(20, 35); display.println("SSD1306 - 0,96''"); display.display(); delay(3500); }