Tutorial ESP32 10/55 - Contor digital folosind afișaj cu șapte segmente 74HC595 - Kit de învățare IoT ESP32
În acest tutorial, vom crea un contor digital folosind un afișaj cu șapte segmente controlat de microcontrolerul ESP32. Contorul va crește de la 0 la 9 și apoi va scădea înapoi la 0, oferind o vizualizare clară a procesului de numărare. Vom explora, de asemenea, cum să aprindem segmente individuale și să afișăm litere pe afișajul cu șapte segmente.

Acest proiect utilizează un registru de deplasare 74HC595 pentru a controla afișajul, permițându-ne să gestionăm eficient segmentele fără a folosi prea mulți pini GPIO pe ESP32. Trimițând valori binare registrului de deplasare, putem aprinde segmentele corespunzătoare pentru a reprezenta numere și litere. Pentru o înțelegere mai profundă a procesului, puteți consulta videoclipul (în videoclip la 03:15).
Hardware Explicat
Componentele principale ale acestui proiect includ microcontrolerul ESP32, un registru de deplasare 74HC595 și un afișaj cu șapte segmente. ESP32 este un microcontroler puternic, cu capacități Wi-Fi și Bluetooth integrate, făcându-l potrivit pentru proiecte IoT. 74HC595 este un registru de deplasare care ne permite să controlăm multiple ieșiri folosind doar câțiva pini de intrare. Acesta funcționează prin preluarea datelor seriale și convertirea lor în ieșire paralelă, ceea ce este perfect pentru a acționa un afișaj cu șapte segmente.
Afișajul cu șapte segmente constă din șapte LED-uri individuale aranjate într-un model de cifra opt. Fiecare segment poate fi aprins sau stins prin trimiterea valorii binare corespunzătoare registrului de deplasare. De exemplu, pentru a afișa numărul 0, toate segmentele, cu excepția celui din mijloc (G), trebuie aprinse.
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 | 2 V până la 6 V |
| Curent de ieșire (pe canal) | 6 mA |
| Curent de vârf (pe canal) | 35 mA |
| Ghid frecvență PWM | Până la 1 kHz |
| Praguri logice de intrare | 0,3 VCC până la 0,7 VCC |
| Cădere de tensiune / RDS(on) / saturație | 0,2 V max |
| Limite termice | 125 °C |
| Pachet | DIP-16 |
| Note / variante | Disponibil în diverse pachete |
- Asigurați o alimentare adecvată cu tensiune (2 V până la 6 V).
- Limitați curentul de ieșire pentru a preveni supraîncălzirea.
- Folosiți rezistențe separate pentru fiecare segment pentru o luminozitate optimă.
- Fiți atenți la cablare pentru a evita scurtcircuitele și conexiunile incorecte.
- Urmați cu atenție configurația pinilor pentru a evita configurarea greșită.
Instrucțiuni de Cablare

Începeți prin pregătirea breadboard-ului. Conectați linia de masă (linia albastră) și linia de alimentare (linia roșie). Masina ar trebui să se conecteze la linia albastră pe o parte a breadboard-ului, în timp ce alimentarea ar trebui să se conecteze la linia roșie pe partea opusă. Folosiți un fir negru pentru a conecta masa ESP32 la linia de masă și un fir roșu pentru a conecta pinul de 3,3 V al ESP32 la linia de alimentare.
Apoi, introduceți registrul de deplasare 74HC595 în breadboard, asigurându-vă că crestătura este orientată corect. Conectați pinul 11 (DS) la pinul 25 de pe ESP32, pinul 12 (SH_CP) la pinul 26 și pinul 14 (ST_CP) la pinul 27. Conectați masa (pinul 8) a registrului de deplasare la linia de masă și pinul 10 (MR) la linia de alimentare pentru activare.
Pentru afișajul cu șapte segmente, conectați pinii corespunzători segmentelor (a-g) la pinii de ieșire ai registrului de deplasare. Folosiți o rezistență (220 ohmi) în serie pentru fiecare segment pentru a limita curentul. Asigurați-vă că aveți conexiuni corecte pentru pinul comun, care poate fi anod comun sau catod comun, în funcție de tipul afișajului dumneavoastră.
Exemple de Cod & Explicații
În funcția de configurare, începem prin definirea pinilor conectați la registrul de deplasare ca ieșiri. Acest lucru asigură că ESP32-ul nostru poate controla datele trimise către afișaj.
void setup ()
{
//setează pinii ca ieșiri
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Aici, definim STcp, SHcp și DS ca pinii conectați la ST_CP, SH_CP și DS ai registrului de deplasare, respectiv. Setarea acestor pini ca ieșiri ne permite să controlăm registrul de deplasare.
Bucla principală a programului numără de la 0 la 9, trimițând valorile corespunzătoare către afișaj folosind funcția shiftOut.
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //punem ST_CP la LOW și îl menținem LOW cât timp transmitem
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //tragem ST_CP la HIGH pentru a salva datele
delay(1000);
}
Această buclă incrementează variabila num, trimițând valoarea corespunzătoare din datArray către afișaj în fiecare secundă. Funcția shiftOut transmite datele către registrul de deplasare, care apoi aprinde segmentele potrivite.
Demonstrație / Ce să te aștepți
Odată ce conexiunile sunt finalizate și codul este încărcat, ar trebui să vezi afișajul cu șapte segmente numărând de la 0 la 9, cu o pauză scurtă înainte de a număra înapoi până la 0. Fiecare număr va fi afișat timp de o secundă. Dacă vrei să accelerezi numărarea, poți ajusta întârzierea din buclă (în videoclip la 15:30).
Când manipulezi segmentele individual, nu uita să trimiți valorile binare corecte pentru a afișa litere sau segmente specifice. Dacă afișajul pare întunecat, ia în considerare adăugarea de rezistențe individuale pentru fiecare segment pentru a asigura o luminozitate constantă pe tot afișajul.
Marcaje video
- 00:00 Început
- 1:53 Introducere în afișajul cu șapte segmente
- 4:38 Explicația conexiunilor
- 13:15 Cod Arduino-1
- 17:01 Selectarea portului COM și a plăcii ESP32
- 18:43 Demonstrație-1
- 20:13 Afișarea unui singur digit
- 21:38 Contor crescător și descrescător
- 23:07 Pornirea/oprirea fiecărui segment
- 24:53 Afișarea literelor A, B, C, D, E și F
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP
const int DS = 25; //DS
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
delay(1000);
}
}
Common Course Links
Common Course Files
Resurse și referințe
-
DocumentațieESP32 Tutorial 10/55 - SunFounder page for Seven Segmentdocs.sunfounder.com
Fișiere📁
Nu sunt disponibile fișiere.