原理:WIFI和电脑的通讯实质上是串口通讯,所以串口知识不能少。具体思路是首先STM32通过串口直接发送AT指令给ESP8266进行配网,之后网络助手发送数据,串口读取数据,单片机通过判断是否接收到了该数据进行控制小灯。
我用的硬件是正点原子的探索者加ESP8266-01,ESP8266-01的运行电路在之前已经讲过。
首先是配网过程,是基于AT指令的原理。
单片机发送AT指令给ESP8266,指令用十六进制表示,如下代码
u8 at_cwmode[] = {0x00,0x41,0x54,0x2B,0x43,0x57,0x4D,0x4F,0x44,0x45,0x3D,
0x33,0X0D,0x0A};
u8 at_rst[] = {0x41, 0x54, 0x2B, 0x52, 0x53, 0x54, 0x0D, 0x0A};
u8 at_cwsap[]={0x41,0x54,0x2B,0x43,0x57,0x53,0x41,0x50,0x3D,0x22,0x45,0x53,0x50,0x38,0x32,0x36,0x36,0x22,
0x2C,0x22,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x22,0x2C,0x31,0x2C,0x33,0x0D,0x0A};
u8 at_cipmux[]={0x41,0x54,0x2B,0x43,0x49,0x50,0x4D,0x55,0x58,0x3D,0x31,0x0D,0x0A};
u8 at_cipserver[]={0x41,0x54,0x2B,0x43,0x49,0x50,0x53,0x45,0x52,0x56,0x45,0x52,0x3D,0x31,0x2C,0x38,0x30,0x30,0x30,0x0D,0x0A};
主函数,这里用网络助手调试, 网络助手发一个1,单片机读取串口收到的这个1,然后判断控制小灯翻转
int main(void)
{
u8 t=0;
u8 len;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为115200
usart3_init(115200);
LED_Init(); //初始化与LED连接的硬件接口
//AT指令配置wifi
for(t=0;t<14;t++)
{
USART_SendData(USART3, at_cwmode[t]); //向串口3发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
}
delay_ms(1000);
for(t=0;t<8;t++)
{
USART_SendData(USART3, at_rst[t]); //向串口3发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
}
delay_ms(1000);
for(t=0;t<36;t++)
{
USART_SendData(USART3, at_cwsap[t]); //向串口3发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
}
delay_ms(1000);
for(t=0;t<13;t++)
{
USART_SendData(USART3, at_cipmux[t]); //向串口3发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
}
delay_ms(1000);
for(t=0;t<21;t++)
{
USART_SendData(USART3, at_cipserver[t]); //向串口3发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
}
delay_ms(1000);
while(1)
{
if(USART3_RX_STA&0x8000)
{
len=USART3_RX_STA&0x3fff;//得到此次接收到的数据长度
//收到电脑发来的请求控制单片机
if(USART3_RX_BUF[len-1]==0x31)
LED1=!LED1;
//把串口三接受到的数据传给串口一
//这部分尽量不要打开,打开之后会出现数据拆包粘包问题,差不多就是点两下发送,才在那收到一次数据
/*
for(t=0;t
具体步骤就是先网络助手连上ESP8266,然后发送一个1,单片机上的LED就翻转了。
源码:链接:https://pan.baidu.com/s/1FefYqB2feyq1tzmwSlcDqA 提取码:hk5o
总结:我在做这个实验的时候主要的问题在于对串口的理解不够深,所以走了不少弯路,所以基础很重要,懂了串口的接收和发送,基本就可以用AT指令的方式控制ESP8266了。