ESP8266与STM32

ESP8266与STM32通信

最近想实现esp8266-01s系列和stm32f103c8t6之间进行串口通信,然后在网上看了好多这方面的资料最终都以失败告终。不断尝试下还是实现该功能,同时非常感谢这位博主。
博主链接

实现的最终功能是能够通过手机连上ESP8266作为服务端模式下的wifi,让后在手机上发送相关的指令,esp8266接收后再通过串口发送给单片机 ,间接的来控制我们的外设。

esp8266常用指令介绍
具体的用法可以查看相关的esp8266的手册
下面就只介绍一下配置三种不同模式常用的几个指令

ESP8266与STM32_第1张图片ESP8266与STM32_第2张图片ESP8266与STM32_第3张图片

模式一:STA模式

 //通俗的来讲 该模式就是将esp8266作为客户端 来连接服务端(可以通过我们手机开热点)
 1. AT+CWMODE=1                    设置模组为STA模式。(串口助手)
 2. AT+CWLAP                 	   查询附近 WIFI(串口助手)
 3. AT+CWJAP="nova5Pro","yin12345"   连接 WIFI(串口助手)
 4. AT+CIFSR                       查看路由器分配给模组的IP地址,例如 192.168.43.20(串口助手)
 5. AT+CIPMUX=1                    打开多连接(串口助手)
 6. AT+CIPSERVER=1,8080         设置模块服务器端口(串口助手).
 7. 打开网络调试助手进行设置:请打开电脑去连接路由器的WIFI热点。并且打开网络调试助手,在网络调试助手上输入连接模块的 IP和设置的端口。
 8. AT+CIPSEND=0,11                进入数据发送模式为11个字节

在电脑终端查看当前Ip ipconfig

ESP8266与STM32_第4张图片记住该Ip在我们配置的时候会使用到 让后通过网络串口助手打开服务端 在使用另外一个串口助手打开就可以观察到我们客户端的启动情况 和 二者之间的数据收发 在esp8266.c中 打开我最开始注释的就可以了
ESP8266与STM32_第5张图片

模式二:AP 模式

//AP模式就是让我们的8266模块作为热点 让我们来连接 实现局域网的无线控制
 1.  AT+CWMODE=2                              开启 AP 模式(串口助手)
 2.  AT+CWSAP="ESP8266","12345678",11,0     设置模块的 wifi 和密码(串口助手)
 3.  AT+CIPSERVER=1,8080                     设置模块服务器端口(串口助手),
 4.  打开电脑或者手机上的TCP助手去连接模块建立的AP热点
 5.  打开网络调试助手,输入连接模块的 ip 和设置的端口。
 6. AT+CIFSR       查看当下的ip 
 7.  AT+CIPSEND=0,11                          进入数据发送模式为11个字节(串口助手)

下面串口打印出来的信息就可以观察到我们的配置已经成功了
并且可以看到esp8266作为服务端下的IP,我们通过手机或者网络串口助手连接 
输入该IP和我们配置的端口号就可以了
注意:

ESP8266与STM32_第6张图片

通信连接

ESP8266与STM32_第7张图片上面就实现了简单的通信

模式三:STA+AP 模式

该模式就是上面两种模式的共存模式,一般没有用到 就不做具体介绍了感兴趣的同学可以自己去试试。

最后在讲一下透传模式

透传模式简单的来说就是实现我们发送的数据,发送什么另一端就接收什么,可以一直发送。
如果不开启透传模式,发送数据前都必须先发送指令AT+CIPSEND=num,
例如T+CIPSEND=4  //发送的数据长度不能大于4 要不然在次发送的时候句处于忙的状态。

AT+CIPMODE=<1> :进入透传模式
AT+CIPSEND :之后发送的所有内容将全部当成数据
注意:透传只能在单连接模式下进行,所以在建立连接之前一定要用(AT+CIPMUX=0 设置单连接)
退出透传模式: 发送数据"+++"就可以了。注意:此时“+++”后面,不接“发送新行”!

c 主程序

/***************************************************/
//该程序还是借鉴前面提到的博主,后面会根据自己功能的需求进行相应的修改

#include "stm32f10x.h"
#include "bsp_usart.h"
#include "delay.h"
#include "led.h"
#include "usart3.h"
#include "string.h"
#include "esp8266.h"
/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{	
  USART_Config();
	delay_init();
	LED_Init();
	
	usart3_init(115200);

	esp8266_start_trans();	
	
	printf("初始化完成Start Test\n");
	
	USART3_RX_STA=0;
  while(1)
	{	

    if(USART3_RX_STA&0x8000)    //如果消息接收完成,则处理
		{
			if(strstr((const char*)USART3_RX_BUF,"on"))  //这里是看接收到的消息中有没有自己设置的命令“on”,strstr()函数不会用的可以搜一下
				{
					GPIO_ResetBits(GPIOC,GPIO_Pin_13);
				}
			if(strstr((const char*)USART3_RX_BUF,"off")) 
			{
				GPIO_SetBits(GPIOC,GPIO_Pin_13);
			}
			USART3_RX_STA=0;   //消息处理完成,开始重新接收
			memset(USART3_RX_BUF,0,600);         //将接收区清0
		}

	}	
}
/*********************************************END OF FILE**********************/

源码链接 链接:https://pan.baidu.com/s/1YwXKHYdV_wxlAYa7eDA7vQ 提取码:avug --来自百度网盘超级会员V4的分享

你可能感兴趣的:(SMT32,esp8266,stm32f103c8t6,串口通信)