文章使用ESP01S模块为例,直接访问HTTP链接下载文件并保存到Flash中,可扩展完成网络资源获取、WIFI OTA升级等操作,文章以ESP01S通过WIFI下载BIN文件为例。
实现方法:
硬件准备:
ESP01S是一款基于ESP8266的紧凑型通信模块,集成 Wi-Fi MAC/ BB/RF/PA/LNA。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈,可以使设备接入网络平台,实现WIFI或4G通信等功能,淘宝售价5-8元不等。
首先确保浏览器可以访问地址:www.funiot.xyz/upload/test.bin
访问上述链接后能够下载文件,如下所示:
发送AT测试,收到响应OK
配置Station模式,即作为客户端连接到wifi
连接wifi,wifi名称:funiot,wifi密码:funiot.xyz
建立www.funiot.xyz地址80端口的TCP连接
设置传输模式,1为透传
进入透传指令传输
直接发送:
HEAD /upload/test.bin HTTP/1.1
Host: www.funiot.xyz
注意按照上述换行格式,HTTP的分隔符为两个换行,在编辑框中添加一个新行并勾选“发送新行”,请求成功的话可以看到下图:
这是我们文件下载的请求头,上面我们比较关注的是Content-Length:4672,这个指明了文件的大小。
直接发送:
GET /upload/test.bin HTTP/1.1
Host: www.funiot.xyz
这个就是实际的文件内容,我们可以打开之前下载的文件:
可以给GET请求添加限制范围:
GET /upload/test.bin HTTP/1.1
Host: www.funiot.xyz
Range: bytes=0-99
AT指令完整流程:
然后大家就可以使用MCU去接收处理这些下载的数据了。
方法2时使用Arduino IDE开发时,可以用编程实现文件的下载并保存,但是保存文件时,ESP01S模块的板载FLASH又比较小(8Mbit的Flash),因此首先进行Flash更换:
W25Q32 是一个32Mbit(4M)的Flash芯片,大家可以根据自己的需要替换不同大小的Flash,用热风枪吹下原来的Flash后替换大容量的即可,例如:
ESP01S替换FLASH
在更换Flash之后,如果需要进行AT指令的控制,需要重新烧录官方固件,烧录软件下载:烧录WiFi固件工具
①下载固件:安信可科技/固件汇总
②烧录
连接VCC 、GND、RXD、TXD,并上电前将IO0拉低
下载完成后,将IO0恢复悬空,重新上电或复位
打开串口调试助手,波特率115200,重新上电可以查看下面的信息,并且换行发送"AT",可以收到”OK“,即表明固件烧录成功。
Arduino IDE编程部分主要实现的是HTTP文件下载、JSON解析以及创建文件系统进行文件的读写操作。
由于更换了4M Flash,所以Flash Size需要调整为:
主要使用的HTTP操作使用的库是:
#include <ESP8266WiFi.h>
数据解析的JSON库采用的是:
#include <ArduinoJson.h>
对于SPI FLASH的驱动以及文件系统的创建使用的库是:
#include <Wire.h>
#include <FS.h>
点击下载:【Gitee】IOT趣制作 / ESP01s-HttpDownload-File
注意:下载文件会有1-2s左右的处理时间
通过上面的两方法可以简单的实现网络文件的下载,可以后续用于OTA升级、网络文件资源下载的等,所有操作步骤和工程代码已经在上面给出,如有相关疑问和建议,可在公众 号【IOT趣制作】进行留言。