基于STM32的ESP8266使用教程
特别说明:
1.AT指令:指的是AT+...固定格式的指令(如AT+RST就是复位指令)
2.ESP8266使用的是USB转TTL接口
3.ESP8266使用固定波特率115200
开发资源:
Sscom42串口调试工具
USB转TTL模块(串口调试,3.3V或5V供电)
网络调试助手(TCP)
第一步:ESP8266连线及配置
ESP8266一共8个引脚:分别是UTXD、GND、CH_PD(使能)、RST、GPIO0、GPIO1、VCC、URXD
连线规则:
ESP8266 stm32
UTXD---------------------------------------RX
URXD---------------------------------------TX
VCC-----------------------------------------3.3V
GND----------------------------------------GND
CH_PD-------------------------------------3.3V
连线完成之后,打开串口。
- 在字符串输入框中输入AT+RST。点击发送。
- 对模块进行配置,将模块配置成多连接模式,请输入AT+CWMODE=3,响应ok则成功。
- 修改模块名字和密码,最后两位是通道号和密码模式,默认1,3就行
AT+CWSAP=“模块名”,“密码”,1,3 响应ok则成功。
- 启动多连接,AT+CIPMUX=1 响应ok则成功。
- 建立SERVER,端口8080,AT+CIPSERVER=1,8080 响应ok则成功
此时我们建立的wifi热点就可以被连接。(建立TCP连接则AT+CIPSTART=“TCP”,“xxx.xxx.xxx.xxx”,xxxx)。
第二步:电脑连接到wifi后与其进行通信
WIFI 直连
- 在网络调试助手中设置协议类型为“TCP Client”,服务器IP地址为“192.168.4.1”(IP地址固定),查询方法为AT+CIFSR,服务器端口为“8080”,点击连接后串口接收信息为0,connent
HEX显示为30 2C 43 4F 4E 45 43 54 0D 0A,特别注意是以“0D 0A”结尾。
- 此时连接已经建立,开始发送数据,命令为AT+CIPSEND=0,5(注意分割符为逗号),第一个数为多连接中的序号,即“0,connent”中的0,第二个数字5就是想要发送的字符个数,然后输入HELLO,点击发送,响应为SEND OK即为发送成功。
- 通过网络调试助手发送“HI”,在串口显示+IPD,0,2:HI 其中+IPD是固定部分,0是连接序号,2是字符数量,冒号后为接收内容。
第三步:通过单片机实现数据收发
- 将命令AT+RST(回车)用字符数组的形式表示出来
u8 at_rst[] = {0x41,0x54,0x2B,0x52,0x53,0x54,0x0D,0x0A};(用HexEditor查看字符的十六进制)
然后将AT+CWMODE AT+CWSAP=“模块名”,“密码”,1,3 AT+CIPMUX=1 AT+CIPSERVER=1,8080都用字符数组表示出来。
- 然后写初始化函数
Void ESP8266_Init(void)
{
Int i = 0;
For(i = 0 ; i < 13 ; i ++)
{
USART1->DR = at_cwmode[i];//送出AT+CWMODE=3(回车)
While((USART->SR & 0x40) == 0);//直到发送成功
}
My_delay_ms(1000);
For(i = 0 ; i < 8 ; i ++)
{
USART1->DR = at_rst[i];//送出AT+RST(回车)
While((USART->SR & 0x40) == 0);//直到发送成功
}
My_delay_ms(2000);
For(i = 0 ; i < 42; i ++)
{
USART1->DR = at_cwsap[i];
While((USART->SR & 0x40) == 0);
}
My_delay_ms(1000);
For(i = 0 ; i < 13 ; i ++)
{
USART1->DR = at_cipmux[i];
While((USART->SR & 0x40) == 0);
}
My_delay_ms(1000);
For(i = 0 ; i < 21 ; i ++)
{
USART1->DR = at_cipserver;
While((USART->SR & 0x40) == 0);
}
}
注:USART1->DR是数据寄存器,USART1->SR是状态寄存器,与0x40做与运算时判断第6位,当第6位为1时,表示发送完成。
3.关闭连接,AT+CIPCLOSE=0
通讯基本原理:
STM32与esp8266(WIFI)通信原理实质就是通过串口通讯,单片机通过串口发送AT指令给esp8266,从而实现通讯。
透传模式:
透传就是指不需要关心wifi协议是如何实现的。所需要做的就是A通过串口发送数据,B通过串口接收数据,整个过程中A串口和B串口就像是用导线直连起来一样。则对于开发人员来看,就是完全透明的。透传模式在ESP8266中的具体表现在:如果不开启透传模式,我们发送数据前都必须先发送指令,如AT+CIPSEND=4,如果开启透传模式,我们就不需要在每次发送数据之前都发送指令,只需要开始发送一次,之后发送的所有内容全部当成数据,当我们想退出透传模式时,只需发送“+++”即可,注意此时+++后面不接回车。
自己出现的错误:
- Keil5报错"no source": Error: #5: cannot open source input file "C:\Users\哟呵\AppData\Local\Temp\p45c-2": Permission denied
原因是自己的账户名为中文,重新创建了一个英文账户,问题解决。
- 注意wifi的密码必须是8位,否则提示ERROR。
- 在用网络调试助手连接ESP8266创建的wifi时,必须先打开自己电脑wifi热点连接功能,并连接上ESP6266创建的wifi,才能用网络调试助手进行TCP连接。