Search Code

Návod na ESP32 33/55 - Digitálna kocka pomocou SunFounder ESP32 IoT Learning kitu

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).

ESP32-33_digital-dice-main

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

ESP32-33_digital-dice-wiring

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.

ESP32-33_digital-dice-schematic

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.

74HC595 LED Display: Seven-Segment Explained
74HC595 LED displej: Vysvetlenie sedemsegmentového displeja

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

Images

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-main
ESP32-33_digital-dice-main
ESP32-33_digital-dice-schematic
ESP32-33_digital-dice-schematic
834-ESP32 Tutorial 33/55- Arduino code for digital dice
Language: C++
// 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);
}

Resources & references

Files📁

No files available.