当前位置: 首页 > 工具软件 > arduino-cli > 使用案例 >

VScode+ArduinoCLI环境搭建

拓拔霄
2023-12-01


环境:

  • Win 10
  • Arduino IDE 2.0
  • VSCode 1.71.2

初始化配置文件(可选)

默认yaml配置:C:\Users\用户名\AppData\Local\Arduino15\arduino-cli.yaml

# 打印配置
arduino-cli.exe config dump
# 修改配置
arduino-cli.exe config set directories.data "D:\Program\Arduino\Arduino15"

或者直接修改文件即可:

directories:
  builtin:
    libraries: D:\Program\Arduino\Arduino15\libraries
  data: D:\Program\Arduino\Arduino15
  downloads: D:\Program\Arduino\Arduino15\staging
  user: e:\proooogram2\arduino  该目录下会有个libraries文件夹,存储下载的第三方库

字段解释:https://arduino.github.io/arduino-cli/0.19/configuration/

如果不改,后续命令必须带上–config-file,否则就用默认值。

想新建的话用config init命令生成默认yaml配置文件

https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_config_init/

arduino-cli config -v init --dest-dir "D:\Program\Arduino\ArduinoCliConfig"

更新下检索的网站

类似apt,yum update

https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_core_update-index/

arduino-cli core -v update-index

安装路径:arduino目录Arduino15文件夹

PS C:\Users\starr> tree C:\Users\starr\AppData\Local\Arduino15 /f
卷 Windows-SSD 的文件夹 PATH 列表
卷序列号为 0000009C 5219:C466
C:\USERS\STARR\APPDATA\LOCAL\ARDUINO15
│  inventory.yaml
│  library_index.json
│  library_index.json.sig
│  package_index.json
│  package_index.json.sig
│
├─packages
└─staging

https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_lib/

目前只安装了Servo电机操作库:

PS C:\Users\starr> arduino-cli.exe lib list
名     已安装     可用 位置                    说明
Servo 1.1.8   -  LIBRARY_LOCATION_USER -

其实每次操作,都会update-index。

下载U8g2库试试:

> arduino-cli.exe lib search U8g2
名:“U8g2”
  作者:oliver <olikraus@gmail.com>
  维护者:oliver <olikraus@gmail.com>
  ...
  网站:https://github.com/olikraus/u8g2
> arduino-cli.exe lib install U8g2
正在下载 U8g2@2.33.15...
U8g2@2.33.15 已下载
> arduino-cli.exe lib list
名     已安装      可用 位置                    说明
Servo 1.1.8    -  LIBRARY_LOCATION_USER -
U8g2  2.33.15  -  LIBRARY_LOCATION_USER -

安装路径位于E:\proooogram2\arduino\libraries,即配置文件directories.user下的libraries文件夹。

查看核心开发板

连接开发板,执行命令

https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_board_list/

> arduino-cli board -v list
...
端口    协议     类型                开发板名        FQBN            内核
COM13 serial Serial Port (USB) Arduino Uno arduino:avr:uno arduino:avr

下载内核(我已经安装过了)

> arduino-cli.exe core install arduino:avr
arduino:avr@1.8.5 平台已经安装
> arduino-cli.exe core list
ID          已安装   最新的   名
arduino:avr 1.8.5 1.8.5 Arduino AVR Boards

创建项目

> arduino-cli.exe sketch  new E:\proooogram2\arduino\arduino_cli_test
项目新建于:E:\proooogram2\arduino\arduino_cli_test

编译

https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_compile/

