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