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:
Visualizzazione del testo: «Hello world!» viene stampato sullo schermo.
Testo invertito: Il testo «Hello world!» viene visualizzato in uno schema di colori invertito.
Dimensione del carattere: Il testo «Hello!» viene visualizzato con una dimensione del carattere aumentata.
Visualizzazione numerica: Vengono visualizzati i numeri 123456789.
Caratteri ASCII: Viene visualizzata una serie di caratteri ASCII.
Scorrimento: Il testo scorre orizzontalmente sul display.
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+ |
Puoi anche acquistarli separatamente dai link seguenti.
INTRODUZIONE DEI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Cablaggio
Schema Elettrico
Codice
Nota
Puoi aprire direttamente il file
15-oled.inonel percorsoelite-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.
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
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
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
PROGMEMindica 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[] = {...};
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 }