轻松实现ESP01S下载HTTP文件的两种方法

2023-12-28 16:28

本文主要是介绍轻松实现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趣制作】进行留言。

这篇关于轻松实现ESP01S下载HTTP文件的两种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546550

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误