有没有办法使用Arduino CLI将sketch.ino编译为.bin文件?

有没有办法使用Arduino CLI将sketch.ino编译为.bin文件?,arduino,command-line-interface,arduino-uno,arduino-esp8266,ota,Arduino,Command Line Interface,Arduino Uno,Arduino Esp8266,Ota,我想通过OTA使用Arduino CLI或任何其他解决方案,但不使用Arudino IDE,在我的Wemos D1 mini上上传草图,因为我需要使流程自行运行。(1.从web获取代码/2.将其保存到sketch.ino文件/3.使用脚本将其编译为.bin文件,4.使用espota.py上传) 我可以通过ITA上传一个带有espota.py命令的草图,但是我需要一个已经编译好的.bin文件,这是我使用Arduino IDE得到的,所以这不是我想要的 命令: ~/Sketch>python esp

我想通过OTA使用Arduino CLI或任何其他解决方案,但不使用Arudino IDE,在我的Wemos D1 mini上上传草图,因为我需要使流程自行运行。(1.从web获取代码/2.将其保存到sketch.ino文件/3.使用脚本将其编译为.bin文件,4.使用espota.py上传)

我可以通过ITA上传一个带有espota.py命令的草图,但是我需要一个已经编译好的.bin文件,这是我使用Arduino IDE得到的,所以这不是我想要的

命令: ~/Sketch>python espota.py-d-i ip\u esp8266-f Sketch.bin

ip⁊esp8266例如=192.168.1.101
sketch.bin=从Arduino IDE->sketch->Export compiled Binary生成的文件

搜索AVRDUDE,AVRDUDE可以通过命令行有效地使用。

我使用无头raspberry pi作为我的程序员,因为我的笔记本电脑相当锁定。我不熟悉
espota.py
,但是下面的过程完全可以从命令行编译和上传.ino代码。这款手机功能齐全,我使用Adafruit的Huzzah(使用FTDI线缆)和Wemos D1 Mini(直接USB)成功实现了这一点

首先要做的是添加esp8266板。我不太清楚我是如何做到这一点的,但您可以通过
config dump
命令查看哪些附加板可用:

pi@dogwood:~/sketchbook $ arduino-cli config dump
proxy_type: auto
sketchbook_path: /home/pi/Arduino
arduino_data: /home/pi/.arduino15
因此,我打开
/home/pi/.arduino15/
目录,其中有一个
arduino cli.yaml
文件。在这里,我添加了ESP8266包,使
arduino cli.yaml
如下所示:

pi@dogwood:~/sketchbook $ cat /home/pi/.arduino15/arduino-cli.yaml 
proxy_type: auto
sketchbook_path: /home/pi/Arduino
arduino_data: /home/pi/.arduino15
board_manager:
  additional_urls:
  - http://arduino.esp8266.com/stable/package_esp8266com_index.json
(我对此争论了几次,所以这可能不是100%,但是
config dump
应该反映它使用的数据目录,并且应该有一个带有附加URL的.yaml文件)

在未插入D1的情况下,运行此命令以查看列出的端口:

arduino-cli board list
然后插入D1,输出应如下所示:

Port         Type              Board Name FQBN Core
/dev/ttyAMA0 Serial Port       Unknown             
/dev/ttyUSB0 Serial Port (USB) Unknown  
对于Huzzah和D1,我都不知道板名,但它们都是ESP8266板。
board listall
命令将显示编译和上载所需的所有板及其FQBN:



pi@dogwood:~/sketchbook $ arduino-cli board listall
Board Name                        FQBN                            
4D Systems gen4 IoD Range         esp8266:esp8266:gen4iod         
Adafruit Circuit Playground       arduino:avr:circuitplay32u4cat  
Adafruit Feather HUZZAH ESP8266   esp8266:esp8266:huzzah  

....snip.....

LOLIN(WEMOS) D1 R2 & mini         esp8266:esp8266:d1_mini         
LOLIN(WEMOS) D1 mini Lite         esp8266:esp8266:d1_mini_lite    
LOLIN(WEMOS) D1 mini Pro          esp8266:esp8266:d1_mini_pro    
WeMos D1 R1                       esp8266:esp8266:d1       
从那里,我复制FQBN。 然后(或之前),我创建了一个新草图:

pi@dogwood:~/sketchbook $ arduino-cli sketch new MyFirstSketch
Sketch created in: /home/pi/sketchbook/MyFirstSketch
然后编辑.ino文件和complile:

pi@dogwood:~/sketchbook $ vim ./MyFirstSketch/MyFirstSketch.ino 
pi@dogwood:~/sketchbook $ 
pi@dogwood:~/sketchbook $ SKETCH=MyFirstSketch
pi@dogwood:~/sketchbook $ arduino-cli compile --fqbn esp8266:esp8266:d1_mini $SKETCH
Sketch uses 257680 bytes (24%) of program storage space. Maximum is 1044464 bytes.
Global variables use 26572 bytes (32%) of dynamic memory, leaving 55348 bytes for local variables. Maximum is 81920 bytes.
pi@dogwood:~/sketchbook $ 

然后上传:

pi@dogwood:~/sketchbook $ arduino-cli upload -p /dev/ttyUSB0 --fqbn esp8266:esp8266:d1_mini $SKETCH
No new serial port detected.
esptool.py v2.6
2.6
esptool.py v2.6
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP8266EX
Features: WiFi
MAC: ec:fa:bc:61:0e:31
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 261840 bytes to 191242...
Wrote 261840 bytes (191242 compressed) at 0x00000000 in 7.4 seconds (effective 282.8 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
上传后我不得不重置Huzzah,但D1 mini在上传后表现良好,并正确运行了我的代码

要获得串行监视器,请使用类似以下内容的
屏幕

screen /dev/ttyUSB0 115200

从当前版本开始,您可以执行以下操作以获取输出文件:

arduino-cli compile --fqbn arduino:avr:uno my_arduino_program.ino --output-dir ./
所有二进制文件和工件文件都将位于当前目录中

但是,手册页面显示,我们应该能够传递
-o
并获得二进制输出。但它不适用于我当前下载的主分支
ArduinoCLI