陈拓2023/03/06-2023/03/11
Arduino cli是一个命令行界面,您可以使用它创建草图(sketch)并将其上传到开发板中。它提供了ArduinoIDE的所有功能:
编写sketch
上载sketch
库管理
开发板和核心管理
我们可以在命令行中使用所有这些功能,而无需使用Arduino IDE。
如果您熟悉Arduino IDE,那么迁移到Arduino cli不会有问题。即使这样,Arduino命令行界面中有一些重要的概念或关键字:
sketch草图:这是我们正在编写的应用程序的源代码
board开发板:它是我们正在使用的板,以及我们想要上传代码的位置。开发板由称为FQBN的唯一id标识。
code核心:它是开发板会使用的核心。可以有几个不同的开发板使用相同的内核。
library库:它是我们在草图中包含的一个软件,由其他人开发,负责管理特定任务:传感器库、LED库、协议库等
CPU
操作系统
https://arduino.github.io/arduino-cli/0.31/installation/
Arduino CLI是一个多功能解决方案,它提供了板/库管理器、sketch(草图,Arduino程序)生成器、板检测、上传器以及从命令行或机器界面使用任何Arduino兼容板和平台所需的许多其他工具。
除了作为一个独立的工具,ArduinoCLI是所有Arduino官方开发软件(Arduino IDE、Arduino Web编辑器)的核心。本文档的部分内容也适用于这些工具。
您有几个选项可以在系统上安装最新版本的Arduino CLI,请参阅安装页面:https://arduino.github.io/arduino-cli/0.31/installation/
有几个选项可用于安装ArduinoCLI。我使用安装脚本。
使用脚本安装
此脚本将最新版本的ArduinoCLI安装到$PWD/bin:
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
其他安装方法见:
https://arduino.github.io/arduino-cli/0.31/installation/
arduino cli是一个命令容器,每个命令都有自己的专用帮助文本,可以通过以下帮助命令显示:
cd bin
$ arduino-cli help core
命令前面还要加./,不方便。
添加环境变量
为了在任意位置使用arduino-cli命令,添加环境变量:
nano ~/.bashrc
将
export PATH=$HOME/bin:$PATH
添加到最后一行
刷新环境变量
source ~/.bashrc
查看环境变量
echo $PATH
这样arduino-cli help core前面就不用加./了:
Arduino Core(核心)操作。
用法: arduino-cli core [command]
实例: ./arduino-cli core update-index
可用命令:
download 下载一个或多个内核和相应的工具依赖项。
install 安装一个或多个内核和相应的工具依赖项。
list 显示已安装平台的列表。
search 在Boards Manager中搜索核心。
uninstall 如果不再使用,卸载一个或多个内核和相应的工具依赖项。
update-index 更新核心索引。
upgrade 将一个或所有已安装的平台升级到最新版本。
标志:
-h, --help 核心帮助
全局标志:
--additional-urls strings 为Boards Manager添加URL。
--config-file string 自定义配置文件(如果未指定,将使用默认值)。
--format string 输出格式可以是[text|json]。(默认为“文本”)
--log-file string 写入日志文件的路径。
--log-format string 日志的输出格式可以是[text|json]。
--log-level string 将记录此级别及以上的消息
-v, --verbose 在标准输出上打印日志。
有关命令的详细信息,请使用“arduinocli core[command]--help”。
创建配置文件arduino-cli.yaml
Arduino CLI并不严格要求有配置文件才能工作,因为命令行界面提供了任何可能的功能。但是,在发出命令时,有一个配置文件可以省去大量的输入,所以让我们继续创建它:
$ arduino-cli config init
如果您查看arduino-cli.yaml的内容,您将找到具有各自默认值的可用选项。有关更多信息,请参阅配置文档:
https://arduino.github.io/arduino-cli/0.31/configuration/
查看arduino-cli.yaml的内容
修改arduino-cli.yaml
为Boards Manager添加ESP32的URL。
https://dl.espressif.cn/dl/package_esp32_index.json
nano ~/.arduino15/arduino-cli.yaml
单双引号都可以。
或这样写:
URL:https://dl.espressif.cn/dl/package_esp32_index.json
只支持ESP32:
如果要支持ESP32-S2、ESP32-S3、ESP32-C3应使用下面的URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
对于这个URL,请看后面的操作。
更新index
新安装后要做的第一件事是通过运行以下命令更新可用平台和库的本地缓存:
arduino-cli core update-index
列出Arduino cli中的所有可用的开发板
在对草图进行编码之前,重要的是验证Arduino命令行界面应用程序是否支持我们将在Arduino项目中使用的板。为此,使用Arduino cli命令:
arduino-cli board listall
Board Name FQBN
AI Thinker ESP32-CAM esp32:esp32:esp32cam
ALKS ESP32 esp32:esp32:alksesp32
Adafruit ESP32 Feather esp32:esp32:featheresp32
BPI-BIT esp32:esp32:bpi-bit
D-duino-32 esp32:esp32:d-duino-32
DOIT ESP32 DEVKIT V1 esp32:esp32:esp32doit-devkit-v1
DOIT ESPduino32 esp32:esp32:esp32doit-espduino
Dongsen Tech Pocket 32 esp32:esp32:pocket_32
ESP32 Dev Module esp32:esp32:esp32
ESP32 FM DevKit esp32:esp32:fm-devkit
ESP32 Pico Kit esp32:esp32:pico32
ESP32 Wrover Module esp32:esp32:esp32wrover
ESP32vn IoT Uno esp32:esp32:esp32vn-iot-uno
ESPea32 esp32:esp32:espea32
ESPectro32 esp32:esp32:espectro32
ET-Board esp32:esp32:ET-Board
Electronic SweetPeas - ESP320 esp32:esp32:esp320
FireBeetle-ESP32 esp32:esp32:firebeetle32
Frog Board ESP32 esp32:esp32:frogboard
HONEYLemon esp32:esp32:honeylemon
Heltec WiFi Kit 32 esp32:esp32:heltec_wifi_kit_32
Heltec WiFi LoRa 32 esp32:esp32:heltec_wifi_lora_32
Heltec WiFi LoRa 32(V2) esp32:esp32:heltec_wifi_lora_32_V2
Heltec Wireless Stick esp32:esp32:heltec_wireless_stick
Heltec Wireless Stick Lite esp32:esp32:heltec_wireless_stick_lite
Hornbill ESP32 Dev esp32:esp32:hornbill32dev
Hornbill ESP32 Minima esp32:esp32:hornbill32minima
IMBRIOS LOGSENS_V1P1 esp32:esp32:imbrios-logsens-v1p1
INEX OpenKB esp32:esp32:OpenKB
IntoRobot Fig esp32:esp32:intorobot-fig
KITS ESP32 EDU esp32:esp32:kits-edu
LOLIN D32 esp32:esp32:d32
LOLIN D32 PRO esp32:esp32:d32_pro
Labplus mPython esp32:esp32:mPython
LoPy esp32:esp32:lopy
LoPy4 esp32:esp32:lopy4
M5Stack-ATOM esp32:esp32:m5stack-atom
M5Stack-Core-ESP32 esp32:esp32:m5stack-core-esp32
M5Stack-Core2 esp32:esp32:m5stack-core2
M5Stack-CoreInk esp32:esp32:m5stack-coreink
M5Stack-FIRE esp32:esp32:m5stack-fire
M5Stack-Timer-CAM esp32:esp32:m5stack-timer-cam
M5Stick-C esp32:esp32:m5stick-c
MGBOT IOTIK 32A esp32:esp32:mgbot-iotik32a
MGBOT IOTIK 32B esp32:esp32:mgbot-iotik32b
MH ET LIVE ESP32DevKIT esp32:esp32:mhetesp32devkit
MH ET LIVE ESP32MiniKit esp32:esp32:mhetesp32minikit
MagicBit esp32:esp32:magicbit
Metro ESP-32 esp32:esp32:metro_esp-32
Microduino-CoreESP32 esp32:esp32:CoreESP32
Nano32 esp32:esp32:nano32
Node32s esp32:esp32:node32s
NodeMCU-32S esp32:esp32:nodemcu-32s
Noduino Quantum esp32:esp32:quantum
ODROID ESP32 esp32:esp32:odroid_esp32
OLIMEX ESP32-DevKit-LiPo esp32:esp32:esp32-DevKitLipo
OLIMEX ESP32-EVB esp32:esp32:esp32-evb
OLIMEX ESP32-GATEWAY esp32:esp32:esp32-gateway
OLIMEX ESP32-PoE esp32:esp32:esp32-poe
OLIMEX ESP32-PoE-ISO esp32:esp32:esp32-poe-iso
OROCA EduBot esp32:esp32:oroca_edubot
Onehorse ESP32 Dev Module esp32:esp32:onehorse32dev
Piranha ESP-32 esp32:esp32:piranha_esp-32
ProtoCentral HealthyPi 4 esp32:esp32:healthypi4
Pycom GPy esp32:esp32:gpy
S.ODI Ultra v1 esp32:esp32:S_ODI_Ultra
Senses's WEIZEN esp32:esp32:sensesiot_weizen
Silicognition wESP32 esp32:esp32:wesp32
SparkFun ESP32 Thing esp32:esp32:esp32thing
SparkFun ESP32 Thing Plus esp32:esp32:esp32thing_plus
SparkFun LoRa Gateway 1-Channelesp32:esp32:sparkfun_lora_gateway_1-channel
T-Beam esp32:esp32:t-beam
TTGO LoRa32-OLED V1 esp32:esp32:ttgo-lora32-v1
TTGO LoRa32-OLED v2.1.6 esp32:esp32:ttgo-lora32-v21new
TTGO T-Watch esp32:esp32:twatch
TTGO T1 esp32:esp32:ttgo-t1
TTGO T7 V1.3 Mini32 esp32:esp32:ttgo-t7-v13-mini32
TTGO T7 V1.4 Mini32 esp32:esp32:ttgo-t7-v14-mini32
ThaiEasyElec's ESPino32 esp32:esp32:espino32
TinyPICO esp32:esp32:tinypico
Turta IoT Node esp32:esp32:turta_iot_node
VintLabs ESP32 Devkit esp32:esp32:vintlabs-devkit-v1
WEMOS D1 MINI ESP32 esp32:esp32:d1_mini32
WEMOS LOLIN32 esp32:esp32:lolin32
WEMOS LOLIN32 Lite esp32:esp32:lolin32-lite
WeMos WiFi&BluetoothBattery esp32:esp32:WeMosBat
WiFiduino32 esp32:esp32:wifiduino32
WiPy 3.0 esp32:esp32:wipy3
Widora AIR esp32:esp32:widora-air
XinaBox CW02 esp32:esp32:cw02
u-blox NINA-W10 series (ESP32) esp32:esp32:nina_w10
查看已安装的核心
arduino-cli core list
没有。
搜索可以安装的安装ESp32核心
arduino-cli core search esp32
安装ESP2核心
arduino-cli core install esp32:esp32
核心升级
arduino-cli core upgrade
已经是最新版本。
安装arduino:var核心(这个板子我没有,这里只是好奇测试一下,可以略过)
arduino-cli core install arduino:avr
再次查看已安装的核心
arduino-cli core list
卸载arduino:var核心(如果已安装)
arduino-cli core uninstall arduino:avr
已经安装的核心:
很好,现在我们已经准备好为ESP32编译并上传sketch了。
但是,这个配置版本太低,只支持ESP32,下面我们配置ESP32的高版本。
前面我们通过修改arduino-cli.yaml为Boards Manager添加了ESP32的URL。
也可以使用命令行标志更新index
通过命令行标志为Boards Manager添加高版本的ESP32 URL
Arduino CLI的命令行标志记录在命令行帮助和Arduino命令参考中。
https://arduino.github.io/arduino-cli/0.31/commands/arduino-cli/
使用--additionalurls命令行标志设置其他BoardsManager URL:
我们使用下面的URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
以支持ESP32-S2、ESP32-S3和ESP32-C3。
arduino-cli core update-index--additional-urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
相关内容详情见:
https://arduino.github.io/arduino-cli/0.31/configuration/
查看已安装的核心
arduino-cli core list
升级核心
arduino-cli core upgrade
如果失败,像这样
反复操作这个命令:
直至成功:
再查看已安装的核心
arduino-cli core list
我的ESP32开发板
使用USB-串口电缆将电路板连接到电脑后,您应该能够通过运行以下命令检查是否已识别:
查看ESP32开发板连接电脑的串口
ls -l /dev/ttyUSB*
修改串口权限
sudo chmod 777 /dev/ttyUSB0
检查Arduino是否已识别开发板
arduino-cli board list
如果您看到开发板的类型是未知(Unknown),只要您识别了平台核心并使用正确的FQBN字符串,上传仍应有效。
再执行arduino-cli board list
arduino-cli board list –format json
查看开发板的详细信息
arduino-cli board details -b esp32:esp32
要在当前目录中创建名为MyFirstSketch的新sketch,请运行以下命令:
arduino-cli sketch new MyFirstSketch
sketch是包含资源(如源文件和库)的文件夹;新命令将为您创建一个名为MyFirstSketch.ino的.ino文件,其中包含Arduino样板代码:
cat $HOME/bin/MyFirstSketch/MyFirstSketch.ino
此时,您可以使用您喜爱的文件编辑器或IDE打开文件,我用nano:
nano $HOME/bin/MyFirstSketch/MyFirstSketch.ino
如下更改代码:
#define LED_BUILTIN 2
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
Serial.println("helloworld");
delay(2000);
}
设置python3为默认python
whereis python
sudo ln -s /usr/bin/python3.8/usr/bin/python
编译
cd MyFirstSketch
arduino-cli compile -besp32:esp32:esp32 MyFirstSketch.ino
编译完成。
升级核心后编译:
修改串口权限:
sudo chmod 777 /dev/ttyUSB0
上传:
arduino-cli upload-p /dev/ttyUSB0 --fqbn esp32:esp32:esp32:UploadSpeed=115200 MyFirstSketch.ino
板载蓝色LED以每秒一次频率闪烁。
如果串口被其他进程占用
查看占用串口的进程:
ps -aux | grep ttyUSB*
杀掉进程:
fuser -k /dev/ttyUSB0
查看串口信息:
arduino-cli monitor -p /dev/ttyUSB0--describe
启用串口监视器:
arduino-cli monitor -p /dev/ttyUSB0 -c baudrate=115200
MacOS下使用Arduino命令行工具进行嵌入式开发——Arduino CLI使用教程
https://zhuanlan.zhihu.com/p/437784814
ESP32 with Arduino CLI
https://dev.to/stepanvrany/esp32-with-arduino-cli-36mh
树莓派上ESP32C3-arduino-cli配置方法
https://www.bilibili.com/video/BV14T411w714/
Arduino-cli: compile, uploadand manage libraries, cores, and boards
https://www.pcbway.com/blog/Activities/Arduino_cli__compile__upload_and_manage_libraries__cores__and_boards.html
With esp32 can't usebaud=115200 option #824
https://github.com/arduino/arduino-cli/issues/824
monitor does not apply serial port configuration change …
https://github.com/arduino/arduino-cli/issues/1562