WIFI模块ESP8266之AT指令TCP通讯实现HTTP及SSL请求

esp8266-01.jpg

前言

之所以写这篇文章,是记录一下使用ESP8266实现HTTP请求的完整过程,网上教程实在太少了而且不详细,出问题都不好找,估计诸位都转 MQTT 去了

调试环境

WIFI模块: ESP8266-01s
串口工具: USB-to-ttl, Wch-Link(带串口功能)
串口调试工具:安信可官方串口调试工具+XCom (Windows, 驱动Ch340); Serial Monitor (MacOs, Vscode插件,有BUG)

wch-link.png

usbtottl.jpg

问题踩坑

  1. 驱动问题
    USB to TTL的有两个版本,一个是CH340,一个是CP2102,对应驱动需要一致。

  2. 关于固件下载

    • USB to TTL: ESP8266的VCC需要接入USB to TTL的VCC引脚,不要接3.3V引脚,估计是供电不足;如果有稳压芯片可以直接上稳压3.3V;供电不足会导致串口收发数据异常、下载失败等问题。
    • Wch-Link: 带的串口只有3.3V引脚,我试过了数据收发正常,但是固件下载失败
    • MacOS 环境下使用 Parallel Desktop 安装Win10虚拟机,在虚拟机内使用以上几款串口工具出现数据收发不完整,有时候会乱码,暂时无解;直接使用ASUS 真机 Win7系统,以上两款均数据收发正常。

开始折腾

更新固件

不要用虚拟机!!!注意看以上的问题踩坑再操作。

最新固件:于2023.1.31摘自安信可官网ESP8266/ESP32固件合集

①、博安通 AT 固件(固件号:4MB(0883),1MB(0884))
特性:操作简单,任何mcu均可直接接入
下载地址: 博安通出厂固件
更新时间:2019年12月22日
更新说明: v1.7.1.0 AT Firmware,内含 8Mbit 和 32Mbit 两个版本,请客户根据自己产品的flash大小来烧录,串口引脚为TXD,RXD

注意看单位写的是8Mbit -> 1MB; 即对应两个版本1M版本和4M版本,本文使用的是ESP8266-01S,数据手册说明是1MB版本,下载解压后选固件1MB大小那个BIN。

接线图

Esp8266connect.png

使用 USB to TTL 进行更新: 接五根线就可以了,因为RST、EN已经内部上拉。

ESP01S -> USB to TTL
TX -> RX
RX -> TX
GND -> GND
VCC -> VCC (不是3.3引脚,就是VCC引脚)
IO0 -> GND

下载步骤

  1. 导入下载解压出来的1MB固件bin格式,填写扇区地址 0x0
  2. 勾选 DonotChBin,其他可以不用配置了,勾选后自动配置
  3. 点击 Start 开始下载
  4. 提示等待设备复位:此时断开ESP8266-01S的电源重新连下即可下载

截屏2023-01-31 上午12.43.49.png

区别运行模式与下载模式

使用串口调试工具,设置波特率:74880,以切换到系统日志模式。开机复位之后可以看到如下字样。

boot mode: 1  下载模式
boot mode: 3  运行模式

AT指令HTTP请求

demo.png

图上命令不需要最后的 \r\n\r\n

AT指令


// 连接
AT+CIPSTART="TCP","suroy.cn",80
// 开启透传模式
AT+CIPMODE=1
// 开始发送,此时回复 **>**
AT+CIPSEND

// 以下是发送的协议内容
GET /ping.html HTTP/1.1
Host: suroy.cn
Connection: Keep Alive


// 退出透传(不加\r\n)
+++

SSL有所不同



// 设置SSL buffer 大小(未设置这项导致SSL连接错误)
AT+CIPSSLSIZE=4096 

// 连接
AT+CIPSTART="SSL","suroy.cn",443
// 开启透传模式
AT+CIPMODE=1
// 开始发送,此时回复 **>**
AT+CIPSEND

// 以下是发送的协议内容
GET /ping.html HTTP/1.1
Host: suroy.cn
Connection: Keep Alive


// 退出透传(不加\r\n)
+++

