arduino - 有没有办法使用 Arduino CLI 将 sketch.ino 编译为 .bin 文件?
问题描述
我想在我的 Wemos D1 mini 上上传一个草图,通过 OTA 使用 Arduino CLI 或任何其他解决方案,但不使用 Arudino IDE,因为我需要让进程自行运行。(1. 从 web 获取代码 / 2. 将其保存到 sketch.ino 文件 / 3. 使用脚本将其编译为 .bin 文件,4. 使用 espota.py 上传)
我可以通过 ITA 上传带有 espota.py 命令的草图,但我需要有一个已经编译的 .bin 文件,我使用 Arduino IDE 获得,所以这不是我想要的。
CMD:~/Sketch> python espota.py -d -i ip_esp8266 -f sketch.bin
ip_esp8266 eg = 192.168.1.101 sketch.bin = 从 Arduino IDE -> Sketch -> 导出编译后的二进制文件生成的文件
解决方案
我正在使用无头树莓派作为我的程序员,因为我的笔记本电脑相当锁定。我对 .ino 不熟悉espota.py
,但下面的这个过程完全可以从命令行编译和上传 .ino 代码。它的arduino-cli
功能非常齐全,我在 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 文件并编译:
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
这样的东西:
screen /dev/ttyUSB0 115200
推荐阅读
- python - Huey 任务队列仅在上次重试时处理错误并检索异常回溯
- javascript - 在 1 行代码中以 Javascript 显示实时日期 + 时间
- sql - SQL - 隐藏重复值 - sql 脚本
- c# - 如何使用实体框架错误获取记录列表 - 模型项传递到字典中,但此字典需要模型项
- laravel - 从控制器向 vue.js 发送错误并删除方括号
- python - 在 python 中实现 curl --resolve 标志
- excel - 在多个选择中复制多个范围
- jquery - 检测 jQuery 滚动的每个像素
- sql-server - 在 MSSQL 和 Entity Framework Core 中仅向表中添加新行的最有效方法
- php - Android - 如何将文件名添加到调用 PHP 文件的上传文件函数