Search Code

ESP32 Tutoriaal 33/55 - Digitale Dobbelsteen met behulp van SunFounder se ESP32 IoT-leerkit

ESP32 Tutoriaal 33/55 - Digitale Dobbelsteen met behulp van SunFounder se ESP32 IoT-leerkit

In hierdie tutoriaal gaan ons 'n digitale dobbelsteen skep deur gebruik te maak van 'n sewe-segment vertoning en die ESP32 van SunFounder se IoT-leerkit. Die projek sal jou toelaat om 'n virtuele dobbelsteen te rol, wat getalle van 1 tot 6 genereer met die druk van 'n knoppie. Dit is 'n wonderlike manier om die vermoëns van die ESP32 te verken terwyl jy leer oor koppelvlakke met vertonings en knoppies. Vir addisionele duidelikheid, maak seker om die video te kyk by (in video by 0:00).

ESP32-33_digital-dice-main

Hardeware Verduidelik

Die hoofkomponente vir hierdie projek sluit die ESP32-mikrobeheerder, 'n 74HC595-skuifregister, 'n sewe-segment vertoning en 'n drukknoppie in. Die ESP32 is 'n kragtige mikrobeheerder wat Wi-Fi en Bluetooth integreer, wat dit geskik maak vir IoT-toepassings. Die 74HC595-skuifregister stel ons in staat om die sewe-segment vertoning te beheer met minder penne as om elke segment direk te koppel.

Die sewe-segment vertoning wys getalle en word beheer deur data vanaf die skuifregister te stuur. Die drukknoppie word gebruik om die dobbelsteenrol te aktiveer, wat 'n ewekansige getal genereer wat vertoon sal word. Wanneer dit gedruk word, verbind die knoppie aan pen 13 op die ESP32, wat 'n interne optrekweerstand het om dit in 'n hoë toestand te hou wanneer dit nie gedruk word nie.

Datablad Besonderhede

Vervaardiger Texas Instruments
Deelnommer 74HC595
Logika/IO-spanning 2 V tot 6 V
Toevoerspanning 4.5 V tot 5.5 V
Uitsetstroom (per kanaal) 6 mA maks
Piekstroom (per kanaal) 35 mA maks
PWM-frekwensie riglyne Nie van toepassing nie
Inset logika drempels VIH ≥ 2 V, VIL ≤ 0.8 V
Spanningval / RDS(on) / versadiging 0.5 V maks
Termiese limiete 150 °C
Pakket DIP-16
Notas / variante Algemeen gebruik in digitale vertonings

 

  • Verseker behoorlike spanningsvlakke (4.5 V tot 5.5 V) vir betroubare werking.
  • Beperk uitsetstroom om skade aan die skuifregister te vermy.
  • Gebruik ontkoppelingskapasitors naby die kragpenne om spanning te stabiliseer.
  • Koppel die sewe-segment vertoning korrek om wanvoorstelling van getalle te vermy.
  • Kontroleer bedrading vir los verbindings wat tot onverwagte gedrag kan lei.

Bedradingsinstruksies

ESP32-33_digital-dice-wiring

Om die digitale dobbelsteen te bedraad, begin deur die kragverbindings op te stel. Koppel die grond (blou lyn) op jou broodbord aan die grondpen op die ESP32 en verseker dat alle grondpunte onderling verbind is. Koppel volgende 'n 3.3V-pen vanaf die ESP32 aan die kragrel (rooi lyn) op die broodbord.

ESP32-33_digital-dice-schematic

Vir die 74HC595-skuifregister, verseker dat pen 1 aan die 3.3V-rel gekoppel is, en pen 8 aan grond. Koppel die data-uitsetpen (DS) aan pen 25 op die ESP32, die skuifklokpen (SHCP) aan pen 26, en die stoor-klokpen (STCP) aan pen 27. Die drukknoppie moet tussen pen 13 op die ESP32 en grond gekoppel word, wat dit toelaat om die pen laag te trek wanneer dit gedruk word.

Kode Voorbeelde & Deurloop

In die kode definieer ons eers die penne wat vir die skuifregister en die knoppie gebruik word. Die knoppiepen word gedefinieer as buttonPin en is ingestel op pen 13 op die ESP32. Die data-array datArray bevat die binêre voorstellings van die getalle 0-9 vir die sewe-segment vertoning.


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};

In die setup()-funksie stel ons die knoppiepen op insetmodus en die skuifregisterpenne op uitsetmodus. Dit berei die penne voor vir die lees van inset vanaf die knoppie en vir die stuur van data na die vertoning.


void setup ()
{
  pinMode(buttonPin,INPUT); 
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

Die hoof logika van die program word in die loop()-funksie gevind. Dit kontroleer of die knoppie gedruk is, genereer 'n ewekansige getal, en roep die show_number()-funksie aan om die getal op die sewe-segment vertoning te wys.


void loop()
{
  if(digitalRead(buttonPin) == LOW)
  {
    int diceNumber = random(1, 7);
    show_number(diceNumber);
    delay(50);
  }
}

Die show_number()-funksie stuur die toepaslike waarde vanaf die data-array na die skuifregister, wat dan die segmente van die vertoning beheer om die gegenereerde getal te wys. Hierdie funksie is noodsaaklik vir visuele terugvoer wanneer die knoppie gedruk word.

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained

Demonstrasie / Wat om te VerwAg

Wanneer die opstelling voltooi is en die kode opgelaai is, sal die druk van die knoppie 'n ewekansige nommer tussen 1 en 6 genereer, wat op die sewe-segment vertoning gewys sal word. As alles korrek bedraad is, behoort die vertoning elke keer 'n nommer te wys wanneer die knoppie gedruk word. Wees versigtig met drywende insette; maak seker dat die knoppie behoorlik aan grond gekoppel is om onvoorspelbare gedrag te vermy (in video by 1:30).

Video Tydstempels

  • 00:00 Begin
  • 1:48 Projekbekendstelling
  • 3:40 Bedrading vir Digitale Dobbelsteen Verduidelik
  • 13:16 Arduino-kode vir Digitale Dobbelsteen verduidelik
  • 19:19 Kies ESP32-bord en COM-poort in Arduino IDE
  • 21:00 Digitale Dobbelsteen demonstrasie
  • 22:15 Regstelling van Arduino-kode

Beelde

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
Taal: 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);
}

Hulpbronne en verwysings

Lêers📁

Geen lêers beskikbaar.