> arduino-cli.exe compile -v --build-path ./build -e -b arduino:avr:uno --output-dir ./ .\arduino_cli_test.ino
使用平台的 ‘uno’ 开发板,在列出的文件夹中:D:\Program\Arduino\Arduino15\packages\arduino\hardware\avr\1.8.5
使用平台的 ‘arduino’ 代码,在列出的文件夹中:D:\Program\Arduino\Arduino15\packages\arduino\hardware\avr\1.8.5
正在检测使用的库。。。
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp" -o nul
生成函数原型。。。
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp" -o "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"D:\\Program\\Arduino\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\preproc\\ctags_target_for_gcc_minus_e.cpp"
正在编译项目。。。
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" "-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp" -o "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp.o"
正在编译库。。。
正在编译内核。。。
无法深度缓存内核构建:Rel: can't make E:\proooogram2\arduino\arduino_cli_test\build relative to C:\Users\starr\AppData\Local\Temp\arduino-core-cache
正在运行正常的内核构建。。。
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\CDC.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\HardwareSerial.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\HardwareSerial2.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\HardwareSerial1.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\HardwareSerial0.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\PluggableUSB.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\HardwareSerial3.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\IPAddress.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\Print.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\Stream.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\WMath.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\WInterrupts.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\abi.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\USBCore.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\WString.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\hooks.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\Tone.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\new.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\main.cpp.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\wiring_pulse.S.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\wiring_analog.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\wiring_digital.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\wiring_pulse.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\wiring_shift.c.o
使用以前编译的文件:E:\proooogram2\arduino\arduino_cli_test\build\core\core.a
将所有内容链接在一起。。。
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "E:\\proooogram2\\arduino\\arduino_cli_test\\build/arduino_cli_test.ino.elf" "E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp.o" "E:\\proooogram2\\arduino\\arduino_cli_test\\build/core\\core.a" "-LE:\\proooogram2\\arduino\\arduino_cli_test\\build" -lm
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "E:\\proooogram2\\arduino\\arduino_cli_test\\build/arduino_cli_test.ino.elf" "E:\\proooogram2\\arduino\\arduino_cli_test\\build/arduino_cli_test.ino.eep"
"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex no_cli_test\\build/arduino_cli_test.ino.hex"

"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "E:\\proooogram2\\arduino\\arduino_cli_test\\build/arduino_cli_test.ino.elf"
 项目使用 444 字节(1%)的程序存储空间。最大值为 32256 字节。
 个全局变量使用 9 个字节(0%)的动态内存,剩下 2039 个字节用于局部变量。最大值为 2048 字节。


已使用的平台      版本    路径
arduino:avr 1.8.5 D:\Program\Arduino\Arduino15\packages\arduino\hardware\avr\1.8.5

先看结果,–output-dir输出的结果如下:

arduino_cli_test.ino.eep
arduino_cli_test.ino.elf
arduino_cli_test.ino.hex
arduino_cli_test.ino.with_bootloader.bin
arduino_cli_test.ino.with_bootloader.hex

而编译器是avr-g++

"D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" 
-c -g -Os -w -std=gnu++11 
-fpermissive 
-fno-exceptions 
-ffunction-sections 
-fdata-sections 
-fno-threadsafe-statics 
-Wno-error=narrowing 
-flto 
-w -x c++ -E 
-CC -mmcu=atmega328p 
# 宏定义
-DF_CPU=16000000L 
-DARDUINO=10607 
-DARDUINO_AVR_UNO 
-DARDUINO_ARCH_AVR 
# -I 两个包含路径
"-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" 
"-ID:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" 
"E:\\proooogram2\\arduino\\arduino_cli_test\\build\\sketch\\arduino_cli_test.ino.cpp" 
-o nul

vscode环境

c++

安装c/c++插件

ctrl+shift+p, c/c++ - edit configurations,创建c_cpp_properties.json

字段含义:

c_cpp_properties.json reference (visualstudio.com)

{
    "configurations": [
        {
            "name": "arduino",
            "includePath": [
                "${workspaceFolder}/**"
                , "D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\cores\\arduino" 
                , "D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.5\\variants\\standard" 
            ],
            "defines": [
                "ARDUINO=10607" 
                , "ARDUINO_AVR_UNO" 
                , "ARDUINO_ARCH_AVR" 
            ],
            "compilerPath": "D:\\Program\\Arduino\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

includePath字段也可以添加库目录。

tasks.json

Tasks in Visual Studio Code

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "arduino-cli",
            "args": [
                "compile",
                "-v",
                "--build-path",
                "./build",
                "-e",
                "-b",
                "arduino:avr:uno",
                "--output-dir",
                "./",
                "--build-path",
                "${fileDirname}/Build",
                "${fileDirname}/arduino_cli_test.ino"
            ]
        },
        {
            "label": "upload",
            "type": "shell",
            "command": "arduino-cli",
            "args": [
                "upload",
                "--port",
                "COM13",
                "-v",
                "-b",
                "arduino:avr:uno",
                "--input-dir",
                "${fileDirname}/Build"
            ]
        }
    ]
}

插件

官方插件就不需要了。我们需要解决语法飘红问题。

可以下载另一个arduino插件,作者moozzyk。

但还是没有代码提示~

参考资料:

https://zhuanlan.zhihu.com/p/365742961

 类似资料: