Tutorial ESP32 33/55 - Zar digital folosind kitul de învățare IoT SunFounder pentru ESP32
În acest tutorial, vom crea un zar digital folosind un afișaj cu șapte segmente și ESP32 din kitul de învățare IoT de la SunFounder. Proiectul vă va permite să aruncați un zar virtual, generând numere de la 1 la 6 la apăsarea unui buton. Aceasta este o modalitate excelentă de a explora capacitățile ESP32 în timp ce învățați despre interfațarea cu afișaje și butoane. Pentru claritate suplimentară, asigurați-vă că vizionați videoclipul (în videoclip la 0:00).
Hardware Explicat
Componentele principale pentru acest proiect includ microcontrolerul ESP32, registrul de deplasare 74HC595, un afișaj cu șapte segmente și un buton. ESP32 este un microcontroler puternic care integrează Wi-Fi și Bluetooth, fiind potrivit pentru aplicații IoT. Registrul de deplasare 74HC595 ne permite să controlăm afișajul cu șapte segmente folosind mai puțini pini decât conectarea directă a fiecărui segment.
Afișajul cu șapte segmente afișează numere și este controlat prin trimiterea de date de la registrul de deplasare. Butonul este folosit pentru a declanșa aruncarea zarului, generând un număr aleatoriu care va fi afișat. Când este apăsat, butonul se conectează la pinul 13 al ESP32, care are un rezistor intern de pull-up pentru a-l menține într-o stare înaltă când nu este apăsat.
Detalii din Fișa Tehnică
| Producător | Texas Instruments |
|---|---|
| Număr de piesă | 74HC595 |
| Tensiune logică/IO | 2 V până la 6 V |
| Tensiune de alimentare | 4,5 V până la 5,5 V |
| Curent de ieșire (pe canal) | 6 mA max |
| Curent de vârf (pe canal) | 35 mA max |
| Ghid de frecvență PWM | Nu se aplică |
| Praguri logice de intrare | VIH ≥ 2 V, VIL ≤ 0,8 V |
| Cădere de tensiune / RDS(on) / saturație | 0,5 V max |
| Limite termice | 150 °C |
| Pachet | DIP-16 |
| Note / variante | Folosit frecvent în afișaje digitale |
- Asigurați niveluri de tensiune adecvate (4,5 V până la 5,5 V) pentru o funcționare fiabilă.
- Limitați curentul de ieșire pentru a evita deteriorarea registrului de deplasare.
- Folosiți condensatoare de decuplare lângă pinii de alimentare pentru a stabiliza tensiunea.
- Conectați corect afișajul cu șapte segmente pentru a evita reprezentarea greșită a numerelor.
- Verificați cablurile pentru conexiuni slabe care pot duce la comportament neașteptat.
Instrucțiuni de Cablare

Pentru a cabla zarul digital, începeți prin configurarea conexiunilor de alimentare. Conectați masa (linia albastră) de pe breadboard la pinul de masă al ESP32 și asigurați-vă că toate punctele de masă sunt interconectate. Apoi, conectați un pin de 3,3V de la ESP32 la linia de alimentare (linia roșie) de pe breadboard.
Pentru registrul de deplasare 74HC595, asigurați-vă că pinul 1 este conectat la linia de 3,3V, iar pinul 8 la masă. Conectați pinul de ieșire a datelor (DS) la pinul 25 al ESP32, pinul de ceas de deplasare (SHCP) la pinul 26 și pinul de ceas de stocare (STCP) la pinul 27. Butonul trebuie conectat între pinul 13 al ESP32 și masă, permițându-i să tragă pinul la nivel jos când este apăsat.
Exemple de Cod & Explicații
În cod, definim mai întâi pinii folosiți pentru registrul de deplasare și buton. Pinul butonului este definit ca buttonPin și este setat la pinul 13 al ESP32. Matricea de date datArray conține reprezentările binare ale numerelor 0-9 pentru afișajul cu șapte segmente.
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP
const int DS = 25; //DS
const int buttonPin = 13;
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
În funcția setup(), setăm pinul butonului în modul de intrare și pinii registrului de deplasare în modul de ieșire. Aceasta pregătește pinii pentru citirea intrării de la buton și pentru trimiterea datelor către afișaj.
void setup ()
{
pinMode(buttonPin,INPUT);
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Logica principală a programului se găsește în funcția loop(). Aceasta verifică dacă butonul este apăsat, generează un număr aleatoriu și apelează funcția show_number() pentru a afișa numărul pe afișajul cu șapte segmente.
void loop()
{
if(digitalRead(buttonPin) == LOW)
{
int diceNumber = random(1, 7);
show_number(diceNumber);
delay(50);
}
}
Funcția show_number() trimite valoarea corespunzătoare din matricea de date către registrul de deplasare, care controlează apoi segmentele afișajului pentru a arăta numărul generat. Această funcție este crucială pentru feedback-ul vizual când butonul este apăsat.
Demonstrație / Ce să Vă Așteptați
Când configurarea este finalizată și codul este încărcat, apăsarea butonului va genera un număr aleatoriu între 1 și 6, care va fi afișat pe afișajul cu șapte segmente. Dacă totul este conectat corect, afișajul ar trebui să arate un număr de fiecare dată când butonul este apăsat. Fiți atenți la intrările flotante; asigurați-vă că butonul este conectat corespunzător la masă pentru a evita comportamentul erratic (în video la 1:30).
Marcaje temporale video
- 00:00 Start
- 1:48 Introducerea proiectului
- 3:40 Conexiunile pentru Zarul Digital explicate
- 13:16 Codul Arduino pentru Zarul Digital explicat
- 19:19 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
- 21:00 Demonstrația Zarului Digital
- 22:15 Corectarea codului Arduino
// Define the pins used for the 74hc595 and button
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP
const int DS = 25; //DS
const int buttonPin = 13;
// Define an array of values to display numbers on a 7-segment display
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int buttonState = false;
void setup ()
{
// Set the button pin to input mode
pinMode(buttonPin,INPUT);
//Set pins to 74hc595
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
// Check if the button is pressed
if(digitalRead(buttonPin) == LOW)
{
// Generate a random number between 1 and 6
int diceNumber = random(1, 7);
// Display the number on the 7-segment display
show_number(diceNumber);
// Delay for 50 milliseconds
delay(50);
}
}
// Function to display a number on a 7-segment display
void show_number(int num)
{
// Ground ST_CP and hold low for as long as you are transmitting
digitalWrite(STcp, LOW);
// Send the data for the number to the shift register
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
// Pull the ST_CP to save the data
digitalWrite(STcp, HIGH);
}
Common Course Links
Common Course Files
Resurse și referințe
-
DocumentațieESP32 Tutorial 33/55 - SunFounder doc page for digital dicedocs.sunfounder.com
Fișiere📁
Nu sunt disponibile fișiere.