iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

一個營建系學生的韌體之路-ESP32篇系列 第 5

ESP32_DAY5 來新建一個專案吧!

  • 分享至 

  • xImage
  •  

程式架構

昨天只有介紹到Arduino的程式架構可以分為兩大函式: setup()loop()

//#include ...
//#define ...
// 全域變數或自定義函式

void setup() {
  // ...
}

void loop() {
  // ...
}
  • setup()函式:負責初始化相關參數及功能,這函式只會在最一開始的時候被執行一次。
  • loop()函式:放在這裏頭的動作會一直被反覆執行,如同C++的無窮迴圈,會接續著setup()後被反覆執行直到重新燒錄或拔除開發板電源。

在這兩個函式的外頭,可以依照自身需求來引用函式庫、定義變數或宣告全域變數、自定義函式...如同C++的使用方式。而兩個函式內可以都不放任何設定或動作,但是一定要存在,並且固定先setup()loop()!

舉個栗子例子
今天我有A、B兩位工人。設定階段(setup())時,先指定好A負責掃地、B負責拖地,迴圈階段(loop()),讓A先開始動作,接著換B,他倆就會無限的掃地再拖地,直到下一次指派工作。
https://ithelp.ithome.com.tw/upload/images/20210920/20140433oVnhh6d6M6.png

動作 掃地()
動作 拖地()
工人 A、B
void setup() {
  A負責掃地
  B負責拖地
}

void loop() {
  A開始掃地
  A掃完地
  B開始拖地
  B拖完地
}

而Blink範例程式中的pinMode(LED_BUILTIN, OUTPUT)簡單來說,是設定開發板上那顆LED的模式為輸出,接下來我們就能用digitalWrite(LED_BUILTIN, HIGH/LOW)控制開關燈,delay(1000)則是用來控制延遲時間,單位是毫秒,所以LED燈以亮1秒、暗1秒的模式無限循環,如果沒設delay會因為切換太快而看不出目前狀態!

接下來我們來試試看自己新建一個專案~

新建專案(Arduino IDE)

如果是Arduino IDE的話可以直接點選「新增」按鈕,接下來就可以直接寫程式了。
https://ithelp.ithome.com.tw/upload/images/20210920/20140433bFW4D9i1n5.png

新建專案(VS Code)

如果是VS Code的話,步驟會稍微多一點,但熟練了就不覺得麻煩了

Step1

先在你自己電腦熟悉的位置新建一個資料夾,資料夾名稱為專案的名字,請避免使用中文,後續還會使用到這個名稱。
我個人是習慣把專案放在ESP32的資料夾中,取名會專案的內容有關,例如:my_blink。
新建完資料夾後,以VS Code開啟!
https://ithelp.ithome.com.tw/upload/images/20210920/201404334Qy2MpXkB9.png
https://ithelp.ithome.com.tw/upload/images/20210920/20140433PgkuCJNMg1.png

Step2

在已開啟的VS Code視窗中,接下來以「F1」來使用「Arduino: Initialize」命令,此命令的用意是要先初始化VS Code的Arduino程式開發環境,這時你需要建立.ino檔,檔名要跟資料夾名稱一致,這是Arduino專案的要求!
https://ithelp.ithome.com.tw/upload/images/20210920/20140433bsbvOOa6XQ.png
https://ithelp.ithome.com.tw/upload/images/20210920/20140433AUJbYM9yxu.png

Step3

「Enter」後會進入下一個步驟是選擇開發板,這時候你只需要找到並選擇你手上的開發板就好!
https://ithelp.ithome.com.tw/upload/images/20210920/20140433CDPM1rOilB.png
如果你在這個步驟時選錯開發板也沒關係,你可以點選左下角的選項來重新選擇,在往右邊也可以找到選擇序列埠的選項,兩者之間的插頭符號則是開啟序列監控視窗!
https://ithelp.ithome.com.tw/upload/images/20210920/20140433PTRQDOO7f0.jpg

初始化完後,你會發現你原本的專案資料夾中,新增了一個.ino與一個.vscode資料夾,.vscode資料夾裏頭則放了arduino.json與c_cpp_properties.json,前者是用於開發板與arduino間的設定,後者則是編譯器設定。
https://ithelp.ithome.com.tw/upload/images/20210920/20140433MHstJkcbgz.png
前幾天說的VS Code 1.59版本會遇到「選擇序列埠」按鈕失靈的問題,可以透過手動修改arduino.json,新增一個參數port就能解決啦!

{
    "sketch": "test.ino",
    "configuration": "FlashFreq=80,UploadSpeed=921600",
    "board": "esp32:esp32:nodemcu-32s",
    "port":"COM3"
}

只要以上這些動作都做好了,也寫完你的專案程式後,就可以上傳燒錄你的專案囉~
你可以試試看上傳下面這個程式,並與昨天的範例程式相比一下有沒有不同?

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(200);
  digitalWrite(LED_BUILTIN, LOW);
  delay(200);
}

眼尖的能應該能光看程式碼就知道吧?

Step4

接下來這部分是你可以不做,但做了會更好的步驟。如果你有仔細看VS Code下方的狀態列,會發現你在上傳或驗證程式時,有個[Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README.的警告,這代表你沒有設定編譯檔的暫存目錄,所以每次按下編譯和上傳時,所有相關函式庫都要重新編譯,這會造成大量時間的浪費,要解決這個問題只需要在arduino.json中設定一個「編譯檔暫存目錄」即可。

"output": "../build"

https://ithelp.ithome.com.tw/upload/images/20210920/20140433ATB0MjBEbg.png

By the way

當你會使用到Arduino或Espressif提供的函式庫時,可能會遇到VS Code幫你偵測到#include錯誤,這是因為c_cpp_properties.json中的includePath還沒有抓到你需要的函式庫,這時只需要先上傳一次,c_cpp_properties.json就會自動更新囉!
https://ithelp.ithome.com.tw/upload/images/20210920/20140433eMjTjHM5u4.png
上傳完後,擾人的紅蟲蟲就消失啦!
https://ithelp.ithome.com.tw/upload/images/20210920/201404337EZxpuDgW5.png

五日總結

鐵人賽已完成1/6!
目前先教大家怎麼安裝環境和新建專案,雖然知識含量並不高,但是只要一個小步驟沒有做好,就會讓之後的主題沒辦法好好練習呢... (困擾(搔頭
那明天開始就要正式進入暑訓的上課環節了,會先花個兩天分別介紹Arduino及ESP32,接下來的第一個主題是常見的小配備-麵包板跟電阻的介紹!讓大家先熟悉一下這兩樣基本配備之後,才要開始教數位、類比、串列傳輸...循序漸進的主題,有講錯的部分就請大家狠狠的鞭策我吧XD


上一篇
ESP32_DAY4 用VS Code開範例程式
下一篇
ESP32_DAY6 介紹Arduino
系列文
一個營建系學生的韌體之路-ESP32篇12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言