Arduino IDE可粗略分成前端(程式編輯器)和後端(程式編譯和上傳工具)兩大部分,在前端方面,1.x版傾向用於編寫單一程式檔案(.ino檔),操作介面對初學者很友善,不像一些程式開發工具畫面充斥各種窗格以及繁多的工具鈕和選單,它就像Arduino Uno開發板,沒有多餘的元件,不會把初學者嚇跑。
但是對有經驗的程式設計師來說,Arduino IDE的程式編輯器功能實在太陽春,也缺乏程式碼除錯功能,因此有些人改用其他程式編輯器來開發Arduino程式碼,像Eclipse, Sublime Text, VS Code, … 等等。
Arduino官網的”Arduino CLI: An introduction“貼文提到,最初用Java語言開發的Arduino IDE,歷經十多年的修訂、新增功能,以及新開發的Web版編輯器,開始出現一些功能重疊或者贅餘的程式碼,而且開發工具本身的原始碼也變得不易維護。
為此,Arduino官方拆分並重新打造IDE的「前端」和「後端」元件,前端的重點功能包括:
- 引入現代程式編輯器的功能,例如:程式碼提示。
- 建立全新的框架,讓新進的程式開發人員更容易替IDE開發新功能。
- 整合Arduino Cloud雲端服務:方便儲存、分享Arduino專案並與多人協同開發。
- 可支援多種程式語言:例如,未來可能加入支援MicroPython。
「後端」的主要功能是編譯和上傳程式碼,由另一個稱為Arduino CLI(代表Command Line Interface,也就是文字命令介面)工具程式負責。這個CLI已經整合到Arduino IDE 2.0以及Web版開發工具,其他軟體廠商或程式設計師也可以把這個CLI整併到其他程式編輯器中,就不用像以前使用VS Code開發Arduino,還得先安裝Arduino IDE。
Arduino CLI具備安裝工具鏈(程式編譯器)、安裝程式庫、編譯、上傳、除錯、序列通訊等功能,可單獨安裝運作,有Windows, Mac和Linux版,可在開源專案的這個頁面下載。
事先聲明:本文只是示範Arduino CLI的基本操作,一般使用Arduino IDE開發程式,並不需要額外安裝Arduino CLI,也不用透過文字命令操作。編譯和上傳程式碼,僅需按下工具列的按鈕。
單獨安裝Arduino CLI之後,以Windows版為例,安裝之後,開啟「命令提示字元」或「終端機」,輸入arduino-cli命令,將能看到如下的使用簡介:
Arduino 命令行界面 (arduino-cli)
用法:
arduino-cli [command]
示例:
arduino-cli <命令> [参数…]
可用命令:
board Arduino 开发板命令
burn-bootloader 上传引导加载程序。
cache Arduino 缓存命令。
compile 编译 Arduino 项目
completion 已生成脚本
config Arduino 配置命令。
core Arduino 内核操作。
daemon 在端口上作为守护进程运行:50051
debug 调试 Arduino 项目
help Help about any command
lib Arduino 关于库的命令。
monitor 开启开发板的通信端口。
outdated 列出可以升级的内核和库
sketch Arduino CLI 项目命令
update 更新内核和库的索引
upgrade 升级已安装的内核和库。
upload 上传 Arduino 项目。
version 显示 Arduino CLI 的版本号。
参数:
–additional-urls strings 以逗号分隔的开发板管理器附加地址列表。
–config-file string 自定义配置文件(如果未指定,将使用默认值)。
–format string 日志的输出格式,可以是:text, json, jsonmini, yaml (default “text”)
-h, –help help for arduino-cli
–log-file string 写入日志的文件的路径。
–log-format string 日志的输出格式,可以是:text, json
–log-level string 记录此级别及以上的消息。有效级别为 trace, debug, info, warn, error, fatal, panic
–no-color Disable colored output.
-v, –verbose 在标准输出上打印日志。
使用Arduino CLI編譯並上傳程式
底下示範採用Arduino CLI編譯、上傳Arduino Uno開發板程式的步驟。首先執行update命令更新開發板和相關程式套件:
arduino-cli update
列舉已經安裝的核心元件(開發板編譯工具;工具鏈),如果你的電腦有安裝Arduino IDE,這個命令將會取得你曾經安裝過的控制板開發工具(如:ESP32);Arduino Uno採用的ATmega328處理器屬於AVR系列晶片。
arduino-cli core list
你可以透過開發板的名稱搜尋已安裝的核心元件,執行這個指令時,它發現並安裝了CLI欠缺的工具,例如serial-monitor(序列監視器):
arduino-cli core search uno
假設你的電腦沒有安裝ESP32的工具鏈,可以執行底下的命令安裝:
arduino-cli core install esp32:esp32
請先把開發板(此例為Arduino Uno)接上電腦USB埠,然後執行底下命令,列舉已連接的開發板,其中的FQBN是“fully-qualified board name”的縮寫,代表「完全合格的開發板名稱」,也就是此開發板的唯一識別名稱。
arduino-cli board list
建立新程式專案的命令是new,底下命令將在你的使用者家目錄中新建一個“blink”目錄,並存入空白的blink.ino程式檔。
arduino-cli sketch new blink
Arduino CLI命令行工具不包含程式編輯器,你可以用任何文字編輯器開啟剛剛建立的blink.ino,然後編寫程式碼。例如,用「記事本」編輯blink.ino,輸入控制LED閃爍的程式碼:
接著執行compile命令編譯blink專案,透過–fqbn參數指定開發板類型,此例為Arduino Uno板,所以「完全合格的開發板名稱」是arduino:avr:uno。
arduino-cli compile --fqbn arduino:avr:uno blink
最後執行upload命令上傳編譯完成的程式檔,透過–port參數指定開發板連接的序列埠號。
arduino-cli upload --port COM7 --fqbn arduino:avr:uno blink
上傳完畢,Uno板子上的LED就會開始閃爍。
感觉这样的Arduino开发工具越来越变得像PlatformIO,可惜错过了风口,不过一些细节调度确实不如PlatformIO好用,比如单独记录库版本,这样陈年老程式也可以跑得起来。
嗯,Arduino仍是很有活力的潮流引领者 🙂