stm32f103c8t6控制ESP8266与手机APP通信

4 篇文章 6 订阅
2 篇文章 0 订阅

stm32f103c8t6控制ESP8266与手机APP通信


之前已经发表过利用stm32控制蓝牙模块与手机APP通信的文章,那么现在我就来说说用WIFI模块来控制与手机APP的通信
首先需要的器件如下:
stm32f103c8t6
ESP8266-01S(默认波特率115200)
除此之外还需要手机下载一个通讯软件,我用的是安卓手机应用宝上面的TCP连接这个APP
WIFI模块的连接如下所示:
在这里插入图片描述

代码很简单,我主要附上主函数代码:

/*
ESP8266 AP+Station服务器模式测试

UART2 PA2 PA3  与网络模块ESP进行通信

UART1 PA9 PA10 进行数据跟踪
*/

#include  "delay.h"
#include  "led.h"
#include  "usart.h"
#include  "string.h"
#include  "stdio.h"
extern  u8 RX_buffer[tbuf];
extern u8 RX_num;				 //接收计数变量

u8  esp_at[]="AT\r\n";                  // 握手连接指令,返回"OK"
u8  esp_cifsr[]="AT+CIFSR\r\n";         // 本机IP地址查询指令
u8  esp_cipsend[]="AT+CIPSEND=6\r\n";   // 设置发送数据长度
u8  esp_test[]="sunny\r\n";   			//  数据内容
u8  esp_rst[]="AT+RST\r\n"; 					// 软件复位
 
u8  esp_cwmode[]="AT+CWMODE=3\r\n";     // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"
u8  esp_cwsap[]="AT+CWSAP=\"ESP8266_TEST\",\"1234567890\",1,3\r\n";//设置WIFI的名称及密码
u8  esp_cipmux[]="AT+CIPMUX=1\r\n";   			//打开多连接	
u8  esp_cipserver[]="AT+CIPSERVER=1,8080\r\n";  //建立TCP服务器,开放端口8080

//指定字符串与缓存数组数据进行数据比较
//*p 要比较的指定字符串指针数据
//返回:1 数据一致  0 数据不一致 
u8 Data_compare(u8 *p)
{ 
	if(strstr(RX_buffer,p)!=NULL)
	    return 1;
	else
		return 0;
}

int main(void)
   {	
   	delay_init();	    	 //延时函数初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 //串口初始化为9600  
	LED_Init();		  	//初始化与LED连接的硬件接口
	memset(RX_buffer, 0, tbuf);//清缓存数据
	RX_num=0;				   //接收计数变量清0

	//配置wifi工作模式为ap+sta模式
    while(1)
	{
	 Uart2SendStr(esp_cwmode);	   // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change"
	 if(Data_compare("OK")||Data_compare("no change"))break;
	 else  Uart1SendStr("ERROR1,some problems with ESP8266 \r\n");
	 delay_ms(600);
	}
	 Uart1SendStr("OK,set mode as AP+Station with ESP8266! \r\n");	 
	 memset(RX_buffer, 0, tbuf);//清缓存数据	
	 RX_num=0;				   //接收计数变量清0
	
	while(1)
	{
	 Uart2SendStr(esp_cwsap);	   //设置WIFI的名称及密码
	 if(Data_compare("OK"))break;
	 else  Uart1SendStr("ERROR2,some problems with ESP8266 \r\n");
	 delay_ms(600);
	}
	 Uart1SendStr("OK,set cwsap success! \r\n"); 
	 memset(RX_buffer, 0, tbuf);//清缓存数据	
	 RX_num=0;					//接收计数变量清0
	
    while(1)
	{
	 Uart2SendStr(esp_cipmux);	   //设置多连接 (多路连接模式)
	 if(Data_compare("OK"))break;
	 else  Uart1SendStr("ERROR3,some problems with ESP8266 \r\n");
	 delay_ms(600);
	}
	Uart1SendStr("OK,set cipmux success! \r\n");
	memset(RX_buffer, 0, tbuf);//清缓存数据
	RX_num=0;				   //接收计数变量清0

    while(1)
	{
	 Uart2SendStr(esp_cipserver);	   //设置wifi模块为TCP服务器模式,并配置端口为8080
	 if(Data_compare("OK"))break;
	 else  Uart1SendStr("ERROR4,some problems with ESP8266 \r\n");
	 delay_ms(600);
	}
	Uart1SendStr("OK,set server success! \r\n");
	memset(RX_buffer, 0, tbuf);//清缓存数据
	RX_num=0;				   //接收计数变量清0

	while(1)
	{	
		if(Data_compare("LEDK"))               //点亮板上了的led
		{		
            led(1);	
			memset(RX_buffer, 0, tbuf);//清缓存数据
			RX_num=0;				   //接收计数变量
			Uart1SendStr("led is open!\r\n");							
		}
	    else if(Data_compare("LEDG")) 		   //关闭板上了的led
		{
            led(0);		
			memset(RX_buffer, 0, tbuf);//清缓存数据
			RX_num=0;				   //接收计数变量清0
			Uart1SendStr("led is close!\r\n");									
		}	
	}
   }

