ESP32 Tutorijal 33/55 - Digitalne kockice koristeći SunFounder-ov ESP32 IoT Learning komplet
U ovom tutorijalu ćemo napraviti digitalnu kockicu koristeći sedmosegmentni displej i ESP32 iz SunFounder IoT kompleta za učenje. Projekat će vam omogućiti da bacite virtuelnu kockicu, generišući brojeve od 1 do 6 pritiskom na dugme. Ovo je odličan način da istražite mogućnosti ESP32-a dok učite o povezivanju sa displejima i dugmadima. Radi dodatne jasnoće, obavezno pogledajte video (u videu na 0:00).
Objašnjenje hardvera
Glavne komponente za ovaj projekat uključuju ESP32 mikrokontroler, 74HC595 pomični registar, sedmosegmentni displej i tipku. ESP32 je moćan mikrokontroler koji integriše Wi-Fi i Bluetooth, što ga čini pogodnim za IoT aplikacije. 74HC595 pomični registar nam omogućava da kontrolišemo sedmosegmentni displej koristeći manje pinova nego direktnim povezivanjem svakog segmenta.
Sedmosegmentni displej prikazuje brojeve i kontroliše se slanjem podataka iz pomičnog registra. Tipka se koristi za pokretanje bacanja kockice, generišući nasumični broj koji će biti prikazan. Kada se pritisne, tipka se povezuje na pin 13 na ESP32, koji ima interni pull-up otpornik da ga drži u visokom stanju kada nije pritisnuta.
Detalji iz podatkovne tablice
| Proizvođač | Texas Instruments |
|---|---|
| Broj dijela | 74HC595 |
| Logički/IO napon | 2 V do 6 V |
| Napon napajanja | 4.5 V do 5.5 V |
| Izlazna struja (po kanalu) | 6 mA max |
| Vršna struja (po kanalu) | 35 mA max |
| Smjernice za PWM frekvenciju | Nije primjenjivo |
| Ulazni logički pragovi | VIH ≥ 2 V, VIL ≤ 0.8 V |
| Pad napona / RDS(on) / zasićenje | 0.5 V max |
| Toplotna ograničenja | 150 °C |
| Pakovanje | DIP-16 |
| Napomene / varijante | Često se koristi u digitalnim displejima |
- Osigurajte odgovarajuće nivoe napona (4.5 V do 5.5 V) za pouzdan rad.
- Ograničite izlaznu struju da biste izbjegli oštećenje pomičnog registra.
- Koristite decoupling kondenzatore blizu pinova napajanja za stabilizaciju napona.
- Povežite sedmosegmentni displej ispravno da biste izbjegli pogrešno prikazivanje brojeva.
- Provjerite ožičenje za labave veze koje mogu dovesti do neočekivanog ponašanja.
Upute za ožičenje

Da biste ožičili digitalnu kockicu, počnite postavljanjem veza napajanja. Povežite uzemljenje (plava linija) na vašoj breadboard ploči na pin uzemljenja na ESP32 i osigurajte da su sve tačke uzemljenja međusobno povezane. Zatim povežite 3.3V pin sa ESP32 na napojnu šinu (crvena linija) na breadboard ploči.
Za 74HC595 pomični registar, osigurajte da je pin 1 povezan na 3.3V šinu, a pin 8 na uzemljenje. Povežite pin izlaza podataka (DS) na pin 25 na ESP32, pin takta pomjeranja (SHCP) na pin 26, i pin takta skladištenja (STCP) na pin 27. Tipka treba biti povezana između pina 13 na ESP32 i uzemljenja, omogućavajući joj da povuče pin na nisko stanje kada je pritisnuta.
Primjeri koda i objašnjenje
U kodu, prvo definišemo pinove koji se koriste za pomični registar i tipku. Pin tipke je definisan kao buttonPin i postavljen je na pin 13 na ESP32. Niz podataka datArray sadrži binarne reprezentacije brojeva 0-9 za sedmosegmentni 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};
U setup() funkciji, postavljamo pin tipke u ulazni mod i pinove pomičnog registra u izlazni mod. Ovo priprema pinove za čitanje ulaza sa tipke i za slanje podataka na displej.
void setup ()
{
pinMode(buttonPin,INPUT);
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
Glavna logika programa nalazi se u loop() funkciji. Provjerava da li je tipka pritisnuta, generiše nasumični broj i poziva show_number() funkciju da prikaže broj na sedmosegmentnom displeju.
void loop()
{
if(digitalRead(buttonPin) == LOW)
{
int diceNumber = random(1, 7);
show_number(diceNumber);
delay(50);
}
}
show_number() funkcija šalje odgovarajuću vrijednost iz niza podataka u pomični registar, koji zatim kontroliše segmente displeja da prikaže generisani broj. Ova funkcija je ključna za vizuelnu povratnu informaciju kada je tipka pritisnuta.
Demonstracija / Šta očekivati
Kada je podešavanje završeno i kod je uploadovan, pritiskanje dugmeta će generisati nasumični broj između 1 i 6, koji će biti prikazan na sedmosegmentnom displeju. Ako je sve pravilno povezano, displej bi trebao pokazati broj svaki put kada se dugme pritisne. Budite oprezni sa plutajućim ulazima; osigurajte da je dugme pravilno povezano na masu kako biste izbjegli nepravilno ponašanje (u videu na 1:30).
Vremenske oznake videa
- 00:00 Početak
- 1:48 Uvod u projekat
- 3:40 Objašnjeno povezivanje za digitalne kockice
- 13:16 Objašnjen Arduino kod za digitalne kockice
- 19:19 Odabir ESP32 ploče i COM porta u Arduino IDE-u
- 21:00 Demonstracija digitalnih kockica
- 22:15 Ispravljanje Arduino koda
// 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.