Návod na ESP32 33/55 - Digitálna kocka pomocou SunFounder ESP32 IoT Learning kitu
V tomto návode si vytvoríme digitálnu kocku pomocou sedemsegmentového displeja a ESP32 zo vzdelávacej súpravy IoT od SunFounder. Projekt vám umožní hodiť virtuálnou kockou, ktorá generuje čísla od 1 do 6 stlačením tlačidla. Je to skvelý spôsob, ako preskúmať možnosti ESP32 a zároveň sa naučiť pracovať s displejmi a tlačidlami. Pre lepšiu prehľadnosť si pozrite video (vo videu o 0:00).
Vysvetlenie hardvéru
Hlavné komponenty tohto projektu zahŕňajú mikrokontrolér ESP32, posuvný register 74HC595, sedemsegmentový displej a tlačidlo. ESP32 je výkonný mikrokontrolér, ktorý integruje Wi-Fi a Bluetooth, vďaka čomu je vhodný pre IoT aplikácie. Posuvný register 74HC595 nám umožňuje ovládať sedemsegmentový displej pomocou menšieho počtu pinov, ako keby sme pripájali každý segment priamo.
Sedemsegmentový displej zobrazuje čísla a je ovládaný odosielaním dát z posuvného registra. Tlačidlo sa používa na spustenie hodu kockou, pričom generuje náhodné číslo, ktoré sa zobrazí. Po stlačení sa tlačidlo pripojí na pin 13 na ESP32, ktorý má interný pull-up rezistor, aby zostal vo vysokom stave, keď nie je stlačený.
Podrobnosti z datasheetu
| Výrobca | Texas Instruments |
|---|---|
| Označenie súčiastky | 74HC595 |
| Logické/IO napätie | 2 V až 6 V |
| Napájacie napätie | 4,5 V až 5,5 V |
| Výstupný prúd (na kanál) | max. 6 mA |
| Špičkový prúd (na kanál) | max. 35 mA |
| Odporúčania pre PWM frekvenciu | Neuplatňuje sa |
| Vstupné logické prahy | VIH ≥ 2 V, VIL ≤ 0,8 V |
| Pokles napätia / RDS(on) / saturácia | max. 0,5 V |
| Tepelné limity | 150 °C |
| Puzdro | DIP-16 |
| Poznámky / varianty | Bežne používaný v digitálnych displejoch |
- Zabezpečte správne úrovne napätia (4,5 V až 5,5 V) pre spoľahlivú prevádzku.
- Obmedzte výstupný prúd, aby ste nepoškodili posuvný register.
- Použite blokovacie kondenzátory v blízkosti napájacích pinov na stabilizáciu napätia.
- Správne pripojte sedemsegmentový displej, aby nedošlo k nesprávnemu zobrazeniu čísel.
- Skontrolujte zapojenie na uvoľnené spoje, ktoré by mohli viesť k neočakávanému správaniu.
Pokyny na zapojenie

Na zapojenie digitálnej kocky začnite nastavením napájacích pripojení. Pripojte zem (modrý vodič) na vašom breadboarde k uzemňovaciemu pinu na ESP32 a uistite sa, že všetky uzemňovacie body sú vzájomne prepojené. Potom pripojte 3,3V pin z ESP32 na napájaciu lištu (červený vodič) na breadboarde.
Pre posuvný register 74HC595 sa uistite, že pin 1 je pripojený na 3,3V lištu a pin 8 na zem. Pripojte dátový výstupný pin (DS) na pin 25 na ESP32, posuvný hodinový pin (SHCP) na pin 26 a pamäťový hodinový pin (STCP) na pin 27. Tlačidlo by malo byť pripojené medzi pin 13 na ESP32 a zem, čo umožní stiahnuť pin do nízkej úrovne po stlačení.
Príklady kódu a vysvetlenie
V kóde najprv definujeme piny použité pre posuvný register a tlačidlo. Pin tlačidla je definovaný ako buttonPin a je nastavený na pin 13 na ESP32. Dátové pole datArray obsahuje binárne reprezentácie čísel 0-9 pre sedemsegmentový displej.
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};
Vo funkcii setup() nastavíme pin tlačidla do vstupného režimu a piny posuvného registra do výstupného režimu. Tým sa pripravia piny na čítanie vstupu z tlačidla a na odosielanie dát na displej.
void setup ()
{
pinMode(buttonPin,INPUT);
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Hlavná logika programu sa nachádza vo funkcii loop(). Kontroluje, či je tlačidlo stlačené, generuje náhodné číslo a volá funkciu show_number() na zobrazenie čísla na sedemsegmentovom displeji.
void loop()
{
if(digitalRead(buttonPin) == LOW)
{
int diceNumber = random(1, 7);
show_number(diceNumber);
delay(50);
}
}
Funkcia show_number() odosiela príslušnú hodnotu z dátového poľa do posuvného registra, ktorý potom ovláda segmenty displeja na zobrazenie vygenerovaného čísla. Táto funkcia je kľúčová pre vizuálnu spätnú väzbu po stlačení tlačidla.
Demonštrácia / Čo očakávať
Keď je nastavenie dokončené a kód je nahraný, stlačenie tlačidla vygeneruje náhodné číslo medzi 1 a 6, ktoré sa zobrazí na sedemsegmentovom displeji. Ak je všetko správne zapojené, displej by mal pri každom stlačení tlačidla zobraziť číslo. Buďte opatrní pri plávajúcich vstupoch; uistite sa, že tlačidlo je správne pripojené k zemi, aby ste predišli nepravidelnému správaniu (vo videu o 1:30).
Časové značky videa
- 00:00 Začiatok
- 1:48 Predstavenie projektu
- 3:40 Vysvetlenie zapojenia pre digitálnu kocku
- 13:16 Vysvetlenie kódu Arduino pre digitálnu kocku
- 19:19 Výber dosky ESP32 a COM portu v Arduino IDE
- 21:00 Ukážka digitálnej kocky
- 22:15 Oprava kódu 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
Resources & references
-
DocumentationESP32 Tutorial 33/55- SunFounder doc page for digital dicedocs.sunfounder.com
Files📁
No files available.