这里主要用到有如下几个AT指令:
AT+CWMODE=3(设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change")
AT+CWSAP=“ESP8266_TEST”,“1234567890”,1,3(设置WIFI的名称及密码,这个名称和密码你可以随便取你自己喜欢的就行,后面两个是通道号和密码模式,默认1,3就好)
AT+CIPMUX=1(打开多连接 )
AT+CIPSERVER=1,8080(建立TCP服务器,开放端口8080)
这些AT指令我是在程序中执行的,不过你也可以利用USB转TTL模块直接与WIFI模块连接进行配置,这里说明一下,配置AP+Station模式以及配置WIFI名称和密码只要配置一次就行,即使之后断电再上电也不用重复配置,每次上电后只要输入AT+CIPMUX=1和AT+CIPSERVER=1,8080即可。为了让刚接触WIFI模块的人能直接使用这个模块,我在程序中把AP+Station模式以及WIFI名称和密码都写进去,这样无论你的模块之前是被配置成什么样,现在经过这四个配置后就可以在你的电脑上面热点发现有这个WIFI的出现,如下图:在这里插入图片描述
到这里,我们的WIFI已经设置成功了。
还有就是每次发送AT指令给WIFI模块,WIFI模块收到你发送的特定指令后基本都会发送一串数据返回(当作是数据应答,为了就是让你知道你这个AT指令是否配置成功,具体的AT指令集我将在文章末尾附上链接,在我看来下面的AT指令集很全面)
接下来,我就简单的说下手机上面的APP"TCP连接"如何使用:
打开APP之后,点击右上角的连接,此时他会叫你选择一个远程主机进行连接(你如果刚刚下载的话,下面是没有任何一个连接的),而在你点击右上角连接后,会看到右上角有一个省略号,点进去后,他会叫你输入地址以及端口号,这个地址固定是:192.168.4.1,如果不放心可以使用“AT+CIFSR”查询(用USB转TTL模块直接与WIFI模块连接,然后在PC端上面的串口调试助手可以看到你发送AT+CIFSR后,在上面会显示WIFI模块返回的数据,返回的数据中就包括了这个地址),端口:8080,这对应着“AT+CIPSERVER=1,8080”。然后点击APP上面的连接,这样就将手机APP与WIFI模块的通讯完成了(也就是手机连接上了WIFI模块创建出来的WIFI,不过这个WIFI是不能上网的,只能拿来通讯用),就可以实现通过手机APP控制WIFI模块,进而控制STM32控制板了,上面的程序中,我是写接收到LEDK(也就是LED开的缩写)就亮起stm32f103c8t6上面的红灯PA1,接收到LEDG(也就是LED关的缩写)就熄灭stm32f103c8t6上面的红灯。手机界面如下:
在这里插入图片描述
是不是看起来跟蓝牙串口的界面很像,这也是另一种通讯的方法,在我之前的文章中也有一篇是专门讲蓝牙通讯的,感兴趣的可以去看看。好了,要说的话就这么多了,下面就附上相关程序以及AT指令集的链接。
stm32f103c8t6控制ESP8266与手机APP通信程序
ESP8266AT指令集
代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!

  • 63
    点赞
  • 459
    收藏
    觉得还不错? 一键收藏
  • 687
    评论
要实现STM32F103C8T6控制ESP8266手机APP通信,通常可以按照以下步骤进行: 第一步,准备硬件: 1. 准备一块STM32F103C8T6开发板和一块ESP8266模块。 2. 将ESP8266的TX引脚连接到STM32F103C8T6的RX引脚,将ESP8266的RX引脚连接到STM32F103C8T6的TX引脚,以实现串口通信。 3. 将ESP8266的供电引脚连接到STM32F103C8T6上的5V引脚,以供电给ESP8266模块。 第二步,编写STM32F103C8T6的代码: 1. 使用STM32的开发环境(如IAR、Keil等)编写代码,初始化STM32的串口,并设置波特率等相关参数。 2. 在代码中使用串口通信函数将数据发送至ESP8266模块,例如通过AT指令控制ESP8266连接WiFi网络、发送HTTP请求等。 3. 通过串口接收函数获取ESP8266模块返回的数据,例如获取ESP8266的接收到的数据或者接收到的服务器返回的数据。 4. 解析接收到的数据,根据需要进行相应的处理和控制。 第三步,开发手机APP: 1. 在手机APP的开发环境(如Android Studio、Xcode等)中,通过相应的API实现与STM32F103C8T6进行通信的功能。 2. 使用手机APP网络模块,通过WiFi与ESP8266进行通信。例如,使用HTTP协议发送请求给ESP8266模块,获取ESP8266返回的数据。 3. 对接收到的数据进行处理和展示,可以根据需要将数据展示在手机APP的界面上。 总结: 通过STM32F103C8T6控制ESP8266手机APP通信的关键在于通过串口(UART)实现STM32ESP8266通信,同时在STM32的代码中使用AT指令控制ESP8266模块,实现与它的数据交互。而在手机APP的开发中,通过WiFi与ESP8266进行通信,并通过HTTP等协议发送请求给ESP8266模块,实现与STM32的数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 687
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值