搜尋程式碼

ESP32 教學 7/55 - 使用陣列配合 ESP32 Arduino 程式設計 - SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 7/55 - 使用陣列配合 ESP32 Arduino 程式設計 - SunFounder 嘅 ESP32 IoT 學習套件

喺呢個教學入面,我哋會探討點樣喺ESP32 Arduino程式設計入面使用陣列。陣列容許你將多個數值儲存喺單一變數入面,令到管理數據更加容易,特別係處理一啲相似項目嘅集合嘅時候。呢個教學會引導你定義、存取同修改陣列,以及利用迴圈去有效噉同佢哋互動。理解呢啲概念會大大提升你使用ESP32寫程式嘅能力。

我哋會特別涵蓋使用唔同類型嘅迴圈,例如forwhiledo while,去遍歷陣列元素。呢個會幫你自動化任務,令到你嘅程式更加有效率。想睇到呢啲概念嘅實際應用,記得睇吓2:30嘅影片,入面有實際示範。

硬件講解

喺呢個教學入面,我哋主要用到嘅硬件組件係ESP32微控制器。ESP32係一個功能強大、低成本嘅微控制器,具備Wi-Fi同藍牙功能,令到佢適合好多物聯網應用。呢塊板可以執行同Arduino Uno相似嘅任務,同時提供額外功能,例如雲端連接。

喺呢個特定教學入面,我哋會利用一個陣列去透過數碼引腳控制輸出。每個引腳可以設定為高或低,等我哋可以根據陣列入面儲存嘅數據去創造各種圖案或者行為。ESP32嘅GPIO引腳會被配置為輸出,等我哋可以操控連接嘅裝置或者組件。

接線指示

ESP32-07_74HC595_walking_light_wiring

要為呢個教學接好你嘅ESP32,首先連接數碼引腳。將STcp引腳(27)連接到你嘅移位暫存器嘅ST_CP引腳。SHcp引腳(26)應該連接到移位暫存器嘅SH_CP引腳。最後,將DS引腳(25)連接到移位暫存器嘅DS引腳。確保ESP32嘅接地連接到移位暫存器嘅接地,以提供一個共同參考點。

確保用穩定嘅3.3 V電源供電畀ESP32。如果你用緊額外組件,確保佢哋都兼容ESP32嘅電壓水平。喺開機之前,好重要去再三檢查你嘅連接,以避免任何潛在損壞(喺4:10嘅影片入面)。

程式碼示例同講解

喺提供嘅程式碼片段入面,我哋定義一個叫做datArray嘅陣列,佢儲存二進制數值。陣列入面每個數值對應一個可以透過GPIO引腳輸出嘅唔同圖案。陣列定義如下:

int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};

呢個陣列包含二進制表示,每個位元對應一個引腳狀態(開或關)。喺loop()函數入面,我哋用一個for迴圈去遍歷陣列,輸出呢啲圖案:

for(int num = 0; num < 10; num++) {
    digitalWrite(STcp, LOW); 
    shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
    digitalWrite(STcp, HIGH); 
    delay(1000);
}

喺呢個迴圈入面,我哋持續將datArray嘅數據發送到移位暫存器,創造一個走馬燈效果。delay(1000)喺每個圖案之間引入暫停,令到變化可以睇得到。想睇完整程式碼,請參考下面,因為佢會動態載入。

示範/預期效果

完成接線同上載程式碼之後,你應該會喺連接嘅裝置上面睇到一個走馬燈效果。陣列入面每個位元會順序點亮,創造一個視覺上吸引嘅圖案。要小心接線反轉,因為佢哋可能導致意料之外嘅行為(喺8:15嘅影片入面)。

影片時間戳

  • 00:00 開始
  • 1:24 介紹
  • 3:15 74HC595移位暫存器晶片
  • 5:25 走馬燈接線
  • 18:56 74HC595嘅Arduino程式碼講解
  • 24:24 項目示範
  • 25:49 修正程式碼
  • 28:11 燈光來回移動
  • 30:28 走馬燈

圖片

ESP32-07_74HC595_walking_light_wiring
ESP32-07_74HC595_walking_light_wiring
ESP32-07_74HC595_walking_light_schematic
ESP32-07_74HC595_walking_light_schematic
807-ESP32 Tutorial 7/55 - Walking Light using 74HC595 and learn array
語言: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 

int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}

資源與參考資料

文件📁

冇文件可用。