tan's blog

使用 ESP8266 无线烧写单片机

莫名其妙接手了一个比赛项目,做一条循迹机器鱼🤔,然后因为鱼得下水嘛,得用胶封起来,然后烧板子又得把胶抠开,老学长表示很难受,可是你们为什么不把烧写线接出来?? 不如搞个无线烧写,听起来很霸气。

于是上网一顿搜索,在 github 上发现一个用 ESP-12F 烧写 STM32 的项目,克隆下来试了试,还不错呢,于是自己也对代码瞎改了一番,增加了 ESP8266 自我空中固件升级功能,重写了页面,支持了 mDNS,修了修小 bug 什么的,打算再增加 AP 连接和 MQTT 功能后按照开源许可证发出来。

项目使用了 ESP8266 core for Arduino这不巧了嘛,我只会写 Arduino 的代码 上传 Bin 文件到 ESP8266 的 flash 中 (运行有 SPIFFS),然后通过 UART 烧写到 STM32 的板子中。所以除 TXD 和 RXD 两根线外还得使用两个 GPIO 口连接 BOOT0 和 RST。

然后我在想能不能按照这个思路把这个项目扩展到能烧写 Arduino 兼容的板子,譬如参考 js-stk500v1 项目实现烧写协议什么的,然后,然后,然后我搜到了这个强到令人颤抖的项目 —— esp-link

esp-link 实现了 Wi-Fi 与串口的桥接、REST、MQTT、多种 MCU 的编程等等功能。esp-link 使用 Espressif SDK 构建,README 上说明最新可用版本为 V2.2.3,实际上 V3.0.14 的版本也基本稳定可用了 (截至即日 2018.8.6),最最新的发布版本据说有点问题,但开发者好像无法复现😨。

下载后解压会有好几个文件,然后按照说明烧到 esp 中,要用到 esptool (或叫做 esptool.py) ,

boot_v1.X.bin 到地址 0x00000

user1.bin 到地址 0x01000

如果使用 ESP-01s (ESP-01 我测试也能用):

esp_init_data_default.bin 到地址 0xFC000

blank.bin 到地址 0xFE000

如果使用 ESP-12F:

esp_init_data_default.bin 到地址 0x7C000

blank.bin 到地址 0x7E000

详细说明都在说明页面写着,参照着操作就行。

接线正确并上电以后就可以用笔记本或者手机接收到一个名字以 ESP 开头的 Wi-Fi 信号了,连接之后在浏览器中输入访问 192.168.4.1 就可以进入控制页面,做一些诸如连接路由器、设置引脚等设置,我们的 esp-link 就能用啦。

然后就可以烧写芯片啦,控制页面有提示使用 avrdude 的命令,或者可以像我一样使用这个叫 avr-link 的小工具。

以上。感受无线烧写的快感吧😀

1 评论

  1. 比赛的时候,旁边一个小组把你这wifi一黑,然后篡改代码,哈哈

发表回复