[Day 09] tinyML开胃菜Arduino IDE上桌(下)

书接上回[Day 08] tinyML开胃菜Arduino IDE上桌(上)

单机版IDE

Arduino单机版IDE支援多种作业系统,包括Windows, Mac OS, Linux(32/64 bit),而使用树莓派的朋友则不用自己安装,因为它已预安装ARM(32 bit)版本於标准映像(Image)档中了,这里只介绍Windows安装程序,其它安装方式可参考Arduino官网

首先到官网下载Windows安装版本,建议使用最新稳定版本1.8.16版。下载时会询问是否要赞助(CONTRIBUTE & DOWNLOAD)及选择金额,这里可以先不赞助,点击只下载(JUST DOWNLOAD),arduino-1.8.16-windows.exe (113MByte)。完成下载後,双击执行档就能开始安装。原则上只需依预设值,一直按下一步,直到完成安装即可。(安装画面就省略了)

接着启动Arduino IDE,此时BLE Sense还无法连接,因为IDE还没有这个开发板的设定资料。如图Fig. 9-1所示,首先要点击主选单[工具]-[开发板]-[开发板管理员...],此时会看到一堆板子的清单,输入「nano 33 ble」,就会只剩两个选项,选择「Arduino Mbed OS Nano Boards」,再按左下角[Install]键安装,预设会安装最新版本。这个选项可支援Arduino Nano 33 IoT, BLE, BLE Sense及Arduino Nano RP2040 Connect四种板子,

安装完成後,取用一条Micro USB的缆线(注意不要拿到只能充电不能通讯的线)连接电脑和开发板,进入选单重新选择「开发板」,点击「Arduino Mbed OS Nano Boards」下的「Arduino Nano 33 BLE」即可完成设定。接着还要指定选单上的序列埠,如果USB埠上插了不只一块板子时,就要特别注意是否选对埠号。如果顺利连接,则在编辑视窗的右下角会出现「Arduino Nano 33 BLE on COMx」(x表示对应的埠号,可能每次都会不同)。若没有正常连接(显示),则建议先插掉USB插头,关闭Arduino IDE,再重新插回USB插头,用「装置管理员」检查「连接埠(COM和LPT)」是否已新增了一个「USB序列装置(COMx)」,若有则重新开启Arduino IDE即可顺利连接。

设定Arduino Nano 33 BLE Sense连接程序
Fig. 9-1 Arduino IDE设定Arduino Nano 33 BLE Sense连接程序。(OmniXRI整理制作, 2021/9/22)

Hello World, 闪烁吧 LED!

花了一点时间,终於把硬体连上,再来就要验证一下程序编辑、编译和上传到开发板MCU上是否正常。一般学习写程序时,不管使用那种语言,通常第一份程序就是列印(print)「Hellow World」到萤幕上,而MCU的起手式就是让LED闪烁(Blink),LED ON/OFF 交替闪烁,所以接下来就是这个范例来测试。

在测试开发板之前,首先要认识一下板子,如图Fig. 9-2所示,除了说明各接脚的用途和共用情况,另外也标示出各个感测器的位置及型号,其中板子上有自带一个橘黄色LED(P0.13)可作为练习,其它感测器的用法就留待後面章节再解说。

Arduino Nano 33 Ble Sense脚位定义及感测器位置图
Fig. 9-2 Arduino Nano 33 Ble Sense脚位定义及感测器位置图。(OmniXRI整理制作, 2021/9/22)

在Arduino中,如果是使用常见的模组,或者是开发板上专用模组,都会有现成的范例程序,只需点选主选单[档案]─[范例]下的[模组名称]就会自动产生一段C语言格式范例码,若为特定开发板,则还会有开发板上元件的范例,如Fig. 9-3所示。主程序主要分为两段,第一段setup()主要用於设定脚位用途及模组初始化,这段程序只会在电源启动及重置时执行一次。第二段loop()则为无穷循环程序,即为主程序,会依序反覆一直执行,直到电源消失。在LED闪烁范例中,就是点亮LED、等待1秒、熄灭LED、等待1秒,反覆循环就可令LED产生闪烁动作,可依需求自行调整延迟时间,改变闪烁速度。

完成程序後即可点击左上角「打勾」符号进行程序编译,如有问题会显示於下方黑色讯息栏区,若成功亦会显示目前程序码(Flash)及随机记忆体(SRAM)使用大小及占比(%),方便程序设计师了解资料使用情况。完成编译後就能上传(烧录)程序到MCU上,完成上传後会於讯息区显示上传大小及耗费时间。由於这里的MCU使用的是NOR型式的快闪记忆体(Flash),所以可以反覆烧写,依规格显示约可烧(写入)10万次,而读取则不限次数。

LED闪烁程序编辑、编译及上传操作
Fig. 9-3 LED闪烁程序编辑、编译及上传操作。(OmniXRI整理绘制, 2021/9/22)

/*
  Blink [LED闪烁范例程序]
  https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/

// 设定脚位用途及模组初始化(只在电源启动或重置时执行一次)
void setup() {
  pinMode(LED_BUILTIN, OUTPUT); // 初始化板上LED脚位(GPIO13, P0.13)为输出
}

// 设定无穷循环程序 (会一直依序重覆执行)
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // 点亮LED(高电位为点亮)
  delay(1000);                       // 等待1秒(1000ms)
  digitalWrite(LED_BUILTIN, LOW);    // 熄灭LED(低电位为熄灭)
  delay(1000);                       // 等待1秒(1000ms)
}

写到这里,终於完成了第一个MCU的程序,并运行在开发板上,算是离tinyML应用又更接近了一步,就让我们继续催落去(台语油门转下去)。

参考连结

Arduino Nano 33 BLE Sense
Getting started with the Arduino Nano 33 BLE Sense
Arduino 云端版 IDE
Arduino 单机版 IDE


<<:  Day10 跟着官方文件学习Laravel-Migration

>>:  [DAY 09]Discord Bot回覆带入图片方法

观察 Firefox Chrome 网页 DNS 查询哪些 Domain

观察 Firefox Chrome 网页 DNS 查询哪些 Domain Windows 有工具软件...

[28] 用 python 刷 Leetcode: 1013

原始题目 Given an array of integers arr, return true i...

那些被忽略但很好用的 Web API / Share

与你分享的快乐,胜过独自拥有 现代人看到有趣的网页、新闻、消息等等时,最常做的事情就是分享到社群帐...

Day28 小乌龟自动掘井挖隧道

介绍过 CC: Tweaked Turtle 的特性和指令後 今天来直接看看,怎麽让 Mining ...

DAY23: 自定义模块

在DAY21: NPM模块管理工具有提到Nodejs主要有内置模块(包含核心模块)、npm第三方模块...