学习ESP8266⑤基于STM32实现简单控制

原理: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<len;t++)
		  {
				 USART_SendData(USART1, USART3_RX_BUF[t]);         //向串口1发送数据
			   while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
		  }
			*/
			USART3_RX_STA=0;
		}
	}
}

具体步骤就是先网络助手连上ESP8266,然后发送一个1,单片机上的LED就翻转了。
源码:链接:https://pan.baidu.com/s/1FefYqB2feyq1tzmwSlcDqA 提取码:hk5o
总结:我在做这个实验的时候主要的问题在于对串口的理解不够深,所以走了不少弯路,所以基础很重要,懂了串口的接收和发送,基本就可以用AT指令的方式控制ESP8266了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ma lidong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值