环境:
- 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
{
// 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