Nota

Ciao, benvenuto nella Community di SunFounder per appassionati di Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima agli annunci dei nuovi prodotti e alle anticipazioni.

  • Sconti Speciali: Godi di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a giveaway e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!

OLED

Panoramica

In questa lezione imparerai a conoscere i display OLED utilizzando il driver SSD1306. I display OLED (diodi organici a emissione di luce) sono ampiamente utilizzati in vari dispositivi elettronici come smartwatch, telefoni cellulari e persino televisori. L’SSD1306 è un driver OLED/PLED CMOS a chip singolo con controller per sistemi di visualizzazione grafica a matrice di punti a diodi organici/polimerici a emissione di luce. Offre un output visivo nitido e chiaro attraverso i diodi a base di materiale organico che emettono luce quando una corrente elettrica li attraversa.

Nel codice fornito, un display OLED è interfacciato con una scheda Arduino tramite il protocollo I2C. Il codice utilizza la libreria Adafruit SSD1306 per controllare il display. Il programma copre varie funzionalità come:

  1. Visualizzazione del testo: «Hello world!» viene stampato sullo schermo.

  2. Testo invertito: Il testo «Hello world!» viene visualizzato in uno schema di colori invertito.

  3. Dimensione del carattere: Il testo «Hello!» viene visualizzato con una dimensione del carattere aumentata.

  4. Visualizzazione numerica: Vengono visualizzati i numeri 123456789.

  5. Caratteri ASCII: Viene visualizzata una serie di caratteri ASCII.

  6. Scorrimento: Il testo scorre orizzontalmente sul display.

  7. Visualizzazione di bitmap: Viene visualizzata un’immagine bitmap predefinita sullo schermo OLED.

Questo display OLED può essere utilizzato in una moltitudine di applicazioni, tra cui orologi digitali, mini console di gioco, display informativi e così via. Offre un ottimo modo per fornire un’interfaccia utente in dispositivi compatti e portatili.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link seguenti.

INTRODUZIONE DEI COMPONENTI

LINK PER L’ACQUISTO

Arduino Uno R4 WiFi

-

Cavi Jumper

ACQUISTA

Modulo Display OLED

ACQUISTA

Cablaggio

../_images/15-oled_bb.png

Schema Elettrico

../_images/15_oled_schematic.png

Codice

Nota

  • Puoi aprire direttamente il file 15-oled.ino nel percorso elite-explorer-kit-main\basic_project\15-oled.

  • Oppure copia questo codice nell’Arduino IDE.

Nota

Per installare la libreria, utilizza l’Arduino Library Manager e cerca «Adafruit SSD1306» e «Adafruit GFX» e installala.

15-oled.ino
  1/*
  2  This code initializes an OLED display (SSD1306) using the Adafruit SSD1306 library, 
  3  and displays various text, numbers, and scroll animations on the screen.
  4
  5  Board: Arduino Uno R4 (or R3)
  6  Component:  OLED (SSD1306)
  7  Library: https://github.com/adafruit/Adafruit_SSD1306 (Adafruit SSD1306 by Adafruit)  
  8           https://github.com/adafruit/Adafruit-GFX-Library (Adafruit GFX Library by Adafruit) 
  9*/
 10
 11#include <SPI.h>
 12#include <Wire.h>
 13#include <Adafruit_GFX.h>
 14#include <Adafruit_SSD1306.h>
 15
 16#define SCREEN_WIDTH 128  // OLED display width, in pixels
 17#define SCREEN_HEIGHT 64  // OLED display height, in pixels
 18
 19// Declaration for SSD1306 display connected using I2C
 20#define OLED_RESET -1  // Reset pin # (or -1 if sharing Arduino reset pin)
 21#define SCREEN_ADDRESS 0x3C
 22Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 23
 24//Bitmap data
 25static const unsigned char PROGMEM sunfounderIcon[] = {
 26	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 
 27	0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 
 28	0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 
 29	0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xff, 
 30	0xff, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xff, 
 31	0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0x00, 0x07, 0xff, 0xff, 
 32	0xff, 0xff, 0xc0, 0x07, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xe0, 0x00, 0xff, 0xff, 
 33	0xff, 0xff, 0x00, 0x1f, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xf8, 0x00, 0x3f, 0xff, 
 34	0xff, 0xfc, 0x00, 0x7f, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xfc, 0x00, 0xfe, 0xff, 0x00, 0x07, 0xff, 
 35	0xff, 0xf8, 0x01, 0xfc, 0x7f, 0x80, 0x03, 0xff, 0xff, 0xf0, 0x03, 0xf8, 0x3f, 0xc0, 0x01, 0xff, 
 36	0xff, 0xe0, 0x07, 0xf0, 0x0f, 0xe0, 0x00, 0xff, 0xff, 0xc0, 0x0f, 0xe0, 0x07, 0xf8, 0x00, 0x3f, 
 37	0xff, 0x80, 0x0f, 0xc0, 0x03, 0xfc, 0x00, 0x7f, 0xff, 0x00, 0x1f, 0xc0, 0x01, 0xfe, 0x00, 0xff, 
 38	0xff, 0x00, 0x0f, 0xe0, 0x00, 0x7f, 0x81, 0xff, 0xff, 0x00, 0x0f, 0xf0, 0x00, 0x3f, 0xc3, 0xff, 
 39	0xff, 0x80, 0x03, 0xfc, 0x00, 0x1f, 0xe7, 0xff, 0xff, 0xc0, 0x01, 0xfe, 0x00, 0x0f, 0xff, 0xff, 
 40	0xff, 0xe0, 0x00, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0x80, 0x01, 0xff, 0xff, 
 41	0xff, 0xf8, 0x00, 0x1f, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xf0, 0x00, 0x7f, 0xff, 
 42	0xff, 0xff, 0x00, 0x07, 0xf8, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x03, 0xfc, 0x00, 0x0f, 0xff, 
 43	0xff, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0x80, 0x03, 0xff, 
 44	0xff, 0xff, 0xf8, 0x00, 0x3f, 0xc0, 0x01, 0xff, 0xff, 0xf3, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0xff, 
 45	0xff, 0xe1, 0xfe, 0x00, 0x07, 0xf8, 0x00, 0x7f, 0xff, 0xc0, 0x7f, 0x00, 0x03, 0xf8, 0x00, 0x7f, 
 46	0xff, 0x80, 0x3f, 0xc0, 0x01, 0xfc, 0x00, 0xff, 0xff, 0x00, 0x1f, 0xe0, 0x03, 0xf8, 0x00, 0xff, 
 47	0xfe, 0x00, 0x0f, 0xf0, 0x03, 0xf0, 0x01, 0xff, 0xff, 0x80, 0x07, 0xf8, 0x07, 0xe0, 0x03, 0xff, 
 48	0xff, 0xc0, 0x01, 0xfc, 0x0f, 0xc0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0xff, 0x1f, 0xc0, 0x0f, 0xff, 
 49	0xff, 0xf0, 0x00, 0x7f, 0xbf, 0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0x00, 0x3f, 0xff, 
 50	0xff, 0xfe, 0x00, 0x0f, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x07, 0xfc, 0x00, 0xff, 0xff, 
 51	0xff, 0xff, 0x80, 0x03, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xf0, 0x03, 0xff, 0xff, 
 52	0xff, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xff, 
 53	0xff, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, 
 54	0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 
 55	0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0xff, 0xff, 0xff, 
 56	0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x07, 0xff, 0xff, 0xff, 
 57	0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
 58};
 59
 60void setup() {
 61  Serial.begin(9600);
 62
 63  // initialize the OLED object
 64  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
 65    Serial.println(F("SSD1306 allocation failed"));
 66    for (;;)
 67      ;
 68  }
 69
 70  // Clear the buffer.
 71  display.clearDisplay();
 72
 73  // Display Text
 74  display.setTextSize(1);       // Set text size
 75  display.setTextColor(WHITE);  // Set text color
 76  display.setCursor(0, 28);     // Set cursor position
 77  display.println("Hello world!");
 78  display.display();  // Display the content on the screen
 79  delay(2000);
 80  display.clearDisplay();  // Clear the screen
 81
 82  // Display Inverted Text
 83  display.setTextColor(BLACK, WHITE);  // 'inverted' text
 84  display.setCursor(0, 28);
 85  display.println("Hello world!");
 86  display.display();
 87  delay(2000);
 88  display.clearDisplay();
 89
 90  // Changing Font Size
 91  display.setTextColor(WHITE);
 92  display.setCursor(0, 24);
 93  display.setTextSize(2);
 94  display.println("Hello!");
 95  display.display();
 96  delay(2000);
 97  display.clearDisplay();
 98
 99  // Display Numbers
100  display.setTextSize(1);
101  display.setCursor(0, 28);
102  display.println(123456789);
103  display.display();
104  delay(2000);
105  display.clearDisplay();
106
107  // Display ASCII Characters
108  display.setCursor(0, 24);
109  display.setTextSize(2);
110  for (int i = 1; i < 8; i++) {
111    display.write(i);
112  }
113  display.display();
114  delay(2000);
115  display.clearDisplay();
116
117  // Scroll full screen
118  display.setCursor(0, 0);
119  display.setTextSize(1);
120  display.println("Full");
121  display.println("screen");
122  display.println("scrolling!");
123  display.display();
124  display.startscrollright(0x00, 0x07);  // Scroll the screen to the right
125  delay(5000);
126  display.stopscroll();
127  delay(1000);
128  display.startscrollleft(0x00, 0x07);  // Scroll the screen to the left
129  delay(5000);
130  display.stopscroll();
131  delay(1000);
132  display.clearDisplay();
133
134  // Scroll part of the screen
135  display.setCursor(0, 0);
136  display.setTextSize(1);
137  display.println("Scroll");
138  display.println("some part");
139  display.println("of the screen.");
140  display.display();
141  display.startscrollright(0x00, 0x00);  // Scroll the first column of the screen to the right
142  delay(4000);
143  display.stopscroll();
144  display.clearDisplay();
145
146  // Display bitmap
147  display.drawBitmap(32, 0, sunfounderIcon, 64, 64, WHITE);
148  display.display();
149}
150
151void loop() {
152}


Analisi del Codice

  1. Inclusione della Libreria e Definizioni Iniziali: Le librerie necessarie per l’interfacciamento con l’OLED sono incluse. Successivamente, vengono fornite le definizioni relative alle dimensioni dell’OLED e all’indirizzo I2C.

    • Adafruit SSD1306: Questa libreria è progettata per aiutare con l’interfacciamento del display OLED SSD1306. Fornisce metodi per inizializzare il display, controllarne le impostazioni e visualizzare i contenuti.

    • Adafruit GFX Library: Questa è una libreria grafica di base per visualizzare testo, produrre colori, disegnare forme, ecc., su vari schermi, inclusi gli OLED.

    Nota

    Per installare la libreria, utilizza l’Arduino Library Manager e cerca «Adafruit SSD1306» e «Adafruit GFX» e installala.

    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define SCREEN_WIDTH 128  // Larghezza del display OLED in pixel
    #define SCREEN_HEIGHT 64  // Altezza del display OLED in pixel
    
    #define OLED_RESET -1
    #define SCREEN_ADDRESS 0x3C
    
  2. Dati Bitmap: Dati bitmap per visualizzare un’icona personalizzata sullo schermo OLED. Questi dati rappresentano un’immagine in un formato che l’OLED può interpretare.

    Puoi usare questo strumento online chiamato image2cpp che può trasformare la tua immagine in un array.

    La parola chiave PROGMEM indica che l’array è memorizzato nella memoria del programma del microcontrollore Arduino. Memorizzare i dati nella memoria del programma (PROGMEM) invece che nella RAM può essere utile per grandi quantità di dati, che altrimenti occuperebbero troppo spazio nella RAM.

    static const unsigned char PROGMEM sunfounderIcon[] = {...};
    
  3. Funzione Setup (Inizializzazione e Visualizzazione): La funzione setup() inizializza l’OLED e visualizza una serie di schemi, testi e animazioni.

    void setup() {
       ...  // Inizializzazione seriale e dell'oggetto OLED
       ...  // Visualizzazione di vari testi, numeri e animazioni
    }