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
若内容更新不及时,可以前往查看博客原文。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zsuroy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值