使用 Arduino CLI + vscode + WSL2 配置 Arduino 开发环境

news/2025/3/25 20:18:38/文章来源:https://www.cnblogs.com/T6uE13s/p/18788587

背景

最近我正在准备一个智能车比赛,需要利用 Arduino 开发板实现核心的功能。网上通常的 Arduino 开发环境是 Arduino IDE,
这确实是一个完美的方案。不过这将意味着我在开发 Arduino 时不能使用我最爱的 vscode,我不能接受。(bushi)
于是,我不禁思考,能否将 Arduino 与 vscode 结合起来?正好 Arduino 官方也提供了一个命令行工具,它就是我们的主角:Arduino CLI。

以下是我在 wsl2 里配置相关环境的大概步骤。

安装 Arduino CLI

官网的教程里提供了很多种安装方法,比如直接用包管理器安装:

brew update
brew install arduino-cli

不过我没有装 Homebrew,而且 apt 找不到 arduino-cli,这个方法只能作罢。

另一种办法是使用安装脚本,比如当运行以下脚本时,Arduino CLI 就会被安装到 $PWD/bin 文件夹下:

curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh

我在主目录下运行了脚本,它就安装到了 ~/bin 下。github 的访问不太稳定时,可以考虑代理/镜像。
安装完成后,记得把安装目录添加到环境变量,最简单的方法是在 .bashrc 下添加一行:

export PATH=$PATH:<directory>

<directory>里就是 Arduino CLI 安装到的目录。最后别忘了 source ~/.bashrc 以使更改生效。

当在终端输入

arduino-cli

时,输出了一大堆使用说明,证明我们的安装就完成了。
这时我的主目录里还会出现了一个 .arduino15 文件夹。

创建第一个项目

这里还是参考了官网的教程。

在创建第一个项目前,我们需要先创建一个配置文件(虽然这不是必需的,但是后面会使用到它):

arduino config init

这会在主目录的 .arduino15 文件下生成一个 arduino-cli.yaml 的配置文件,不过约等于空。

想要在当前目录下新建一个项目,只需要 new 一下:

arduino-cli sketch new MyFirstSketch

这会在当前目录下从创建一个 MyFirstSktech 文件夹,里面有一个 MyFirstSketch.ino 文件,
这里面就可以写我们的代码了,先写一个经典点灯:

#include "Arduino.h"void setup() {pinMode(LED_BUILTIN, OUTPUT);
}void loop() {digitalWrite(LED_BUILTIN, HIGH);delay(1000);digitalWrite(LED_BUILTIN, LOW);delay(1000);
}

接下来,就是把这个的项目编译并烧录到开发板上就可以了。不过,当我们把 Arduino 开发板插到电脑上时,
WSL2 并不会自动连接这个设备,这时可以看微软的相关教程:连接 USB 设备 | Microsoft Learn。

在连接成功后,输入

arduino-cli board list

应该就可以看到开发板了。

在编译之前,按照官方教程,我们还要安装对应于开发板的平台核心(platform core)。比如对于 Arduino UNO R3 开发板,其核心为 arduino:avr

arduino-cli core install arduino:avr

安装完成后,就可以编译了:

arduino-cli compile --fqbn arduino:avr:uno MyFirstSketch

这里的 --fqbn 对应于开发板的 FQBN。对于 Arduino UNO R3,其 FQBN 为 arduino:avr:uno

编译成功后,就可以烧录到开发板上了:

arduino-cli upload -p /dev/ttyUSB0 --fqbn arduino:avr:uno MyFirstSketch

不过当我们真的运行以上命令时,可能会出现 /dev/ttyUSB0 无法访问的情况。大概率是权限不够,可以考虑采用如下方法:

  1. 检查设备权限:ls -l /dev/ttyUSB0 可能会有一个 dialout 或其他的东西,其为设备所属为用户组。
  2. 把当前用户添加到用户组中:sudo usermod -a -G dialout $USER
  3. 注销并重新登录以使更改生效

临时用的话还可以考虑更直接的;

sudo chmod 666 /dev/ttyUSB0

之后应该就可以成功烧录了。

之后在 vscode 里就可以愉快地写代码了,不过如何启动自动补全?

自动补全

本来我想找一个 Arduino 拓展帮我实现的,我看网上大多数教程也是这么办的。

但是我寻遍拓展商店,找不到微软官方对 Arduino 的拓展(很奇怪,网上的教程里说可以找到),
又不想用第三方开发者的拓展。没办法,只能寄希望于已有的 clangd。

clangd 需要一个 compile_commands.json 文件,这时,先前的 arduino-cli.yaml 就派上用场了,
可以在其中添加如下条目:

build:compile_commands: true

