完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前已经发表过利用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[]="ATrn"; // 握手连接指令,返回"OK" u8 esp_cifsr[]="AT+CIFSRrn"; // 本机IP地址查询指令 u8 esp_cipsend[]="AT+CIPSEND=6rn"; // 设置发送数据长度 u8 esp_test[]="sunnyrn"; // 数据内容 u8 esp_rst[]="AT+RSTrn"; // 软件复位 u8 esp_cwmode[]="AT+CWMODE=3rn"; // 设置ESP8266的工作模式3 AP+Station,返回"OK"或者"no change" u8 esp_cwsap[]="AT+CWSAP="ESP8266_TEST","1234567890",1,3rn";//设置WIFI的名称及密码 u8 esp_cipmux[]="AT+CIPMUX=1rn"; //打开多连接 u8 esp_cipserver[]="AT+CIPSERVER=1,8080rn"; //建立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 rn"); delay_ms(600); } Uart1SendStr("OK,set mode as AP+Station with ESP8266! rn"); 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 rn"); delay_ms(600); } Uart1SendStr("OK,set cwsap success! rn"); 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 rn"); delay_ms(600); } Uart1SendStr("OK,set cipmux success! rn"); 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 rn"); delay_ms(600); } Uart1SendStr("OK,set server success! rn"); 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!rn"); } else if(Data_compare("LEDG")) //关闭板上了的led { led(0); memset(RX_buffer, 0, tbuf);//清缓存数据 RX_num=0; //接收计数变量清0 Uart1SendStr("led is close!rn"); } } } } } } 这里主要用到有如下几个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指令集 代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 01:30 , Processed in 0.671167 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号