• VScode+ArduinoCLI环境搭建



    环境:

    • 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"
    
    • 1
    • 2
    • 3
    • 4

    或者直接修改文件即可:

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

    字段解释: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"
    
    • 1

    更新下检索的网站

    类似apt,yum update

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

    arduino-cli core -v update-index
    
    • 1

    安装路径: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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 -
    
    • 1
    • 2
    • 3

    其实每次操作,都会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 -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    安装路径位于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
    
    • 1
    • 2
    • 3
    • 4

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

    > 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建项目

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

    编译

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    先看结果,–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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    而编译器是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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    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"
                ]
            }
        ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    插件

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

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

    但还是没有代码提示~

    参考资料:

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

  • 相关阅读:
    字节跳动后端技术四面真题
    [蓝桥杯 2022 省 B] 统计子矩阵
    大数据知识合集之预处理方法
    RTD2513驱动板ODM/OEM方式
    idea,web开发中jsp页面中不提示控制层的请求地址
    企业内部审核知识产权内部审核有哪些步骤?
    Mybatis 源码分析
    网络运维类面试非技术问题
    口述技术z
    postgresql 内核源码分析 clog机制流程 commit log文件格式,分离的原因,分组优化及leader更新机制
  • 原文地址:https://blog.csdn.net/Ga4ra/article/details/126903681