学习完中断和串口通信后,开始学习ESP8266模块,通过这个模块可以让我们的STM32具备连接WiFi进行网络通信的能力,这样STM32就可以设计出更有意思的东西。
ESP8266算是一个 SOC,内置了一个超低功耗的Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈。可以简单理解为一个单片机加Wi-Fi模块,可以直接把它作为Wi-Fi外设来使用,也可以把它作为单片机来使用。直接把它作为Wi-Fi模块使用时,官方提供了完整的Wi-Fi协议栈,通过串口AT指令集来使用。
更详细的介绍和文档可以从乐鑫的官网下载:
https://www.espressif.com/zh-hans/products/socs/esp8266
我们这里是使用ESP8266的官方固件,把它当作Wi-Fi外设来使用,STM32与它通信时使用AT指令集。
AT指令集可以分为四种类型:
注意:
- 不是每条AT指令都具备上述4种类型的命令。
- **[ ]**括号内为缺省值,不必填写或者可能不显示。
- 使用双引号标识字符串数据 “string”,例如:AT+CWSAP=“ESP756290”,“21030826”,1,4
- 默认波特率为 115200
- AT指令必须大写,并且以回车换行符结尾(CRLF)。
以AT+CWMODE_CUR指令为例:
AT+CWMODE_CUR测试指令:
// 发送指令
AT+CWMODE_CUR=?
// 指令回复:可以设置的值为1-3
+CWMODE_CUR:(1-3)
OK
AT+CWMODE_CUR查询指令:
// 发送指令
AT+CWMODE_CUR=?
// 指令回复:当前值为2,即为AP模式
+CWMODE_CUR:2
OK
AT+CWMODE_CUR设置指令:
// 发送指令
AT+CWMODE_CUR=?
// 指令回复:设置模式1成功
AT+CWMODE_CUR=1
OK
可以看出AT+CWMODE_CUR指令就只具有测试指令、查询指令及设置指令,并没有执行指令。
通常执行指令是一些无参数且直接执行的指令,例如复位指令。
在官方文档中指令分为系统、Wi-Fi、TCP三大类,下面列出几个最常用的。
- AT:测试模块是否启动
- AT+RST:重启模块
还有很多其他指令,用到时可以查阅官方文档(4a-esp8266_at_instruction_set_cn.pdf)以及官方示例(4b-esp8266_at_command_examples_cn.pdf)。
可以看出UDP与TCP都为传输层协议,如何选择主要还是根据需求,TCP可以保证可靠传输,而且只能一对一,UDP虽然不是可靠传输但是可以一对多且传输效率比较高。
AT+CWMODE=1
AT+CWJAP=“Of Course I Still Love You”,“xxxxxx”
AT+CIFSR
AT+CIPSTART=“UDP”,“192.168.31.192”,8888,8888,2
这里不需要ESP8266模块做什么,等待模块接收到命令后,会从串口发出
首先要告诉ESP8266,命令长度,然后再发送命令
AT+CIPSEND=32
{“data”:“doorbell”,“status”:“1”}
AT+CIPCLOSE
下面是串口收发记录:
// 1.设置Wi-Fi模式
AT+CWMODE=1
OK
// 2.ESP8266连接路由器
AT+CWJAP="Of Course I Still Love You","xxxxxx"
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
// 3.查询ESP8266设备在局域网段内的IP
AT+CIFSR
+CIFSR:STAIP,"192.168.31.95"
+CIFSR:STAMAC,"ac:0b:fb:c8:4f:39"
OK
// 4.创建UDP连接,ESP8266发送命令,微信小程序接收
AT+CIPSTART="UDP","192.168.31.192",8888,8888,2
CONNECT
OK
// 5.此时通过手机微信小程序点击按钮发出命令,由ESP8266接收
+IPD,42:{"room":"saloon","dev":"led","status":"1"}
+IPD,42:{"room":"saloon","dev":"led","status":"0"}
+IPD,42:{"room":"saloon","dev":"led","status":"1"}
+IPD,42:{"room":"saloon","dev":"led","status":"0"}
// 6.发送数据
AT+CIPSEND=32
OK
// 继续发送32个字符的命令,此时小程序的门铃图标变亮
{"data":"doorbell","status":"1"}
// 7.断开连接
AT+CIPCLOSE
CLOSED
OK
我们使用百问微信小程序进行测试,从小程序入口进入七天物联网智能家居实战训练班,进入UDP实验。点击绑定设备,输入3.1.3查询到的ESP8266内网IP地址及3.1.4设置的UDP端口号进行绑定。