Arduino CLI命令行ESP32开发环境搭建(Linux Ubuntu操作系统)
创始人
2024-06-02 07:13:40
0

陈拓2023/03/06-2023/03/11

  1. 简介

Arduino cli是一个命令行界面,您可以使用它创建草图(sketch)并将其上传到开发板中。它提供了ArduinoIDE的所有功能:

  • 编写sketch

  • 上载sketch

  • 库管理

  • 开发板和核心管理

我们可以在命令行中使用所有这些功能,而无需使用Arduino IDE。

  1. Arduino cli概念

如果您熟悉Arduino IDE,那么迁移到Arduino cli不会有问题。即使这样,Arduino命令行界面中有一些重要的概念或关键字:

  • sketch草图:这是我们正在编写的应用程序的源代码

  • board开发板:它是我们正在使用的板,以及我们想要上传代码的位置。开发板由称为FQBN的唯一id标识。

  • code核心:它是开发板会使用的核心。可以有几个不同的开发板使用相同的内核。

  • library库:它是我们在草图中包含的一个软件,由其他人开发,负责管理特定任务:传感器库、LED库、协议库等

  1. 我的环境

  • CPU

  • 操作系统

  1. Arduino CLI官方网站

https://arduino.github.io/arduino-cli/0.31/installation/

Arduino CLI是一个多功能解决方案,它提供了板/库管理器、sketch(草图,Arduino程序)生成器、板检测、上传器以及从命令行或机器界面使用任何Arduino兼容板和平台所需的许多其他工具。

除了作为一个独立的工具,ArduinoCLI是所有Arduino官方开发软件(Arduino IDE、Arduino Web编辑器)的核心。本文档的部分内容也适用于这些工具。

  1. 安装Arduino CLI

您有几个选项可以在系统上安装最新版本的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/

  1. 配置Arduino CLI

6.1 开始之前

arduino cli是一个命令容器,每个命令都有自己的专用帮助文本,可以通过以下帮助命令显示:

cd bin

$ arduino-cli help core

命令前面还要加./,不方便。

  • 添加环境变量

为了在任意位置使用arduino-cli命令,添加环境变量:

nano ~/.bashrc

export PATH=$HOME/bin/arduino-cli:$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”。

6.2 配置ESP32开发板

  • 创建配置文件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的高版本。

6.3 配置ESP32、ESP32-S2、ESP32-S3和ESP32-C3开发板

前面我们通过修改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

6.4 将开发板连接到电脑

  • 我的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

  1. 测试

7.1 创建新的sketch

要在当前目录中创建名为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);
}

7.2 编译

  • 设置python3为默认python

whereis python

sudo ln -s /usr/bin/python3.8/usr/bin/python

  • 编译

cd MyFirstSketch

arduino-cli compile -besp32:esp32:esp32 MyFirstSketch.ino

编译完成。

升级核心后编译:

7.3 上传到开发板

修改串口权限:

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

7.4 串口监视器

查看串口信息:

arduino-cli monitor -p /dev/ttyUSB0--describe

启用串口监视器:

arduino-cli monitor -p /dev/ttyUSB0 -c baudrate=115200

参考文档

  1. MacOS下使用Arduino命令行工具进行嵌入式开发——Arduino CLI使用教程
    https://zhuanlan.zhihu.com/p/437784814

  1. ESP32 with Arduino CLI
    https://dev.to/stepanvrany/esp32-with-arduino-cli-36mh

  1. 树莓派上ESP32C3-arduino-cli配置方法
    https://www.bilibili.com/video/BV14T411w714/

  1. 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

  1. With esp32 can't usebaud=115200 option #824
    https://github.com/arduino/arduino-cli/issues/824

  1. monitor does not apply serial port configuration change …
    https://github.com/arduino/arduino-cli/issues/1562

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...