Szukaj kodu

Poradnik ESP32 33/55 - Cyfrowa kostka do gry z wykorzystaniem zestawu edukacyjnego SunFounder ESP32 IoT

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

ESP32-33_digital-dice-main

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

ESP32-33_digital-dice-wiring

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.

ESP32-33_digital-dice-schematic

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.

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

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

Obrazy

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
Język: 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);
}

Zasoby i odniesienia

Pliki📁

Brak dostępnych plików.