Poradnik ESP32 33/55 - Cyfrowa kostka do gry z wykorzystaniem zestawu edukacyjnego SunFounder ESP32 IoT
W tym samouczku stworzymy cyfrową kostkę za pomocą wyświetlacza siedmiosegmentowego i ESP32 z zestawu do nauki IoT firmy SunFounder. Projekt pozwoli Ci rzucić wirtualną kostką, generując liczby od 1 do 6 po naciśnięciu przycisku. To świetny sposób na poznanie możliwości ESP32 podczas nauki obsługi wyświetlaczy i przycisków. Dla dodatkowej jasności obejrzyj wideo (na wideo w 0:00).
Wyjaśnienie sprzętu
Główne komponenty tego projektu to mikrokontroler ESP32, rejestr przesuwny 74HC595, wyświetlacz siedmiosegmentowy i przycisk. ESP32 to wydajny mikrokontroler zintegrowany z Wi-Fi i Bluetooth, co czyni go odpowiednim do zastosowań IoT. Rejestr przesuwny 74HC595 pozwala nam sterować wyświetlaczem siedmiosegmentowym przy użyciu mniejszej liczby pinów niż bezpośrednie podłączenie każdego segmentu.
Wyświetlacz siedmiosegmentowy pokazuje liczby i jest sterowany przez wysyłanie danych z rejestru przesuwnego. Przycisk służy do wyzwalania rzutu kostką, generując losową liczbę, która zostanie wyświetlona. Po naciśnięciu przycisk łączy się z pinem 13 na ESP32, który ma wewnętrzny rezystor podciągający, utrzymujący go w stanie wysokim, gdy nie jest wciśnięty.
Szczegóły z karty katalogowej
| Producent | Texas Instruments |
|---|---|
| Numer części | 74HC595 |
| Napięcie logiki/IO | 2 V do 6 V |
| Napięcie zasilania | 4,5 V do 5,5 V |
| Prąd wyjściowy (na kanał) | maks. 6 mA |
| Prąd szczytowy (na kanał) | maks. 35 mA |
| Zalecenia dotyczące częstotliwości PWM | Nie dotyczy |
| Progi logiczne wejścia | VIH ≥ 2 V, VIL ≤ 0,8 V |
| Spadek napięcia / RDS(on) / nasycenie | maks. 0,5 V |
| Limity termiczne | 150 °C |
| Obudowa | DIP-16 |
| Uwagi / warianty | Często używany w wyświetlaczach cyfrowych |
- Zapewnij odpowiednie poziomy napięcia (4,5 V do 5,5 V) dla niezawodnego działania.
- Ogranicz prąd wyjściowy, aby uniknąć uszkodzenia rejestru przesuwnego.
- Użyj kondensatorów odsprzęgających w pobliżu pinów zasilania, aby ustabilizować napięcie.
- Podłącz wyświetlacz siedmiosegmentowy poprawnie, aby uniknąć błędnego przedstawiania liczb.
- Sprawdź okablowanie pod kątem luźnych połączeń, które mogą prowadzić do nieoczekiwanego zachowania.
Instrukcje okablowania

Aby podłączyć cyfrową kostkę, zacznij od ustawienia połączeń zasilania. Podłącz masę (niebieska linia) na płytce stykowej do pinu masy na ESP32 i upewnij się, że wszystkie punkty masy są ze sobą połączone. Następnie podłącz pin 3,3 V z ESP32 do szyny zasilania (czerwona linia) na płytce stykowej.
Dla rejestru przesuwnego 74HC595 upewnij się, że pin 1 jest podłączony do szyny 3,3 V, a pin 8 do masy. Podłącz pin wyjścia danych (DS) do pinu 25 na ESP32, pin zegara przesuwania (SHCP) do pinu 26, a pin zegara zatrzasku (STCP) do pinu 27. Przycisk powinien być podłączony między pinem 13 na ESP32 a masą, co pozwoli mu ściągnąć pin do stanu niskiego po naciśnięciu.
Przykłady kodu i omówienie
W kodzie najpierw definiujemy piny używane dla rejestru przesuwnego i przycisku. Pin przycisku jest zdefiniowany jako buttonPin i ustawiony na pin 13 na ESP32. Tablica danych datArray zawiera binarne reprezentacje liczb 0-9 dla wyświetlacza siedmiosegmentowego.
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};
W funkcji setup() ustawiamy pin przycisku w tryb wejściowy, a piny rejestru przesuwnego w tryb wyjściowy. To przygotowuje piny do odczytu wejścia z przycisku i wysyłania danych do wyświetlacza.
void setup ()
{
pinMode(buttonPin,INPUT);
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Główna logika programu znajduje się w funkcji loop(). Sprawdza ona, czy przycisk jest wciśnięty, generuje losową liczbę i wywołuje funkcję show_number(), aby wyświetlić liczbę na wyświetlaczu siedmiosegmentowym.
void loop()
{
if(digitalRead(buttonPin) == LOW)
{
int diceNumber = random(1, 7);
show_number(diceNumber);
delay(50);
}
}
Funkcja show_number() wysyła odpowiednią wartość z tablicy danych do rejestru przesuwnego, który następnie steruje segmentami wyświetlacza, aby pokazać wygenerowaną liczbę. Ta funkcja jest kluczowa dla wizualnej informacji zwrotnej po naciśnięciu przycisku.
Demonstracja / Czego się spodziewać
Po zakończeniu konfiguracji i wgraniu kodu, naciśnięcie przycisku wygeneruje losową liczbę od 1 do 6, która zostanie wyświetlona na wyświetlaczu siedmiosegmentowym. Jeśli wszystko jest poprawnie podłączone, wyświetlacz powinien pokazywać liczbę za każdym razem, gdy przycisk zostanie naciśnięty. Należy uważać na pływające wejścia; upewnij się, że przycisk jest prawidłowo podłączony do masy, aby uniknąć niestabilnego działania (na filmie o 1:30).
Znaczniki czasowe wideo
- 00:00 Start
- 1:48 Wprowadzenie do projektu
- 3:40 Wyjaśnienie podłączeń dla cyfrowej kostki
- 13:16 Wyjaśnienie kodu Arduino dla cyfrowej kostki
- 19:19 Wybór płytki ESP32 i portu COM w Arduino IDE
- 21:00 Demonstracja cyfrowej kostki
- 22:15 Poprawianie kodu 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
Zasoby i odniesienia
-
DokumentacjaESP32 Tutorial 33/55 - SunFounder doc page for digital dicedocs.sunfounder.com
Pliki📁
Brak dostępnych plików.