close

我的ESP32實做書籍:https://youyouyou.pixnet.net/blog/post/121105860
博客來網址:https://www.books.com.tw/products/0010901195


數位寫入是最基礎的Arduino課程,用來指定某腳位輸出高電壓(HIGH=3.3V)或低電壓(LOW=0)。通常我們必須先告訴ESP32要使用那一個腳位,是用作輸入偵測,還是輸出以開啟某個裝置(例如LED),語法則是

  • pinMode(腳位,模式);//宣告腳位模式語法腳位是腳位編號,模式則有作為輸入INPUT或輸出OUTPUT,都是大寫
  • digitalWrite(腳位,電位);//數位寫入語法,腳位是腳位編號,電位則有HIGH或LOW都是大寫,也可以寫1或0

這裡要注意的是ESP32的腳位(如下圖,腳位解說可參閱本文:第一篇 ESP32 Arduino開發環境架設),除了灰色系統用之外,GPIO34-39僅能提供INPUT,另外有些腳位則是有特殊用途,因此筆者會先避開

  • TXRX:GPIO1、3
  • I2C:GPIO21、22
  • SPI:GPIO5、18、19、23

image
                                                      ▲ESP32編號腳位圖

一、ESP32+LED線路佈置

ESP32不像arduino把插孔預留在主板上,而是腳位向下,因此為了方便起見,多會將ESP32插入麵包板中(如下圖),方式是將ESP32的USB插孔朝下,麵包板的編號1朝下,數字多的朝上。

將ESP32腳位對準後,完整用力的壓入麵包板中,避免接觸不良。

image
                               ▲ESP32插入麵包板的方式與位置

再加上ESP32-S的腳位是寫在下方,一旦插入麵包板就無法看到腳位,為了方便起見,會指定所有學生插入相同的位置,參考下圖,不過這樣就會變成實際GPIO編號與麵包板序號不同,例如你可能會說將LED長腳插入GPIO4,學生可能會以為是右側4號,也就是GPIO15,這個很常發生。因此腳位圖,是非常好用的。

我們先準備一個LED,LED的口訣是「長正短負」,也就是長腳接正極,短腳接負極(在arduino中負極可視為GND=接地),這次我們要用GPIO15作為練習,因此我們將它長腳插入GPIO15(麵包板右側4號),短腳插入右側藍色線的位置,這裡預設是要作為GND,因此最後我們再拿一根公對公杜邦線將GND(麵包板右19)引入右側藍色線的位置,這樣整個右側藍色都是GND。

如此便算是設定好本次練習的線路,接下來就可來寫程式。

image
                        ▲ESP32 LED練習接線圖

二、程式撰寫

這次我們來練習LED最常見的範例叫做Blink,也就是閃耀,我們希望它亮一秒後,暗一秒,不斷的重複,
開啟Arduino IDE後,寫入以下程式,相關說明都註解在程式內。


void setup() {
//setup設定,只執行一次
pinMode(15, OUTPUT);//選告GPIO15作為輸出(綠色LED)
}

void loop() {
//loop迴圈,重複執行不停止
digitalWrite(15, HIGH);//將GPIO15綠色LED給予高電位(3.3V)
delay(1000);//休息一秒
digitalWrite(15, LOW);//將GPIO15綠色LED給予低電位(0)
delay(1000);//休息一秒
}


一樣的提醒您,當出現「......____......____」,要按下右側的BOOT按鈕,直至開始燒錄,即可放開(如果沒有放開,要在燒錄完畢後,按一下左側RESET重開機以開始工作)

GIF-200223_032505
         ▲綠色LED一秒閃耀練習

三、紅綠燈練習

第一個練習完成後,我們可以嘗試稍微複雜的紅綠燈練習,假設紅綠燈的規定是
「綠燈亮5秒、黃燈亮1秒、紅燈亮3秒」

此時我們須先將缺少的黃及紅LED插入麵包板,這裡建議使用黃色使用GPIO2(麵包板右5)、紅色使用GPIO4(麵包板右7),相同的,將長腳插入指定的GPIO,而短腳插入右側的藍色代表GNP的位置,此時佈線如下圖。

image
                       ▲ESP32 三色LED接線方式

程式上,我們必須多宣告黃、紅LED的pinMode,此外每次換燈號時,則必須先關掉原先燈號,再亮後面的燈號,例如綠燈轉黃燈時,要記得下指令關閉綠燈,再開啟黃燈。


void setup() {
  //setup設定,只執行一次
  pinMode(15, OUTPUT);//選告GPIO15作為輸出(綠色LED)
  pinMode(2, OUTPUT);//選告GPIO 2作為輸出(黃色LED)
  pinMode(4, OUTPUT);//選告GPIO 4作為輸出(紅色LED)
}

void loop() {
  //loop迴圈,重複執行不停止
  digitalWrite(15, HIGH);//開啟綠燈
  delay(5000);//休息5秒
  digitalWrite(15, LOW);//關閉綠燈
  digitalWrite(2, HIGH);//開啟黃燈
  delay(1000);//休息1秒
  digitalWrite(2, LOW);//關閉黃燈
  digitalWrite(4, HIGH);//開啟紅燈
  delay(3000);//休息1秒
  digitalWrite(4, LOW);//關閉紅燈
}


dxdc8-97j57

arrow
arrow

    夜市 小霸王 發表在 痞客邦 留言(0) 人氣()