然后在编译时添加 --build-path 选项:

arduino-cli compile --fqbn arduino:avr:uno --build-path MyFirstSketch/build MyFirstSketch

这样一来,项目文件夹下会出现一个 build 文件夹,其中就有我们希望的 compile_commands.json 文件。之后再打开 .ino 文件,就可以看到自动补全等功能可以正常使用了。

如果要经常编译烧录的话,不妨写一个脚本自动化运行,还是挺方便的。

以上只是一个折腾记录,如果嫌繁琐建议直接上 Arduino IDE,它才是 Arduino 开发的正解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904446.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20244202 《Python程序设计》实验一报告

20244202 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 陈艺豪 学号:20244219 实验教师:王志强 实验日期:2025年3月23日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试技能; (3).编写程序,练习变量和类…

USTCPC 2025 游记

队名 合肥一中能不能多请点OI教练,二人队。队长 @包涵宇 ,省队爷。 Day -inf~0 随机写了几道有意思的 cf 。 bhy 又在做黑的插头 dp 。膜拜。 Day 1 早上被父母逼着学习文化课,结果作业做不完直接半红温状态,, 加上昨天做了 ~8h 文化课作业只完成了 1/2 ,然后直接不做了…

AI运维助手-LinuxAgent

介绍 LinuxAgent是基于LLM大模型的智能运维助手,通过接入DeepSeek API实现对Linux终端的自然语言控制,可以实现高效的运维工作。目前已经更新到2.0.5版本。 LinuxAgent能够理解用户的自然语言指令,只要描述需求,系统自动解析意图并执行,支持中文、英语等,可以理解复杂的多…

微服务Elasticsearch

Elasticsearch中倒排索引 为什么查询效率高 比如说一个商品 在一百万条数据中 你如果要搜的话 他会从一百万条数据中去寻找 比如说你要搜小米手机 但是倒排索引是这样的 //倒排 { "小米": [1], "手机": [1,2,3,4], } 他在给定的文档范围内去搜索 比如说正…

20242825 2024-2025-2 《网络攻防实践》第四周作业

@目录一. 实验内容1.1 实验内容概述1.2 实验相关知识概述二. 实验过程2.1 ARP缓存欺骗攻击2.1.1 实验环境配置2.1.2 连通性测试2.1.3 继续实验实验亮点出现问题检查问题解决问题2.2 ICMP重定向攻击2.2.1 实验环境配置2.2.2 连通性测试发现问题检查问题解决问题2.2.3 继续实验…

论文解读-Advances in 3D Generation: A Survey

论文介绍 题目: Advances in 3D Generation: A Survey 发表年份是 2024年,综述性质的文章,是看到腾讯发布了混元3D大模型所以来看看这个论文主要贡献 论文主要根据当前研究领域内不同的3D资产的生成方法进行了一个分类,将3D生成算法分为:前馈生成,基于优化的生成,基于过…

大数据技术

Hadoop Hadoop是一个能够对大量数据进行分布式处理的软件框架 HDFS ​ HDFS(Hadoop Distributed File System,Hadoop的分布式文件管理系统),是Hadoop的两大核心之一,用于管理数据和文件 Hadoop安装 ​ Hadoop可以在Window系统上运行,但其官方支持的操作系统只有Liunx,所以…

User\main.c(7): error: #5: cannot open source input file ds18b02.h: No such file or directory

报错截图解决途径 复制报错信息上网搜索,一般的解决办法:在c/c++选项中的Include Paths中包含头文件,将移植过来的代码放到指定的文件夹里,在Floder Setup中设置新移植的文件路径。很可惜我确认过我包含了头文件,但仍然报同样错误。 最后发现我代码里面是 #include"d…

Bean注入几种方式 (放入Spring容器)

目录 1、XML方式注入set方式注入构造方法注入2、注解方式注入@Component + @ComponentScan@Configuration + @Bean + @ComponentScan@Import3、实现ImportBeanDefinitionRegistrar接口 4、实现FactoryBean 5、实现BeanDefinitionRegistryPostProcessor 一、XML方式注入 在现在这…

自然资源数据要素支撑场景建设

自然资源数据要素与场景建设是推动经济社会高质量发展的重要途径。随着数字经济的快速发展,自然资源数据已成为关键的生产要素,其价值挖掘和利用成为推动经济社会发展的关键。自然资源数据要素的重要性自然资源数据要素包括地理、土地、矿产、海洋等多源数据,是支撑经济社会…

C语言分支与循环基础应用编程

实验任务1#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5int main() {int number;int i;srand(time(0));for(i=0;i<N;++i){number=rand()%100+1;printf("20490042%04d\n",number);}return 0; }问题1:生成一个1~100的随机…