跳转至

arduino-cli 使用

esp32中,使用了arduino-cli来编译和上传代码。这里记录下arduino-cli操作arduino nano的方法和问题

编译

说也非常奇怪,Linux的java GUI版本arduino编译提示找不到头文件'SoftwareSerial.h', 这个库是arduino自带的。但是不使用GUI的编译按钮而用GUI的输出中的命令编译又正常。

这是从GUI的IDE的编译上传的输出日志,得到的编译上传命令, 手动执行却正常。

cd ~/Arduino
BUILD_PATH=$(mktemp -d)
arduino-builder -verbose -compile -hardware /usr/share/arduino/hardware -tools /usr/share/arduino/hardware/tools/avr -libraries /
./Arduino/libraries  -build-cache ./arduino_cache -build-path $BUILD_PATH  -fqbn=arduino:avr:uno  -prefs=build.warn_data_percentage=75 ./TestSerial/TestSerial.ino
avrdude -C/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:${BUILD_PATH}/TestSerial.ino.hex:i 

用arduino-cli编译也正常

arduino-cli compile --fqbn  arduino:avr:nano   TestSerial 

上传失败

但是用arduino-cli编译正常,上传失败,提示

arduino-cli upload --fqbn arduino:avr:uno --port /dev/ttyUSB0 TestSerial
avrdude: error at /etc/avrdude.conf:402: syntax error                                                                                                                                           
avrdude: error reading system wide configuration file "/etc/avrdude.conf"                                                                                                                       
Failed uploading: uploading error: exit status 1   

后来用verbos输出对比GUI版本的命令,发现两个命令用的avrdude不一样。 一个是/usr/bin/avrdude, 一个是$HOME/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude。两个的版本不一样, 而后者使用了前者的配置文件 /etc/avrdude.conf。所以出现syntax error

arduino-cli upload -v  --fqbn arduino:avr:uno --port /dev/ttyUSB0 TestSerial
"/home/jimery/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude" "-C/etc/avrdude.conf" -v -V -patmega328p -carduino "-P/dev/ttyUSB0" -b115200 -D "-Uflash:w:/home/jimery/.ca
che/arduino/sketches/57AA4FA906132DC236F48CCE34943FA0/TestSerial.ino.hex:i"                                                                                                                     

avrdude: Version 6.3-20190619                                                                                                                                                                   
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/                                                                                                                            
         Copyright (c) 2007-2014 Joerg Wunsch                                                   

         System wide configuration file is "/etc/avrdude.conf"                                                                                                                                  
avrdude: error at /etc/avrdude.conf:402: syntax error                                                                                                                                           
avrdude: error reading system wide configuration file "/etc/avrdude.conf"                                                                                                                       
Failed uploading: uploading error: exit status 1 

最后全部卸载了GUI包括avrdude, 再将$HOME目录的avrdude配置复制到/etc/avrdude.conf, 问题解决了。

Arch下使用arduino-cli给arduino nano烧代码

arch上的arduino ide 是2版本,基于electron的,但是没有找到适合arduino nano的驱动。 而1版本是基于java的在sway下,菜单都跑到屏幕外面了,没法用。还是回到了arduino-cli

安装配置

安装很简单,最新版就在github上下载编译好的二进制文件。或者用包管理器下载。 再生成配置文件 'arduino-cli config init',会生成文件 $HOME/.arduino15/arduino-cli.yaml,像之前提到的用esp32

为arduino nano创建项目

这里花了很多时间,因为虽然能查到nano的板,但安装不了arduino:avr的驱动,编译上传都不行

$ arduino-cli board listall avr | grep nano
Arduino Nano                     arduino:avr:nano

$ arduino-cli core install arduino:avr
Invalid argument passed: Platform 'arduino:avr' not found
$ arduino-cli core install arduino:avr::nano
Invalid argument passed: invalid item arduino:avr::nano

如果直接编译Sketch,则提示

$ arduino-cli compile MyFirstSketch
arduino-cli compile Couldn't determine program size

解决办法 使用'--profile'

在新建的Sketch目录创建文件sketch.yaml,输入下面的内容

profiles:
  nano:
    notes: testing the limit of the AVR platform, may be unstable
    fqbn: arduino:avr:nano
    platforms:
      - platform: arduino:avr (1.8.4)
    libraries:
      - VitconMQTT (1.0.1)
      - Arduino_ConnectionHandler (0.6.4)
      - TinyDHT sensor library (1.1.0)
    port: /dev/ttyUSB0
    port_config:
      baudrate: 115200

执行编译命令,指定nano的配置, 会自动下载各种工具avr-gcc avr-g++等

arduino-cli compile --profile nano MyFirstSketch      

上传

arduino-cli upload  --fqbn arduino:avr:nano --port /dev/ttyUSB0 MyFirstSketch

arduino-cli的参考

https://arduino.github.io/arduino-cli/1.2/sketch-project-file/

评论