ESP32_DAY5 来新建一个专案吧!

程序架构

昨天只有介绍到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


<<:  【Day5】情蒐阶段的小工具 ─ 线上免安装篇

>>:  【day5】二林&员林特色小吃

012-忘记打文章

连续发文快两个礼拜了,今天很悠闲了看了场电影、煮饭、洗衣服、健身还有整理家里之後,回过神来,已经快1...

第一章 之二 两个国外网域

Hostinger网域供应商跟Godaddy类似,除了提供Domain( Domain Name )...

铁人赛完赛整理&开源

第12 届iT邦帮忙铁人赛系列文章 (Day30) 终於走到这一天了,每次都觉得铁人赛过程都生不如死...

Day 2. 关於前端

刚开始写程序的初学者,本人强烈建议你一定要先学个基本的HTML、CSS、JS 为什麽? 因为比起写个...

[day-17] 认识Python的资料结构!(Part .4)

一、认识"set"(集合)   甚麽是set呢?简单来说set就像是一个大杂烩,...