Samouczek ESP32 10/55 - Licznik cyfrowy z wykorzystaniem wyświetlacza siedmiosegmentowego 74HC595 - Zestaw edukacyjny IoT ESP32
W tym samouczku stworzymy licznik cyfrowy wykorzystujący wyświetlacz siedmiosegmentowy sterowany mikrokontrolerem ESP32. Licznik będzie zwiększał wartość od 0 do 9, a następnie zmniejszał z powrotem do 0, zapewniając wyraźny wizualny przebieg procesu zliczania. Przyjrzymy się również, jak włączać poszczególne segmenty i wyświetlać litery na wyświetlaczu siedmiosegmentowym.

Ten projekt wykorzystuje rejestr przesuwny 74HC595 do sterowania wyświetlaczem, co pozwala nam efektywnie zarządzać segmentami bez użycia zbyt wielu pinów GPIO na ESP32. Wysyłając wartości binarne do rejestru przesuwnego, możemy zapalać odpowiednie segmenty, aby przedstawiać liczby i litery. Aby lepiej zrozumieć ten proces, możesz odnieść się do wideo (na wideo o 03:15).
Objaśnienie sprzętu
Główne komponenty tego projektu obejmują mikrokontroler ESP32, rejestr przesuwny 74HC595 oraz wyświetlacz siedmiosegmentowy. ESP32 to wydajny mikrokontroler z wbudowaną obsługą Wi-Fi i Bluetooth, co czyni go odpowiednim do projektów IoT. 74HC595 to rejestr przesuwny, który pozwala nam sterować wieloma wyjściami za pomocą zaledwie kilku pinów wejściowych. Działa poprzez pobieranie danych szeregowych i konwertowanie ich na wyjście równoległe, co jest idealne do sterowania wyświetlaczem siedmiosegmentowym.
Wyświetlacz siedmiosegmentowy składa się z siedmiu pojedynczych diod LED ułożonych w kształcie cyfry osiem. Każdy segment można włączać lub wyłączać, wysyłając odpowiednią wartość binarną do rejestru przesuwnego. Na przykład, aby wyświetlić cyfrę 0, wszystkie segmenty z wyjątkiem środkowego (G) muszą być zapalone.
Szczegóły z karty katalogowej
| Producent | Texas Instruments |
|---|---|
| Numer części | 74HC595 |
| Napięcie logiki/IO | 2 V do 6 V |
| Napięcie zasilania | 2 V do 6 V |
| Prąd wyjściowy (na kanał) | 6 mA |
| Prąd szczytowy (na kanał) | 35 mA |
| Zalecana częstotliwość PWM | Do 1 kHz |
| Progi logiczne wejścia | 0,3 VCC do 0,7 VCC |
| Spadek napięcia / RDS(on) / nasycenie | Maks. 0,2 V |
| Limity termiczne | 125 °C |
| Obudowa | DIP-16 |
| Uwagi / warianty | Dostępny w różnych obudowach |
- Zapewnij prawidłowe napięcie zasilania (2 V do 6 V).
- Ogranicz prąd wyjściowy, aby zapobiec przegrzaniu.
- Użyj oddzielnych rezystorów dla każdego segmentu, aby uzyskać optymalną jasność.
- Zachowaj ostrożność podczas okablowania, aby uniknąć zwarć i nieprawidłowych połączeń.
- Dokładnie przestrzegaj rozmieszczenia pinów, aby uniknąć błędnej konfiguracji.
Instrukcje okablowania

Zacznij od przygotowania płytki stykowej. Podłącz szynę masy (niebieska linia) i szynę zasilania (czerwona linia). Masa powinna być podłączona do niebieskiej linii po jednej stronie płytki stykowej, a zasilanie do czerwonej linii po przeciwnej stronie. Użyj czarnego przewodu, aby podłączyć masę ESP32 do szyny masy, oraz czerwonego przewodu, aby podłączyć pin 3,3 V ESP32 do szyny zasilania.
Następnie umieść rejestr przesuwny 74HC595 na płytce stykowej, upewniając się, że wcięcie jest prawidłowo zorientowane. Podłącz pin 11 (DS) do pinu 25 na ESP32, pin 12 (SH_CP) do pinu 26 oraz pin 14 (ST_CP) do pinu 27. Podłącz masę (pin 8) rejestru przesuwnego do szyny masy, a pin 10 (MR) do szyny zasilania w celu aktywacji.
W przypadku wyświetlacza siedmiosegmentowego podłącz piny odpowiadające segmentom (a-g) do pinów wyjściowych rejestru przesuwnego. Użyj rezystora (220 omów) połączonego szeregowo dla każdego segmentu, aby ograniczyć prąd. Upewnij się, że masz prawidłowe połączenia dla wspólnego pinu, który może być wspólną anodą lub katodą w zależności od typu wyświetlacza.
Przykłady kodu i omówienie
W funkcji setup zaczynamy od zdefiniowania pinów podłączonych do rejestru przesuwnego jako wyjścia. Zapewnia to, że nasz ESP32 może kontrolować dane wysyłane do wyświetlacza.
void setup ()
{
//ustaw piny jako wyjścia
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Tutaj definiujemy STcp, SHcp i DS jako piny podłączone odpowiednio do ST_CP, SH_CP i DS rejestru przesuwnego. Ustawienie tych pinów jako wyjść pozwala nam sterować rejestrem przesuwnym.
Główna pętla programu zlicza od 0 do 9, wysyłając odpowiednie wartości do wyświetlacza za pomocą funkcji shiftOut.
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ustaw ST_CP na niski poziom i trzymaj go nisko tak długo, jak transmitujesz
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //podnieś ST_CP, aby zapisać dane
delay(1000);
}
Ta pętla zwiększa zmienną num, wysyłając odpowiednią wartość z datArray na wyświetlacz co sekundę. Funkcja shiftOut przesyła dane do rejestru przesuwnego, który następnie zapala odpowiednie segmenty.
Demonstracja / Czego się spodziewać
Po zakończeniu podłączania i wgraniu kodu powinieneś zobaczyć, jak wyświetlacz siedmiosegmentowy liczy od 0 do 9, zatrzymując się na chwilę przed odliczaniem z powrotem do 0. Każda liczba będzie wyświetlana przez jedną sekundę. Jeśli chcesz przyspieszyć liczenie, możesz dostosować opóźnienie w pętli (na filmie w 15:30).
Podczas manipulowania segmentami indywidualnie pamiętaj o wysyłaniu poprawnych wartości binarnych, aby wyświetlić litery lub konkretne segmenty. Jeśli wyświetlacz wydaje się przyciemniony, rozważ dodanie osobnych rezystorów dla każdego segmentu, aby zapewnić równomierną jasność na całym wyświetlaczu.
Znaczniki czasowe filmu
- 00:00 Start
- 1:53 Wprowadzenie do wyświetlacza siedmiosegmentowego
- 4:38 Wyjaśnienie podłączenia
- 13:15 Kod Arduino-1
- 17:01 Wybór portu COM i płytki ESP32
- 18:43 Demonstracja-1
- 20:13 Wyświetlanie tylko jednej cyfry
- 21:38 Licznik w górę i w dół
- 23:07 Włączanie/wyłączanie każdego segmentu
- 24:53 Wyświetlanie 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
Zasoby i odniesienia
-
DokumentacjaESP32 Tutorial 10/55 - SunFounder page for Seven Segmentdocs.sunfounder.com
Pliki📁
Brak dostępnych plików.