網頁

2022年8月10日 星期三

ESP32 使用 BlocklyDuino-程式設計入門實作

開發板介紹

Esp32-Max3010x-A 此塊開發板,左邊已插入  ESP32-S 晶片(NodeMCU-32s),右上可插入「0.96寸OLED顯示器模塊128x64 」 ,右下可插入 「MAX30102血氧濃度傳感器」。


左邊的按鍵 Reset (在板子上是寫 EN),讓ESP32重新開機來執行程式。
右邊的按鍵 Flash (在板子上是寫 IO0,有些會標示為BOOT),「工作模式」和「下載模式」切換鈕。要上傳時,先按此鍵直到出現上傳開始再放開,我的 ESP32 已經取消這個機制,上傳時不用先按IO0 鍵,一鍵下載。

下載  BlocklyDuinoF2 

請到 「吉哥的分享- 如何安裝吉哥自製積木 」此網站。
往下移,看到 程式下載處:https://reurl.cc/W4j6x9,檔案:BlocklyduinoF2.zip,按超連結下載。
檔案很大 (1.3GB)。
選已下載的檔案,按右鍵,解壓縮到 磁碟的根目錄( C:\ 、D:\或E:\ 等 ),不可放到其它非根目錄的地方。
我電腦有裝 WinRAR ,所以你的畫面可能跟我不一樣。
解壓縮後的結果如下,以我的例子來說, BlocklyDuinoF2此資料夾 是在 E:\ 下,而 BlocklyDuino.exe 是在 E:\BlocklyDuinoF2 。

更新檔的下載及安裝

當左下方出現黃色的文字 ,表示有更新的版本,可以下載更新。

在「吉哥的分享」網站中,有提及 更新檔的下載及安裝,找到更新檔的網址,如:
檔名內有 update,表示更新檔。檔名後面的日期,你看到的可能跟我不一樣,因為祇放最新的版本。
上面沒有update 的檔名,是原始檔,已經下載過了。



選此更新檔,按右鍵,選「下載」。
選已下載的更新檔,按右鍵,選 「7-Zip」(如果按右鍵,直接看到 7 -Zip 的「開啟壓縮檔」,此步驟可以省略,我有裝 WinRAR和 7-Zip,所以要另選 7-Zip )
記得不是選 「解壓縮檔案」,因為會在 目的資料夾下面,再建另一個新資料夾,沒有覆蓋舊的檔案。

請先退出  BlocklyDuino 程式,因為要覆蓋舊的程式。
按「複製」,按「...」,選要複製到那個資料夾,請確認複製到 BlocklyDuino安裝的資料夾,再按按下面的「確定」。

有出現「確認取代檔案」,選「全部皆是」。(如果沒有出現 「確認取代檔案」對話視窗,表示選錯資料夾 )

 重新執行 BlocklyDuino,左下方沒有出現黃色要更新的訊息。

原始版本,若沒有更新,在編譯某些功能會出現錯誤(如 吉哥積木/ESP32/類比寫入及音調,有Tone.h的錯誤) ,請記得要更新。

下載 CH340/CH341 USB to serial port Windows driver

Google 輸入 ch341 driver,找到下列的網站:

按「Driver&Tools」,往下移 ,看到 「CH341SER.ZIP」

按 「download」,下載 CH341SER.ZIP。

 將 「CH341SER.ZIP」解壓縮,執行「setup.exe」。

按「INSTALL」,安裝 驅動程式。
使用 USB 連接線,將 ESP 32接到電腦的USB埠,最好連接到 USB3.0,電力比較穩定。

滑鼠移到螢幕 左下方 Windows 視窗圖示,按右鍵,選「裝置管理員」。
按「連接埠(COM和LPT)」,看到 USB-SERIAL CH340(COM4)。
每個人所連到的 COM 編號不一樣,我的是 COM4。
在 BlocklyduinoF2 資料夾內 執行  BlocklyDuino.exe。

開啟 BlocklyDuino Editor ,本來是 Linkit 7697 ,請選擇 「ESP32 Dev Module」。 

連接埠,請選擇在「裝置管理員」所看到的COM,我的是「COM4」。
(一開始,我祇有出現 COM1,經過重新開機,才看到 COM4。)
點選左側「數位I/O」,選 「數位寫入 Pin 」。





放在初始化 (要先選 ESP32 )內,修改 Pin 為2。

如何將程式上傳至晶片

按 「下載」鈕。
按右下方的「下載」。
最後出現 Finish,表示上傳程式到 ESP32 成功。

執行結果

右邊藍燈會亮 (左邊的紅燈 表示有電源)。





插上外加的LED燈

LED燈:長腳接正,短腳接負。



NodeMCU-32s線路圖
腳位說明, 請參考 夜市小霸王:ESP32 Arduino開發環境架設(取代Arduino UNO及ESP8266首選)

GPIO(General Purpose Input Output),通用型輸入或輸出。
8 x Analog-to-Digital:可接類比或數位感測(粉紅色標示)
GPIO 34,35,36,39:Input only (僅當輸入)
GPIO 1,2,3,6,7,8,9,10,11:系統用,勿使用(灰色標示)
GPIO 18:重開機

將紅色led 接到ESP32 的PIN16 (右邊編號8)。
長腳 (紅色線)接到 S(Signal),短腳(褐色線)接到G(GND,Ground)。
使用什麼顏色的線,自己看得懂就好了。
( 不要1個接到 V (VCC) , 1個接到 G,這樣LED可能燒掉,會有怪味出現)
程式如下:

上傳程式後,紅色LED會亮起來。

題目

模擬紅綠燈,綠燈亮5秒,黃燈亮2秒,紅燈亮3秒,循環不止。

接法

綠色 led 接  PIN17,黃色 led 接PIN2,紅色 led 接 PIN16。
以 綠色 led 接  PIN17 為例:

3個led燈接完如下圖:

程式


說明:
每個block(積木)都有顏色,可按左邊的類別,看顏色是否一樣。

從時間,拿出「延遲毫秒 1000」block,再將 1000 改成想要的數值,如 3秒鐘,就寫 3000。

PIN 17 高電位,綠燈亮。
延遲毫秒 5000,即亮 5秒。
PIN 17 低電位,綠燈暗。

相似的block,可按右鍵,選「複製」,再修改。

延遲毫秒 此 block,從 「時間」類別拿出來的。

結果

綠燈亮5秒:

黃燈亮2秒:

紅燈亮3秒:

存檔:

選目的資料夾,按「確定」。

輸入檔名,不可為中文,按「OK」。


會建一個 以上述檔名 的資料夾,內有2個檔案。

threelight.ino 的內容:

/*
 * Generated using BlocklyDuino:
 *
 * https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
 *
 * Date: Wed, 10 Aug 2022 00:53:51 GMT
 */


void setup()
{

  pinMode(17, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(16, OUTPUT);
}

void loop()
{
  digitalWrite(17, HIGH);
  delay(5000);
  digitalWrite(17, LOW);
  digitalWrite(2, HIGH);
  delay(2000);
  digitalWrite(2, LOW);
  digitalWrite(16, HIGH);
  delay(3000);
  digitalWrite(16, LOW);
}

 跟在BlocklyDuinoF2 編輯畫面,切換到 ARDUINO 一樣的內容。
也可 按程式碼的右邊。









會看到ARDUINO的程式碼:



















threelight.xml 是Block 的描述內容。
跟在BlocklyDuinoF2 編輯畫面,切換到 XML  一樣的內容。





另存新檔:
開啟舊檔:
新建,重新建立1個新程式。

按 「Putty 序列埠監看視窗」鈕。(本程式沒用到,以後常利用此方法,偵錯各種感測器輸出的結果是否正確。)

按「開啟PUTTY」。

若要把感測的結果送到序列埠,利用「Putty 序列埠監看視窗」 可看輸出到序列埠的結果。

不要的Block,按 Del 鍵直接刪除,或者移到垃圾筒刪除。

暫存積木

選1個block(中文稱 積木),按右鍵,選「新增到暫存積木」。

選「暫存積木」,可從裏面選一個block,放在目前的程式專案中。
不同的檔案,要把 block 複製到另1個檔案內,可透過「暫存積木」來達成。 

可以 把暫存積木的某1 個block刪除,如下圖:

常用Block(積木)說明

字串,跟字串有關的block,如 「字串組合」、1個字串等。




「字串組合」原本祇有2個項目,按 「*」(小齒輪),可以增加或減少項目。再按一次「*」關掉小視窗。


數學,跟數學運算有關的block,如 1個數字、+-*/ (四則運算)等。

邏輯,取出 「如果 ...執行」、關係運算(大於、小於、等於)、邏輯運算(且、或)等。