搜尋程式碼

ESP32 教學 33/55 - 使用 SunFounder 嘅 ESP32 IoT 學習套件整數碼骰仔

ESP32 教學 33/55 - 使用 SunFounder 嘅 ESP32 IoT 學習套件整數碼骰仔

喺呢個教學入面,我哋會用SunFounder嘅IoT學習套件入面嘅七段顯示器同ESP32嚟整一個數碼骰仔。呢個項目會容許你撳一個掣嚟擲虛擬骰仔,生成1至6嘅數字。呢個係一個好好嘅方法去探索ESP32嘅能力,同時學習點樣同顯示器同掣互動。為咗更加清楚,記得睇吓條片(喺片入面0:00嘅位置)。

ESP32-33_digital-dice-main

硬件講解

呢個項目嘅主要組件包括ESP32微控制器、一個74HC595移位暫存器、一個七段顯示器同一個按鈕。ESP32係一個功能強大嘅微控制器,內置Wi-Fi同藍牙,好適合IoT應用。74HC595移位暫存器容許我哋用少啲引腳去控制七段顯示器,而唔使直接連接每一段。

七段顯示器用嚟顯示數字,係透過從移位暫存器發送數據嚟控制。按鈕用嚟觸發擲骰仔,生成一個隨機數字並顯示出嚟。當撳落去嘅時候,按鈕會連接到ESP32嘅第13引腳,呢個引腳有內部上拉電阻,令到冇撳嘅時候保持高電平狀態。

數據表詳情

製造商 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)以可靠運作。
  • 限制輸出電流以避免損壞移位暫存器。
  • 喺電源引腳附近使用去耦電容嚟穩定電壓。
  • 正確連接七段顯示器以避免數字顯示錯誤。
  • 檢查接線有冇鬆脫,以免導致意外行為。

接線指示

ESP32-33_digital-dice-wiring

要接線數碼骰仔,首先設定電源連接。將麵包板上嘅接地(藍色線)連接到ESP32嘅接地引腳,並確保所有接地點都互相連接。跟住,將ESP32嘅一個3.3V引腳連接到麵包板上嘅電源軌(紅色線)。

ESP32-33_digital-dice-schematic

對於74HC595移位暫存器,確保引腳1連接到3.3V電源軌,引腳8連接到接地。將數據輸出引腳(DS)連接到ESP32嘅第25引腳,移位時鐘引腳(SHCP)連接到第26引腳,儲存時鐘引腳(STCP)連接到第27引腳。按鈕應該連接喺ESP32嘅第13引腳同接地之間,令到撳落去嘅時候將引腳拉低。

代碼示例同講解

喺代碼入面,我哋首先定義用於移位暫存器同按鈕嘅引腳。按鈕引腳定義為buttonPin,並設定為ESP32嘅第13引腳。數據陣列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()函數入面,我哋將按鈕引腳設定為輸入模式,並將移位暫存器引腳設定為輸出模式。咁樣準備好引腳去讀取按鈕嘅輸入同發送數據去顯示器。


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()函數會將數據陣列入面嘅適當數值發送到移位暫存器,然後控制顯示器嘅段嚟顯示生成嘅數字。呢個函數對於撳掣時嘅視覺反饋好重要。

74HC595 LED Display: Seven-Segment Explained
74HC595 LED顯示器:七段講解

示範 / 預期效果

當設定完成同埋代碼上傳之後,撳掣就會生成一個1至6之間嘅隨機數字,並且會顯示喺七段顯示器上面。如果接線正確嘅話,每次撳掣都應該顯示一個數字。要小心浮動輸入;確保掣正確連接到地線,避免出現唔穩定嘅行為(喺影片1:30位置)。

影片時間標記

  • 00:00 開始
  • 1:48 項目介紹
  • 3:40 數碼骰仔接線講解
  • 13:16 數碼骰仔Arduino代碼講解
  • 19:19 喺Arduino IDE入面選擇ESP32板同COM埠
  • 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);
}

資源與參考資料

文件📁

冇文件可用。