14.Wifi模组(ESP8266)
目录
WIFI 模组讲解
WIFI 模组和 TCP/IP 的关系
常见的 WIFI 模组ESP8266
ESP8266 相关 AT 指令集介绍
AT 指令集的格式
指令分类 1
指令分类 2
与 ESP8266 通信,串口参数如何配置
ESP8266WIFI 设置 3 种无线通信模式:
开发板相关的硬件电路
作为客户端,连接本地服务器/远程服务器
如何确定需要发送哪些 AT 指令
ESP8266 的调试
调试的目的
直接使用 USB 转 TTL 和模块调试通信
不依赖程序和 ESP8266 模块调试通信--借助板子的 CH340
依赖程序的调试
验证一些基本的指令 -- 是否开启回显
验证查询、测试、设置、执行指令等
连接指定的服务器 – 安信可透传云
透传发送数据到平台
非透传发送数据到平台
透传和非透传的区别
从调试到编程--调试获取的信息
WIFI 模组讲解
WIFI 模组和 TCP/IP 的关系
TCP/IP 是一种网络协议,现在很多网络模块是集成了 TCP/IP 协议。就像单片机集成了硬件 SPI,硬件 IIC,和串口等。
常见的 WIFI 模组ESP8266
乐鑫:生产芯片,以无线为主,ESP8266 ESP32
安信可:在厂家基础上,二次开发
ESP8266 相关 AT 指令集介绍
AT 指令集是一个通用的说法:WIFI 模块,4G 模块,CAT1 模块,NB_IOT,蓝牙模块..
AT 指令集的格式
指令格式:(AT)开头 + 数据 + (回车+换行)结尾
串口传输方式:UART 的 TTL
默认波特率:根据从设备确定
字符串:”AT+数据+回车+换行”
指令分类 1
指令分类 2
ESP8266 指令集主要分为:基础 AT 指令、 Wi-Fi 功能 AT 指令、 TCP/IP 相关的 AT 指令。
与 ESP8266 通信,串口参数如何配置
注意:需要发送新行(\r\n)
ESP8266WIFI 设置 3 种无线通信模式:
混合模式(同时只能使用一种模式)
AP 模式 -- 相当于手机释放热点,让别人连接
STA 模式 -- 相当于手机连接别人的热点
开发板相关的硬件电路
/*结合硬件原理图 ESP8266 接在 UART3PE6 ESP_EN 通用推挽输出 R52 R53 两个上拉电阻未焊接,如果焊接,也可以开漏PB10 USART3_TX 复用推挽输出PB11 USART3_RX 浮空输入*/
作为客户端,连接本地服务器/远程服务器
如何确定需要发送哪些 AT 指令
最核心的问题:拿到一本 AT 指令集,内部 AT 指令太多了,如何确定要用哪些指令
1.看文档
2.找厂家
ESP8266 的调试
调试的目的
有的ESP8266 是焊在板子上,当我们拿到一个新模块,比如说 ESP8266,我们给它供电,他的接口是 TTL,如果想电脑和模块通信,就需要用 USB 转 TTL 跟它通信,通过这个过程,去学习和确定这个模块到底怎么用,确认发哪些指令,确认发的指令对不对,多长时间回复,正确和错误回复是什么内容
直接使用 USB 转 TTL 和模块调试通信
1. 用 USB 转 TTL 跟 ESP8266 通信(TTL 电平,交叉)
2. 根据需要指令,测试完整的配置过程,能够实现功能,证明 AT 指令的顺序是对的
3. 之后在单片机编程,实现发送 AT 指令的过程
不依赖程序和 ESP8266 模块调试通信--借助板子的 CH340
1. 单片机编译下载没有串口 1 收发数据的程序,避免程序操作串口 1 影响-- 直接空工
2. 接线--目的是让板载的 CH340 直接和 ESP8266 通信
PB11(ESP_TX) 接 PA9(CH340_RX)
PB10(ESP_RX) 接 PA10(CH340_TX)
PE6(ESP_EN) 接 3.3V--模块开机 -- 切记不要接 5V
3. 串口助手按如下设置
4. 输入要发送的指令 --点击发送
注意:光标要放在 T 的后面,不能放下一行
5. 正确的回复截图
6. 如果回复 busy --确认第 4 步是否正确
依赖程序的调试
1. 将板子上的刚才的三根线都拔掉
2. 修改串口 1 的初始化中的波特率为 115200
3. 编写串口 3 的初始化,波特率 115200,开启接收中断和空闲中断,EN 引脚也需要配置。
4. 编写串口 1 和串口 3 的中断服务函数
串口 1 和电脑通信
串口 3 和 ESP8266 通信的
5. 在串口 1 中断服务函数中调用串口 3 发送数据
USART_SendData(USART3,data); //调用串口 3 的发送函数,将收到的数据转发给 ESP8266
注意:两个串口波特率要一致,都是 ESP8266 要求的波特率 115200
注意:使用的发送函数,是库直接提供的,不使用二次封装的单字节
6. 在串口 3 中断服务函数中调用串口 1 发送数据
验证一些基本的指令 -- 是否开启回显
验证查询、测试、设置、执行指令等
连接指定的服务器 – 安信可透传云
透传发送数据到平台
1. 按下复位,模块重启
2. 确定发送哪些指令
3. 按照手册第 4 章的顺序发送指令
AT 测试模块AT+RST 重启模块 ,非必须AT+CWMODE=1 设置为 STA 模式AT+CWJAP="Smartisan","12345678" 连接 wifiAT+CIPSTART="TCP","122.114.122.174",33582 连接服务器AT+CIPMODE=1 进入透传模式AT+CIPSEND 开始传输数据+++ 退出透传模式
4. 打开安信可透传云
http://tt.ai-thinker.com:8000/ttcloud
5. 手机释放热点 -- 热点一定要使用 2.4G 频段,5G 连不上
注意 1:热点一定要是 2.4G 的注意 2:注意一下连接的数量,限制连接数量可能就连不上了注意 3:WIFI 名称不要有中文
6. 修改要连接的参数
7. 按照指令顺序依次发送
23 25 26 27 28 29 30 34
8. 成功平台就会显示 GOGOGO
重复执行第 7 步就可以重复发送到平台
9. 平台下发数据到 ESP8266
10. 如果想恢复 AT 指令模式 -- 退出透传
透传:透明传输,配置成透传之后,发的数据无论是否是什么数据,都会发出去
退出透传 发送+++ 并且无换行回车 延时 1s
11. 再次发送 AT 指令,就可以正常回复了
非透传发送数据到平台
1. 按下复位键,模块重启
2. 确定发送哪些 AT 指令
3. 按照手册第 2 章的顺序发送指令
4. 打开安信可透传云
5. 手机释放热点 -- 热点一定要使用 2.4G 频段,5G 连不上
6. 修改要连接的参数
7. 按照下面的图片顺序发送指令
8. 成功之后,截图
注意:AT+CIPSEND=5\r\n 中的 5,表示要发送的数量 ,超过的数据会被截断
9. 重复发送,需要重复执行截图中步骤的第 5、6 步
透传和非透传的区别
透传:透明传输建立透传之后,ESP8266 收到什么数据,就转发什么数据,即使这个数据是 AT 指令,也转发,不处理。
非透传模式:永远处于 AT 指令模式
从调试到编程--调试获取的信息
1. 每一条指令,ESP8266 正确和错误执行回复的什么内容,因为我们编程要检测
2. 每一条指令, ESP8266 需要多长时间反应,才能处理结束。
3. 这条指令正确和错误的回复,分别是什么内容
4. 判断回复的时候,要判断尾巴
5. 上一条指令处理完,再发送新的指令,否则提示 busy
6. 如果指令错误,就会回复 ERROR
/*
发送AT指令检测是否正确回复
参数1 待发送指令
参数2 期望回复
参数3 接收数据存放缓冲区
参数4 超时时间
参数5 是否检测回复
返回值 0 未检测到期望回复
返回值 1 检测到期望的回复
*/
uint8_t Send_CMD_Check_Rec(uint8_t *cmd, uint8_t *ack, uint8_t *buff, uint64_t time_out, uint8_t ack_flag)
{//发之前清除接收缓冲区,正式使用最好不要有这句话ESP_R_Buff_Clear();//发送要发送的指令ESP_SendStr(cmd);//根据是否需要检测回复处理if(ack_flag == 0){//不需要检测,延时对应的时间,返回Delay_ms(time_out);return 1;}while(strstr((char *)Esp.R_Buff, (char *)ack) == NULL){//查找不成功time_out--;Delay_ms(1);if(time_out <= 0){//等待时间,还未查找成功,返回失败return 0;}}return 1;
}
作为客户端,连接时间服务器获取时间
作为客户端,连接心知天气服务器获取天气
作为服务端,处理 AP 模式