// 关闭连接
AT+CIPCLOSE

HTTP协议说明

以下是一个完整的GET请求协议,使用透传模式发送完整内容,包括空格、换行都不能少;行内空格,行末换行,结束有一个空行;注意此处未使用 \r\n 替换,因为\r\n 实际上发送出去时会经过转义导致发出去的并不是“ \r\n ”,所以直接输入换行进行发送。

GET /ping.html HTTP/1.1
Host: suroy.cn
Connection: Keep Alive

问题分析:

47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A 48 6F 73 74 3A 20 73 2E 73 75 72 6F 79 2E 63 6E 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 4B 65 65 70 20 41 6C 69 76 65 0D 0A 0D 0A 5C 72 5C 6E 5C 72 5C 6E 

这是本节首截图中发送出去的16进制,可以看到最后的\r\n被转义发出为 5C 72 5C 6E 5C 72 5C 6E 并非"\r\n"的 0D 0A,所以协议请求会失败;

那么如何解决这个问题呢?

  1. 直接使用单片机串口发送字符"\r\n",单片机内部发送不存在此问题;
  2. 当发送\r\n时使用16进制发送即“\r”(0D),"\n"(0A)
附POST协议

未测试

POST / HTTP/1.1
Accept-Language: zh-CN,zh;q=0.9
Host: suroy.cn
Connection: keep-alive
Content-Length:26
Content-Type:application/x-www-form-urlencoded;charset=UTF-8

name=suroy&id=1

说明:跟get请求一样,第一行的协议类型为POST
需要注意的是 POST需要发送两次,第一次不会返回任何东西,第二次会返回;Content-Length:26 必须声明请求体的字符长度

常用资料集合

ESP8266资料合集

ESP8266开发工具

ESP8266/ESP32固件合集

关于作者

博客原文:https://suroy.cn/embeded/the-at-instruction-tcp-communication-of-wifi-module-esp8266-realizes-http-request.html
若内容更新不及时,可以前往查看博客原文。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
开发 ESP8266 WiFi 模块的 STM32 库函数需要进行以下步骤: 1. 确定 ESP8266 WiFi 模块的 AT 指令集 在使用 ESP8266 WiFi 模块之前,需要先了解其支持的 AT 指令集,包括 AT+RST、AT+CWMODE、AT+CWJAP、AT+CIPSTART、AT+CIPSEND 等。可以通过 ESP8266 WiFi 模块的官方文档或 AT 指令集手册来获取这些信息。 2. 初始化 STM32 的串口通信 ESP8266 WiFi 模块使用串口与 STM32 进行通信,因此需要在 STM32 上初始化串口通信。可以使用 STM32 的 USART 库函数来实现。 3. 封装 ESP8266 WiFi 模块的 AT 指令 在进行 ESP8266 WiFi 模块的 AT 指令通信时,需要将 AT 指令封装成一串字符串,并通过串口发送给 ESP8266 WiFi 模块。在 STM32 库函数中,可以封装一个函数来实现该功能。 4. 实现 ESP8266 WiFi 模块的 AT 指令响应 当 ESP8266 WiFi 模块接收到 STM32 发送的 AT 指令后,需要返回响应信息。可以通过 STM32 的串口接收中断来实现ESP8266 WiFi 模块响应信息的接收,并通过库函数将其处理。 5. 实现 WiFi 模块的网络连接 通过使用 ESP8266 WiFi 模块的 AT 指令,可以实现 WiFi 模块的网络连接。可以通过封装 STM32 库函数来实现 ESP8266 WiFi 模块的网络连接。 6. 实现 WiFi 模块的数据传输 通过 ESP8266 WiFi 模块的 AT 指令,可以实现 WiFi 模块的数据传输,包括数据发送和数据接收。可以封装 STM32 库函数来实现 ESP8266 WiFi 模块的数据传输。 总之,使用 STM32 库函数开发 ESP8266 WiFi 模块需要对 ESP8266 WiFi 模块的 AT 指令集有一定的了解,并且需要熟悉 STM32 的串口通信和 USART 库函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zsuroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值