ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Arduino CLI 完全指南:安装部署、核心命令与 gRPC 编程接口

Arduino CLI 完全指南:安装部署、核心命令与 gRPC 编程接口 开发工具嵌入式【免费下载链接】arduino-cliArduino command line tool项目地址https://gitcode.com/gh_mirrors/ar/arduino-cli点击查看免费下载Arduino CLI 是 Arduino 官方出品的命令行一体化工具集 Boards/Library 管理器、Sketch 构建器、板卡识别、程序上传等功能于一身让你能在命令行与机器接口中驱动任何 Arduino 兼容开发板。本文围绕其官方文档主线完整讲解安装方式、从建 Sketch 到烧录的完整工作流、第三方核心接入方法并结合仓库源码深入解析其 gRPC 服务接口与 Prometheus 监控能力读完即可独立完成从零到自动化开发的全流程。Arduino CLI 是什么根据官方文档 docs/index.md 的定义Arduino CLI 是一个 all-in-one一体化解决方案它提供Boards Manager / Library Manager管理开发板核心与库的安装、升级、卸载Sketch 构建器sketch builder将.ino源码预处理、编译为固件板卡检测board detection识别当前连接到 PC 的开发板上传器uploader将编译产物烧录到板卡以及其他众多在命令行或机器接口下使用 Arduino 兼容板与平台所需的工具。更关键的是它不仅是独立工具还是所有官方 Arduino 开发软件Arduino IDE、Arduino Web Editor的核心引擎——文档明确指出本文档中的大部分内容同样适用于这些上层工具。这意味着你学会的命令、配置与接口语义在 IDE 与 Web Editor 内部同样成立。从仓库结构看这一地位有清晰的代码支撑程序入口 main.go 组装了commands包对外提供 gRPC 服务的业务实现与 internal/cli命令行交互层命令层的每个动作最终都落到同一套服务实现上从而保证 CLI 与 gRPC 接口行为一致。安装 Arduino CLI官方安装文档 docs/installation.md 提供了多种安装途径可按环境任选其一。方式一HomebrewmacOS / Linux自版本0.5.0起Arduino CLI 已作为 Homebrew 官方 formula 提供brew update brew install arduino-cliHomebrew 安装包中已内置命令行补全文件安装后即可直接使用。方式二官方安装脚本仓库根目录提供了 install.sh 安装脚本它仅依赖shLinux 与 macOS 原生自带Windows 用户需要 Git Bash 环境。脚本默认将最新版安装到当前目录的bin/子目录curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh可通过环境变量BINDIR指定安装目录例如安装到~/local/bincurl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR~/local/bin sh如果希望在任何位置直接调用arduino-cli命令请将安装路径加入PATH环境变量。安装特定版本例如0.9.0或nightly-latest时将版本号作为参数传入curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh -s 0.9.0需要注意Arduino CLI 每 24 小时会检查一次新版本发布若不需要该行为可通过配置文件中的updater.enable_notification配置项或环境变量ARDUINO_UPDATER_ENABLE_NOTIFICATIONfalse关闭详见 docs/configuration.md。方式三下载预编译二进制官方为所有主流平台提供预编译二进制包包括 Linux32/64 位、Linux ARM32/64 位、Linux ARMv6、Windowsexe 与 msi 安装包以及 macOSIntel 与 Apple Silicon。下载后解压将arduino-cli可执行文件放入PATH中的任意目录即可使用。此外还有每日构建nightly builds每天 01:00 GMT 从master分支自动生成仅用于体验最新功能不应在生产环境使用官方还同步提供校验和文件用于验证完整性。方式四从源码构建如果你熟悉 Go 语言或希望参与贡献可以直接用 Go 工具链在本地构建具体步骤参见 docs/CONTRIBUTING.md 中的构建指引。快速上手从零创建并烧录第一个程序本节完整还原官方 docs/getting-started.md 的实战流程并补充命令细节。1. 熟悉命令体系arduino-cli是命令的容器每个子命令都有专属帮助文本$ arduino-cli help core Arduino core operations. Usage: arduino-cli core [command] Examples: arduino-cli core update-index Available Commands: download Downloads one or more cores and corresponding tool dependencies. install Installs one or more cores and corresponding tool dependencies. list Shows the list of installed platforms. search Search for a core in Boards Manager. uninstall Uninstalls one or more cores and corresponding tool dependencies if no longer used. update-index Updates the index of cores. upgrade Upgrades one or all installed platforms to the latest version. Flags: -h, --help help for core Global Flags: --additional-urls strings Comma-separated list of additional URLs for the Boards Manager. --config-file string The custom config file (if not specified the default will be used). --json Print the output in JSON format. --log Print the logs on the standard output. --log-file string Path to the file where logs will be written. --log-format string The output format for the logs, can be: text, json --log-level string Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic --no-color Disable colored output.全局选项--json、--log-level、--no-color等对所有子命令通用是脚本化集成的关键。2. 生成配置文件CLI 不强制要求配置文件但创建一份能省去大量重复输入。执行$ arduino-cli config init Config file written: /home/luca/.arduino15/arduino-cli.yaml生成的arduino-cli.yaml中列出了所有可用配置项及默认值完整参数说明见 docs/configuration.md。3. 创建新 Sketch在任意目录创建名为MyFirstSketch的 Sketch$ arduino-cli sketch new MyFirstSketch Sketch created in: /home/luca/MyFirstSketchSketch 本质是一个文件夹包含源码与资源。new命令会生成带 Arduino 样板代码的MyFirstSketch.ino$ cat $HOME/MyFirstSketch/MyFirstSketch.ino void setup() { } void loop() { }将其修改为经典的点亮板载 LED 程序void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); }4. 连接板卡并识别新环境第一步是更新本地平台与库索引缓存$ arduino-cli core update-index Updating index: package_index.json downloaded用 USB 线连接开发板后检查板卡是否被识别$ arduino-cli board list Port Type Board Name FQBN Core /dev/ttyACM1 Serial Port (USB) Arduino/Genuino MKR1000 arduino:samd:mkr1000 arduino:samd输出中的arduino:samd就是该板卡对应的平台核心core。如果显示为Unknown板卡只要确定平台核心并使用正确的 FQBN 字符串上传依然可以工作。板卡未被识别时可用board listall加关键字检索所有支持板卡及其 FQBN$ arduino-cli board listall mkr Board Name FQBN Arduino MKR FOX 1200 arduino:samd:mkrfox1200 Arduino MKR GSM 1400 arduino:samd:mkrgsm1400 Arduino MKR WAN 1300 arduino:samd:mkrwan1300 Arduino MKR WiFi 1010 arduino:samd:mkrwifi1010 Arduino MKRZERO arduino:samd:mkrzero Arduino/Genuino MKR1000 arduino:samd:mkr10005. 安装平台核心安装arduino:samd核心会同步下载工具链依赖如 arm-none-eabi-gcc、bossac、openocd、CMSIS 等$ arduino-cli core install arduino:samd Downloading tools... arduino:arm-none-eabi-gcc4.8.3-2014q1 downloaded arduino:bossac1.7.0 downloaded arduino:openocd0.9.0-arduino6-static downloaded arduino:CMSIS4.5.0 downloaded arduino:CMSIS-Atmel1.1.0 downloaded arduino:arduinoOTA1.2.0 downloaded Downloading cores... arduino:samd1.6.19 downloaded Installing tools... Installing platforms... Results: arduino:samd1.6.19 - Installed arduino:arm-none-eabi-gcc4.8.3-2014q1 - Installed arduino:bossac1.7.0 - Installed arduino:openocd0.9.0-arduino6-static - Installed arduino:CMSIS4.5.0 - Installed arduino:CMSIS-Atmel1.1.0 - Installed arduino:arduinoOTA1.2.0 - Installed验证安装结果$ arduino-cli core list ID Installed Latest Name arduino:samd 1.6.19 1.6.19 Arduino SAMD Boards (32-bits ARM Cortex-M0)6. 编译与上传编译时通过--fqbn指定目标板卡$ arduino-cli compile --fqbn arduino:samd:mkr1000 MyFirstSketch Sketch uses 9600 bytes (3%) of program storage space. Maximum is 262144 bytes.上传时用-p指定串口对应board list显示的端口$ arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:samd:mkr1000 MyFirstSketch No new serial port detected. Atmel SMART device 0x10010005 found Device : ATSAMD21G18A ... Erase flash done in 0.784 seconds Write 9856 bytes to flash (154 pages) [] 100% (154/154 pages) done in 0.069 seconds Verify 9856 bytes of flash with checksum. Verify successful done in 0.009 seconds CPU reset.编译与上传的内部实现可分别在 internal/arduino/builderSketch 预处理与编译流水线与 commands/service_upload.go 中找到对应实现。7. 安装库需要为 Sketch 增加功能时先用lib search检索 Arduino 生态中的库例如搜索按键去抖相关的debouncer关键字会返回Debouncer、FTDebouncer、SoftTimer等候选库及其作者、类别、架构支持与版本列表。然后安装选中的库$ arduino-cli lib install FTDebouncer FTDebouncer depends on FTDebouncer1.3.0 Downloading FTDebouncer1.3.0... FTDebouncer1.3.0 downloaded Installing FTDebouncer1.3.0... Installed FTDebouncer1.3.0库的安装、依赖解析与索引管理实现位于 internal/arduino/libraries/librariesmanager 与 internal/arduino/libraries/librariesindex。接入第三方核心扩展 Boards Manager如果你的开发板需要第三方核心包如 ESP8266可在配置文件的board_manager段中列出额外的包索引 URLboard_manager: additional_urls: - https://arduino.esp8266.com/stable/package_esp8266com_index.json本地已有的包索引文件也可通过file://协议加入例如 NRF52832 核心board_manager: additional_urls: - https://arduino.esp8266.com/stable/package_esp8266com_index.json - file:///absolute/path/to/your/package_nrf52832_index.json配置后支持自定义核心的命令会自动使用这些附加 URL$ arduino-cli core update-index Updating index: package_index.json downloaded Updating index: package_esp8266com_index.json downloaded Updating index: package_nrf52832_index.json Updating index: package_index.json downloaded $ arduino-cli core search esp8266 ID Version Name esp8266:esp8266 2.5.2 esp8266也可以不写配置文件每次命令通过--additional-urls全局选项临时指定URL 与file://路径均可$ arduino-cli core update-index --additional-urls https://arduino.esp8266.com/stable/package_esp8266com_index.json $ arduino-cli core search esp8266 --additional-urls file:///absolute/path/to/your/package_esp8266com_index.json通过 gRPC 接口编程驱动 Arduino CLIArduino CLI 可通过daemon命令以 gRPC 服务器模式运行将全部能力暴露为可编程服务。仓库中的 rpc/internal/client_example 目录提供了一份完整的示例客户端Go 语言实现入口为 main.go演示了与 gRPC 服务交互的完整工作流。启动 daemon 与建立连接示例客户端通过grpc.NewClient(localhost:50051, ...)连接默认端口50051的 gRPC 服务对应 main.go服务端由arduino-cli daemon启动。为避免污染现有安装示例将数据目录cores、libraries 等指向临时目录并通过SettingsSetValue动态配置三个关键路径main.gocallSetValue(client, directories.data, dataDir) callSetValue(client, directories.downloads, path.Join(dataDir, staging)) callSetValue(client, directories.user, path.Join(dataDir, sketchbook))SettingsSetValue与SettingsGetValue对应命令行config set/get可对任意配置键读写值以 JSON 编码传入ConfigurationSave则将全部配置以指定格式如 JSON导出main.go。实例生命周期Create → InitgRPC 接口的核心抽象是Instance实例在调用任何业务方法前必须先创建并初始化实例main.goinstance : createInstance(client) // client.Create() initInstance(client, instance) // client.Init()流式返回下载/任务进度Init是一个服务端流接口客户端通过stream.Recv()持续读取DownloadProgress索引下载进度与TaskProgress任务进度直到收到io.EOF。索引更新后不会被隐式感知必须再次显式Init才能让新索引生效——示例在每次UpdateIndex后都重复了这一步骤。平台Core管理示例依次演示了平台管理的完整闭环main.goPlatformSearch(samd)搜索平台PlatformInstall(arduino, samd, 1.6.19)按包名 架构 版本精确安装PlatformUpgrade(arduino, samd)升级到最新版PlatformUninstall(arduino, samd)卸载。这些方法对应命令行的core search / install / upgrade / uninstall其服务端实现在 commands 目录的service_platform_*.go系列文件中。所有流式方法都遵循同一消费模式循环Recv()io.EOF表示完成中途通过Progress/TaskProgress上报进度。板卡查询与编译上传示例还演示了板卡相关操作main.goBoardDetails(arduino:samd:mkr1000)查询板卡详情名称、工具依赖、配置选项BoardSearch()全量列出板卡BoardListAll(mkr)带关键字过滤的板卡列表BoardList()列出已连接板卡BoardListWatch()订阅板卡插拔事件服务端流示例持续监听 10 秒。编译通过Compile方法发起请求中携带Instance、Fqbn与SketchPath响应流中的OutStream/ErrStream分别对应编译器标准输出与错误输出main.go。上传则调用Upload请求中除 FQBN 与 Sketch 路径外还需Port地址如/dev/ttyACM0、协议serialmain.go。示例中上传与调试Debug基于 GDB 的交互式调试会话默认被注释连接真实板卡后可取消注释运行。库管理示例后半部分演示了完整的库生命周期main.goUpdateLibrariesIndex更新库索引LibraryDownload(WiFi1010.15.2)/LibraryInstall下载与安装指定版本LibraryInstall支持NoDeps标志跳过依赖安装LibraryUpgradeAll升级全部库LibrarySearch(audio)关键字搜索LibraryResolveDependencies(ArduinoIoTCloud)列出依赖及所需版本、已安装版本LibraryList/LibraryUninstall列出与卸载。gRPC 服务定义与实现所有 gRPC 服务的消息与接口定义集中在 rpc/cc/arduino/cli含.proto定义与生成的 Go 代码业务实现位于 commands 目录的service_*.go文件如service_compile.go、service_upload.go、service_library_install.go命令行子命令internal/cli与 gRPC 服务最终共享同一套业务逻辑。这一架构使得你可以用任意支持 gRPC 的语言不限于 Go构建自己的 IDE、CI 流水线或物联网设备管理平台。用 Prometheus 指标监控 daemon 服务除日志外daemon模式默认启用并暴露一个 Prometheus 指标端点默认地址http://localhost:9090/metrics可直接抓取服务活动数据例如# TYPE daemon_compile counter daemon_compile{buildProperties,exportFile,fqbnarduino:samd:mkr1000,installationIDed6f1f22-1fbe-4b1f-84be-84d035b6369c,jobs0,libraries,preprocessfalse,quietfalse,showPropertiesfalse,sketchPath5ff767c6fa5a91230f5cb4e267c889aa61489ab2c4f70f35f921f934c1462cb6,successtrue,verbosetrue,vidPid,warnings} 1 1580385724726 # TYPE daemon_board_list counter daemon_board_list{installationIDed6f1f22-1fbe-4b1f-84be-84d035b6369c,successtrue} 1 1580385724833可见每个 RPC 方法都有独立的计数器指标如daemon_compile、daemon_board_list并携带方法级标签FQBN、Sketch 路径哈希、成功状态、installationID 等。指标设置通过配置文件的metrics段控制metrics: enabled: true addr: :9090作为官方生态的引擎与 IDE / Web Editor 的关系再次强调 index 文档中的定位Arduino CLI 是所有官方 Arduino 开发软件Arduino IDE、Arduino Web Editor的心脏。上层工具共享其核心能力——如果你打算开发自己的 IDE、CI 集成或云端编译平台rpc/internal/client_example 中的示例客户端是绝佳的起点若要深入了解命令行为与配置项可继续阅读 docs/getting-started.md、docs/configuration.md 以及 docs/FAQ.mdgRPC 服务消息与字段的完整定义可直接查阅 rpc/cc/arduino/cli 中的.proto文件官方所有文档页面均由 docs 目录统一维护。赞分享开发工具嵌入式【免费下载链接】arduino-cliArduino command line tool项目地址https://gitcode.com/gh_mirrors/ar/arduino-cli点击查看免费下载相关推荐WinUtil终极指南一键搞定Windows系统优化与软件管理的免费专业工具WinUtil终极指南一键搞定Windows系统优化与软件管理的免费专业工具 想要快速优化Windows系统、批量安装软件、修复常见问题吗WinUtil就是桌面应用运维5 分钟把机器学习模型装进容器Cog CLI 从构建到部署实战指南5 分钟把机器学习模型装进容器Cog CLI 从构建到部署实战指南 Cog 是 Replicate 开源的机器学习容器化工具口号是 ContainersMLOps容器模型推理服务开发工具SVG-Morpheus创意应用7个惊艳案例展示图标变形艺术SVG Morpheus创意应用7个惊艳案例展示图标变形艺术 SVG Morpheus是一款创新的JavaScript库专为SVG图标变形动画设计完美实现前端上一篇Fleet 基于 mock APNs 的 Apple MDM 负载测试1 小时运行指标深度解读下一篇Bash-it update 与 migrate 命令完全指南升级、迁移与自动维护创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表