ESP32 Tutorial 10/55 - Digitale teller met behulp van Seven Segment Display 74HC595 - ESP32 IoT Learning kit
In deze tutorial maken we een digitale teller met behulp van een zevensegmentdisplay dat wordt aangestuurd door de ESP32-microcontroller. De teller telt op van 0 tot 9 en telt vervolgens terug af naar 0, waardoor het telproces duidelijk zichtbaar is. We onderzoeken ook hoe we afzonderlijke segmenten kunnen inschakelen en letters kunnen weergeven op het zevensegmentdisplay.

Dit project maakt gebruik van een 74HC595-schuifregister om het display aan te sturen, waardoor we de segmenten efficiënt kunnen beheren zonder te veel GPIO-pinnen van de ESP32 te gebruiken. Door binaire waarden naar het schuifregister te sturen, kunnen we de bijbehorende segmenten laten oplichten om cijfers en letters weer te geven. Voor een beter begrip van het proces kun je de video raadplegen (in de video op 03:15).
Hardware uitgelegd
De belangrijkste componenten van dit project zijn de ESP32-microcontroller, een 74HC595-schuifregister en een zevensegmentdisplay. De ESP32 is een krachtige microcontroller met ingebouwde Wi-Fi- en Bluetooth-mogelijkheden, waardoor deze geschikt is voor IoT-projecten. De 74HC595 is een schuifregister waarmee we meerdere uitgangen kunnen aansturen met slechts een paar ingangspinnen. Het werkt door seriële gegevens om te zetten naar parallelle uitvoer, wat perfect is voor het aansturen van een zevensegmentdisplay.
Het zevensegmentdisplay bestaat uit zeven afzonderlijke LED's die in een achtvorm zijn gerangschikt. Elk segment kan worden in- of uitgeschakeld door de juiste binaire waarde naar het schuifregister te sturen. Om bijvoorbeeld het cijfer 0 weer te geven, moeten alle segmenten behalve het middelste segment (G) oplichten.
Datasheet-details
| Fabrikant | Texas Instruments |
|---|---|
| Onderdeelnummer | 74HC595 |
| Logica/IO-spanning | 2 V tot 6 V |
| Voedingsspanning | 2 V tot 6 V |
| Uitgangsstroom (per kanaal) | 6 mA |
| Piekstroom (per kanaal) | 35 mA |
| PWM-frequentierichtlijn | Tot 1 kHz |
| Ingangslogische drempels | 0,3 VCC tot 0,7 VCC |
| Spanningsval / RDS(on) / verzadiging | 0,2 V max |
| Thermische limieten | 125 °C |
| Behuizing | DIP-16 |
| Opmerkingen / varianten | Beschikbaar in verschillende behuizingen |
- Zorg voor een correcte voedingsspanning (2 V tot 6 V).
- Beperk de uitgangsstroom om oververhitting te voorkomen.
- Gebruik afzonderlijke weerstanden voor elk segment voor optimale helderheid.
- Wees voorzichtig met de bedrading om kortsluiting en onjuiste verbindingen te voorkomen.
- Volg de pinout zorgvuldig om verkeerde configuratie te voorkomen.
Bedradingsinstructies

Begin met het opzetten van je breadboard. Verbind de aardrail (blauwe lijn) en de voedingsrail (rode lijn). De aarde moet worden verbonden met de blauwe lijn aan één kant van het breadboard, terwijl de voeding moet worden verbonden met de rode lijn aan de tegenoverliggende kant. Gebruik een zwarte draad om de aarde van de ESP32 te verbinden met de aardrail en een rode draad om de 3,3V-pin van de ESP32 te verbinden met de voedingsrail.
Plaats vervolgens het 74HC595-schuifregister in het breadboard en zorg ervoor dat de inkeping correct is georiënteerd. Verbind pin 11 (DS) met pin 25 op de ESP32, pin 12 (SH_CP) met pin 26 en pin 14 (ST_CP) met pin 27. Verbind de aarde (pin 8) van het schuifregister met de aardrail en pin 10 (MR) met de voedingsrail voor activering.
Voor het zevensegmentdisplay verbind je de pinnen die overeenkomen met de segmenten (a-g) met de uitgangspinnen van het schuifregister. Gebruik een weerstand (220 ohm) in serie voor elk segment om de stroom te beperken. Zorg voor correcte verbindingen voor de gemeenschappelijke pin, die gemeenschappelijke anode of kathode kan zijn, afhankelijk van het type display.
Codevoorbeelden & uitleg
In de setup-functie beginnen we met het definiëren van de pinnen die zijn verbonden met het schuifregister als uitgangen. Dit zorgt ervoor dat onze ESP32 de gegevens kan aansturen die naar het display worden verzonden.
void setup ()
{
//zet pinnen op uitgang
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Hier definiëren we STcp, SHcp en DS als de pinnen die respectievelijk zijn verbonden met de ST_CP, SH_CP en DS van het schuifregister. Door deze pinnen als uitgangen in te stellen, kunnen we het schuifregister aansturen.
De hoofdloop van het programma telt van 0 tot 9 en verzendt de bijbehorende waarden naar het display met behulp van de shiftOut-functie.
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP en houd laag zolang je verzendt
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //trek de ST_CPST_CP hoog om de data op te slaan
delay(1000);
}
Deze lus verhoogt de variabele num en stuurt elke seconde de bijbehorende waarde uit datArray naar het display. De functie shiftOut verzendt de data naar het schuifregister, dat vervolgens de juiste segmenten laat oplichten.
Demonstratie / Wat te verwachten
Zodra de bedrading compleet is en de code is geüpload, zie je het zevensegmentdisplay tellen van 0 tot 9, met een korte pauze voordat het terugtelt naar 0. Elk nummer wordt één seconde weergegeven. Als je het tellen wilt versnellen, kun je de vertraging in de lus aanpassen (in de video op 15:30).
Wanneer je de segmenten afzonderlijk bedient, vergeet dan niet de juiste binaire waarden te sturen om letters of specifieke segmenten weer te geven. Als het display zwak lijkt, overweeg dan om individuele weerstanden voor elk segment toe te voegen voor een gelijkmatige helderheid over het display.
Videotijdsstempels
- 00:00 Start
- 1:53 Introductie tot zevensegment
- 4:38 Bedrading uitgelegd
- 13:15 Arduino-code-1
- 17:01 COM-poort en ESP32-board selecteren
- 18:43 Demonstratie-1
- 20:13 Slechts één cijfer weergeven
- 21:38 Op- en neerteller
- 23:07 Elk segment AAN/UIT zetten
- 24:53 A, B, C, D, E en F weergeven
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
Hulpmiddelen en referenties
-
DocumentatieESP32 Tutorial 10/55 - SunFounder page for Seven Segmentdocs.sunfounder.com
Bestanden📁
Geen bestanden beschikbaar.