Пребарување код

ESP32 Упатство 33/55 - Дигитални коцки користејќи го SunFounder ESP32 IoT комплетот за учење

ESP32 Упатство 33/55 - Дигитални коцки користејќи го SunFounder ESP32 IoT комплетот за учење

Во ова упатство, ќе креираме дигитална коцка користејќи седум-сегментен дисплеј и ESP32 од IoT комплетот за учење на SunFounder. Проектот ќе ви овозможи да фрлите виртуелна коцка, генерирајќи броеви од 1 до 6 со притискање на копче. Ова е одличен начин да ги истражите можностите на ESP32 додека учите за поврзување со дисплеи и копчиња. За дополнителна јасност, задолжително погледнете го видеото (во видеото на 0:00).

ESP32-33_digital-dice-main

Објаснување на хардверот

Главните компоненти за овој проект вклучуваат ESP32 микроконтролер, 74HC595 shift register, седум-сегментен дисплеј и копче. ESP32 е моќен микроконтролер кој интегрира Wi-Fi и Bluetooth, што го прави погоден за IoT апликации. 74HC595 shift register ни овозможува да го контролираме седум-сегментниот дисплеј користејќи помалку пинови отколку директно поврзување на секој сегмент.

Седум-сегментниот дисплеј прикажува броеви и се контролира со испраќање податоци од shift register-от. Копчето се користи за активирање на фрлањето на коцката, генерирајќи случаен број кој ќе биде прикажан. Кога ќе се притисне, копчето се поврзува со пин 13 на ESP32, кој има внатрешен pull-up отпорник за да го одржува во висока состојба кога не е притиснато.

Детали од datasheet-от

Производител Texas Instruments
Број на дел 74HC595
Логички/IO напон 2 V до 6 V
Напон на напојување 4.5 V до 5.5 V
Излезна струја (по канал) 6 mA макс.
Врвна струја (по канал) 35 mA макс.
Насоки за PWM фреквенција Не е применливо
Прагови на влезна логика VIH ≥ 2 V, VIL ≤ 0.8 V
Пад на напон / RDS(on) / заситување 0.5 V макс.
Термички граници 150 °C
Пакет DIP-16
Белешки / варијанти Најчесто се користи во дигитални дисплеи

 

  • Осигурете соодветни нивоа на напон (4.5 V до 5.5 V) за сигурна работа.
  • Ограничете ја излезната струја за да избегнете оштетување на shift register-от.
  • Користете decoupling кондензатори блиску до пиновите за напојување за стабилизирање на напонот.
  • Поврзете го седум-сегментниот дисплеј правилно за да избегнете погрешно прикажување на броевите.
  • Проверете ги жиците за лабави врски кои може да доведат до неочекувано однесување.

Инструкции за поврзување

ESP32-33_digital-dice-wiring

За да го поврзете дигиталниот коцка, започнете со поставување на врските за напојување. Поврзете ја земјата (сина линија) на вашата breadboard со пин за земја на ESP32 и осигурете дека сите точки за земја се меѓусебно поврзани. Потоа, поврзете 3.3V пин од ESP32 со напојната шина (црвена линија) на breadboard-от.

ESP32-33_digital-dice-schematic

За 74HC595 shift register-от, осигурете дека пин 1 е поврзан со 3.3V шината, а пин 8 со земја. Поврзете го излезниот пин за податоци (DS) со пин 25 на ESP32, пин за shift clock (SHCP) со пин 26, и пин за storage clock (STCP) со пин 27. Копчето треба да биде поврзано помеѓу пин 13 на ESP32 и земја, овозможувајќи му да го повлече пинот на ниско ниво кога е притиснато.

Примери на код и објаснување

Во кодот, прво ги дефинираме пиновите што се користат за shift register-от и копчето. Пинот за копчето е дефиниран како buttonPin и е поставен на пин 13 на ESP32. Низата со податоци datArray ги содржи бинарните претстави на броевите 0-9 за седум-сегментниот дисплеј.


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

Во функцијата setup(), го поставуваме пинот за копчето во влезен режим и пиновите за shift register-от во излезен режим. Ова ги подготвува пиновите за читање влез од копчето и за испраќање податоци до дисплејот.


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

Главната логика на програмата се наоѓа во функцијата loop(). Таа проверува дали копчето е притиснато, генерира случаен број и ја повикува функцијата show_number() за да го прикаже бројот на седум-сегментниот дисплеј.


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

Функцијата show_number() ја испраќа соодветната вредност од низата со податоци до shift register-от, кој потоа ги контролира сегментите на дисплејот за да го прикаже генерираниот број. Оваа функција е клучна за визуелна повратна информација кога копчето е притиснато.

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

Демонстрација / Што да очекувате

Когато поставувањето е завршено и кодот е поставен, притискањето на копчето ќе генерира случаен број помеѓу 1 и 6, кој ќе биде прикажан на седумсегментниот дисплеј. Ако сè е правилно поврзано, дисплејот треба да покажува број секој пат кога ќе се притисне копчето. Бидете внимателни со лебдечки влезови; осигурете се дека копчето е правилно поврзано со земја за да избегнете непредвидливо однесување (во видеото на 1:30).

Временски ознаки на видеото

  • 00:00 Почеток
  • 1:48 Вовед во проектот
  • 3:40 Објаснето поврзување за дигитални коцки
  • 13:16 Објаснет Arduino код за дигитални коцки
  • 19:19 Избор на ESP32 плоча и COM порт во Arduino IDE
  • 21:00 Демонстрација на дигитални коцки
  • 22:15 Исправка на Arduino кодот

Слики

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
Јазик: 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);
}

Ресурси и референци

Датотеки📁

Нема достапни датотеки.