【毕设调试二】WiFi模块的AP模式与App Inventor

这篇具有很好参考价值的文章主要介绍了【毕设调试二】WiFi模块的AP模式与App Inventor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:在上一篇中我们简单的完成了WIFI模块的STA模式,在此篇中我们将梳理WiFi的AP模式

AP模式:热点模式,是通过设置WiFi模块来产生一个热点,然后通过连接本热点,来达到在手机   上发送控制信息到单片机,可以使用于app控制单片机类的项目


前期准备:

提示:需要用到上一章所配置的串口二和串口三的代码配置和esp8266.h、esp8266.c这两个文件里面的函数变量配置,STM32F103C8T6主控,以及WiFi模块。


AP配置:

在这次的AP配置中,我们需要加入两个代码文件,先上代码。

ap.c

#include "ap.h"
#include "usart.h"
#include "esp8266.h"
#include "delay.h"
#include "stdio.h"
#include "string.h"
#include "stm32f10x.h"

/*
 * 函数名:ESP8266_Inquire_ApIp
 * 描述  :获取 F-ESP8266 的 AP IP
 * 输入  :pApIp,存放 AP IP 的数组的首地址
 *         ucArrayLength,存放 AP IP 的数组的长度
 * 返回  : 0,获取失败
 *         1,获取成功
 * 调用  :被外部调用
 */
uint8_t ESP8266_Inquire_ApIp ( char * pApIp, uint8_t ucArrayLength )
{
	char uc;
	
	char * pCh;
	
    ESP8266_Send_AT_Cmd ( "AT+CIFSR", "OK", 0, 500 );
	
	pCh = strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "APIP,\"" );
	
	if ( pCh )
		pCh += 6;
	
	else
		return 0;
	
	for ( uc = 0; uc < ucArrayLength; uc ++ )
	{
		pApIp [ uc ] = * ( pCh + uc);
		
		if ( pApIp [ uc ] == '\"' )
		{
			pApIp [ uc ] = '\0';
			break;
		}
		
	}
	
	return 1;
}


/*
 * 函数名:ESP8266_StartOrShutServer
 * 描述  :WF-ESP8266模块开启或关闭服务器模式
 * 输入  :enumMode,开启/关闭
 *       :pPortNum,服务器端口号字符串
 *       :pTimeOver,服务器超时时间字符串,单位:秒
 * 返回  : 1,操作成功
 *         0,操作失败
 * 调用  :被外部调用
 */
bool ESP8266_StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver )
{
	char cCmd1 [120], cCmd2 [120];

	if ( enumMode )
	{
		sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pPortNum );
		
		sprintf ( cCmd2, "AT+CIPSTO=%s", pTimeOver );

		return ( ESP8266_Send_AT_Cmd ( cCmd1, "OK", 0, 500 ) &&
						 ESP8266_Send_AT_Cmd ( cCmd2, "OK", 0, 500 ) );
	}
	
	else
	{
		sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pPortNum );

		return ESP8266_Send_AT_Cmd ( cCmd1, "OK", 0, 500 );
	}
	
}
/*
 * 函数名:ESP8266_CIPAP
 * 描述  :设置模块的 AP IP
 * 输入  :pApIp,模块的 AP IP
 * 返回  : 1,设置成功
 *         0,设置失败
 * 调用  :被外部调用
 */
uint8_t ESP8266_CIPAP ( char * pApIp )
{
	char cCmd [ 30 ];
		
	
	sprintf ( cCmd, "AT+CIPAP=\"%s\"", pApIp );
	
    if ( ESP8266_Send_AT_Cmd ( cCmd, "OK", 0, 5000 ) )
		return 1;
	else 
		return 0;

}

/*
 * 函数名:ESP8266_BuildAP
 * 描述  :WF-ESP8266模块创建WiFi热点
 * 输入  :pSSID,WiFi名称字符串
 *       :pPassWord,WiFi密码字符串
 *       :enunPsdMode,WiFi加密方式代号字符串
 * 返回  : 1,创建成功
 *         0,创建失败
 * 调用  :被外部调用
 */
bool ESP8266_BuildAP ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode )
{
	char cCmd [120];

	sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pSSID, pPassWord, enunPsdMode );
	
	return ESP8266_Send_AT_Cmd ( cCmd, "OK", 0, 1000 );
	
}


char cStr [ 100 ] = { 0 };

void ESP8266_AP_TCPClient_Test(void)
{
	  	
	ESP8266_AT_Test();
    printf("正在设置 ESP8266\r\n");
    ESP8266_Net_Mode_Choose(AP);
	while ( ! ESP8266_CIPAP ( macUser_ESP8266_TcpServer_IP ) );
	ESP8266_Enable_MultipleId ( ENABLE );
    while ( ! ESP8266_BuildAP ( macUser_ESP8266_BulitApSsid, macUser_ESP8266_BulitApPwd, macUser_ESP8266_BulitApEcn ) );
	while ( !	ESP8266_StartOrShutServer ( ENABLE, macUser_ESP8266_TcpServer_Port, macUser_ESP8266_TcpServer_OverTime ) );
	ESP8266_Inquire_ApIp ( cStr, 20 );
    printf("\r\nESP8266的AP模式设置完成");
    connect_flag = 2;
    GPIO_SetBits(GPIOB,GPIO_Pin_0);
    printf ( "\r\nWIFI名字是:%s,无需连接权限\r\nWIFI的IP是:%s,WIFI的端口号是:%s\r\n最多可允许5台设备连接\r\n",
              macUser_ESP8266_BulitApSsid, cStr, macUser_ESP8266_TcpServer_Port );
		
    ESP8266_Fram_Record_Struct .InfBit .FramLength = 0;
	ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;	
	 // USART_Cmd(USART3, DISABLE);//关闭打印测试端口,避免占用资源
	delay_ms(1000);
	GPIO_ResetBits(GPIOB,GPIO_Pin_0);	
	  
}

ap.h

#ifndef  __AP_H
#define	 __AP_H

#include "stm32f10x.h"
#include <stdbool.h>
#include "tcp.h"

/********************************** 用户需要设置的参数**********************************/
#define   macUser_ESP8266_BulitApSsid         "Alan"      //要建立的热点的名称
#define   macUser_ESP8266_BulitApEcn           OPEN               //要建立的热点的加密方式
#define   macUser_ESP8266_BulitApPwd           "wildfire"         //要建立的热点的密钥

#define   macUser_ESP8266_TcpServer_IP         "192.168.43.77"      //服务器开启的IP地址
#define   macUser_ESP8266_TcpServer_Port       "8888"             //服务器开启的端口   

#define   macUser_ESP8266_TcpServer_OverTime   "1800"             //服务器超时时间(单位:秒)

typedef enum{
	OPEN = 0,
	WEP = 1,
	WPA_PSK = 2,
	WPA2_PSK = 3,
	WPA_WPA2_PSK = 4,
} ENUM_AP_PsdMode_TypeDef;

extern char cCh;
extern char * pCh, * pCh1;
extern char cStr [ 100 ];

u8  ESP8266_CIPAP  ( char * pApIp );
bool     ESP8266_BuildAP  ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode );
bool     ESP8266_StartOrShutServer  ( FunctionalState enumMode, char * pPortNum, char * pTimeOver );
u8  ESP8266_Inquire_ApIp  ( char * pApIp, uint8_t ucArrayLength );
/********************************** 测试函数声明 ***************************************/
void ESP8266_AP_TCPClient_Test(void);



#endif

我们需要配置AP模式,在主函数进入while(1)之前调用ap.c里面的

void ESP8266_AP_TCPClient_Test(void)   函数即可。

(提示一下:在上一篇中我们要想配置STA模式,直接调用tcp.c里面

void ESP8266_STA_TCPClient_Test(void) 函数即可,上一篇忘记说了。

函数配置说明:

1. ESP8266_AT_Test(); 与上一篇说讲,同样的功能,初始化成wifi的出厂模式

2. ESP8266_Net_Mode_Choose(AP);该函数用于选择模式,这里我们选择STA模式。

    AT+CWMODE=2,WiFi模块的回复是“OK”。(1:STA,2:AP,3:STA+AP)

wifi模块ap模式,单片机,stm32,嵌入式硬件

 3.while ( ! ESP8266_CIPAP ( macUser_ESP8266_TcpServer_IP ) );这个函数是把WiFi模块设置成ap模式后,需要把我们的wifi配置成一个类似于主服务器的东西,用于app这种从服务器的东西连接的,这里就要开始配置一个IP地址,这个IP地址是由我们创建的,可以任意更改,在ap.h文件里面。

发送:AT+CIPAP=\"%s\",%s 存放我们设置的IP地址,WiFi模块的回复是“OK”。

wifi模块ap模式,单片机,stm32,嵌入式硬件

4. ESP8266_Enable_MultipleId ( ENABLE );这一步是设置多人连接,这一次我们配置多人可以连接,但WiFi模块自身会有限制,最多只能5人

发送指令 AT+CIPMUX= (1或者0),WiFi模块的回复是“OK”。wifi模块ap模式,单片机,stm32,嵌入式硬件

5.  while ( ! ESP8266_BuildAP ( macUser_ESP8266_BulitApSsid, macUser_ESP8266_BulitApPwd, macUser_ESP8266_BulitApEcn ) );

这一步呢,分别对应是配置我们热点的名字、密钥(密码)、加密方式。

虽然我设置了密码,但是我选择的加密方式是0(加密方式只有0和1),所以默认就是开放,不需要密码可以直接连接热点

发送的形式:AT+CWSAP=\"%s\",\"%s\",1,%d    wifi模块ap模式,单片机,stm32,嵌入式硬件

第一个%s:热点名字;

第二个%s:热点密码;

1    :信道号(必须要有,具体解释可在安信可官网查看手册);

%d :加密方式;

 6. while ( !    ESP8266_StartOrShutServer ( ENABLE, macUser_ESP8266_TcpServer_Port, macUser_ESP8266_TcpServer_OverTime ) );

这一步是配置端口号和响应时间的,端口号也是可以更改的。

ENABLE :  只是单单作为一个判断分支

配置端口号:AT+CIPSERVER=%d,%s,%d:1,%s:端口号

这条指令是配置一个服务器,服务器的配置除了有IP地址外,也要有端口号,两者缺一不可!!

配置响应时间:AT+CIPSTO=%s  %s:响应时间

wifi模块ap模式,单片机,stm32,嵌入式硬件

完成到上面这一步,热点已经配置出来了!!

然后接下来的函数:ESP8266_Inquire_ApIp ( cStr, 20 );,用来查询一下IP地址和物理地址

wifi模块ap模式,单片机,stm32,嵌入式硬件(这里已经不需要配置了,就是执行下查询功能)

那么最后我们把我们需要的信息打印出来:wifi模块ap模式,单片机,stm32,嵌入式硬件

在手机上也可以看到这一个热点的存在,我们也是可以连接的(下面第一张图),但是这个热点是不可以连接互联网了,接下来就是使用一个app连接对应的IP地址和端口号(我们必须要连接上这个热点后,我们的app才可以连接上单片机(下面第二张图)),然后串口助手会打印出当前连接用户,如果我们不自行断开,wifi模组会一直默认记录我们连接的(下面第三张图),因为我是直接退出APP,没有断开,然后等我第二次登陆时,就会显示有第二个用户登陆了!!

wifi模块ap模式,单片机,stm32,嵌入式硬件wifi模块ap模式,单片机,stm32,嵌入式硬件wifi模块ap模式,单片机,stm32,嵌入式硬件

看下图(我现在是第三个用户了,因为我也是没有断开连接),如果我断开了会显示"CLOSE",等我再次登录时,我依旧是第三个用户,就不会变成第四个用户了

 wifi模块ap模式,单片机,stm32,嵌入式硬件wifi模块ap模式,单片机,stm32,嵌入式硬件

 由于我的app已经是配置好的,所有我们只需要连上就可以向单片机发送数据,然后单片机也可以接收到这些数据,然后进行解码,我们再在单片机里面去处理对应的解码!!

解码说明:大家可以看串口二的中断处理,有两步的处理。

一步是用来存储接收到的数据,放在一个数组:

if(ESP8266_Fram_Record_Struct .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) )
        {
            //留最后一位做结束位
            ESP8266_Fram_Record_Struct .Data_RX_BUF[ ESP8266_Fram_Record_Struct .InfBit .FramLength ++ ]  = ucCh;   
        }

 一步是用来引出一个标志位,告诉单片机我接收完了:

ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 1;

 那么我们接下来就可以做处理了,这段处理我是自己写的,我梳理一下大概步骤,就是使用strstr函数做对比,查看数组里面是否有我们要处理函数,每一次处理完都重置一下,当然如果要提取数据的话,我们也可以用指针从数组里面提取出来,再做处理。(到这里为止,单片机部分的思路就基本疏通完了,接下来就是app的简易制作)


 if ( ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag == 1 )
  {
    ESP8266_Fram_Record_Struct .Data_RX_BUF [ ESP8266_Fram_Record_Struct .InfBit.FramLength] = '\0'; 
    if(strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, "soil_1" )) printf("定时\r\n");

    ESP8266_Fram_Record_Struct .InfBit .FramLength = 0; 
    ESP8266_Fram_Record_Struct .InfBit .FramFinishFlag = 0;

    USART_ITConfig (USART2, USART_IT_RXNE, ENABLE ); //使能串口接收中断
}

 文章来源地址https://www.toymoban.com/news/detail-675451.html


【App制作】

App Inventor网站:http://ai2.17coding.net/?locale=zh_CN

**因为我不是计算机专业的,对于使用java来制作app也只是自学到界面设计的部分,所以为了能实现的通信功能,我便使用这个可视化网站来制作,有能力的同学,也可以尝试自己制作app**

先看一下,这是我已经设计好的界面,在界面的设计部分,大家可以去观看哔哩哔哩老巫婆App Inventor趣味编程,我在这里主要讲一下,我调试与单片通信的步骤:wifi模块ap模式,单片机,stm32,嵌入式硬件

 ①我们需要用到一个插件:ClientSocketAI2Ext,它提供给我们一个是连接服务器的功能。

wifi模块ap模式,单片机,stm32,嵌入式硬件

这就是基本的设置,这个地方的话主要就是这四行:

wifi模块ap模式,单片机,stm32,嵌入式硬件

我们只需要在这个插件里面调用四个函数,然后配置完成就可以连接了。

这是这个插件所带的函数:

wifi模块ap模式,单片机,stm32,嵌入式硬件

 对于这个app这些配置,大家可能需要具体上手去操作,才能自己理解的通,我也是尝试了好久。

今天的分享也就到这里了,下一章,我开始尝试梳理我MQTT的调试,我是用的云服务器的ONENET的。本文属于小白创作,如有错误,请各位大神指出,如有需要同学需要到插件或者不明白的,可以留言我。

 

 

 

 

 

 

 

 

到了这里,关于【毕设调试二】WiFi模块的AP模式与App Inventor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RK3288 Android5.1添加WiFi&BT模块AP6212

    CPU:RK3288 系统:Android 5.1 注:RK3288系统,目前 Android 5.0 Kernel 3.10 SDK 支持 Braodcom,Realtek 等 WiFi BT 模块 各个 WiFi BT 模块已经做到动态兼容,Android 上层不再需要像以前一样进 行特定宏的配置 此文是手动添加AP6212A的例程。 1、在设备树中修改 wifi 芯片为 ap6212a(找到自己对应的

    2024年02月07日
    浏览(35)
  • ESP8266模块双模式(AP+STA)共存同时与电脑及手机进行UDP通信

    1.准备工作: 硬件:  ESP8266模块             USB连接线: 连接ESP8266模块到电脑 如果电脑没有USB接口,准备一个USB HUB: USB HUB 连接电脑Type-C接口,ESP8266模块连接USB HUB  软件: 安装Arduino IDE 2.2.1 在Arduino IDE中安装esp8266开发板(USB没识别芯片,要安装对应操作系统CH2340或者CP2102驱动) 系统

    2024年01月23日
    浏览(47)
  • 【毕设调试一】WiFi模块esp8266的调试

    提示 : 主控芯片STM32F103C8T6,与WiFi通信串口为串口二,打印串口为串口三(不使用串口一是当时设计时,方便pcb走线) 说明 : 因为我是使用PCB画板的方式来走线的,并不是按模块来拼接的,走线的时候需要注意WiFi模块和主控芯片串口的连接(RX-TX),如下图所示,这个是可

    2024年02月05日
    浏览(43)
  • WIFI设备配网之微信小程序开发AP配网

    1. 介绍 传统的一键配网指的是smartconfig、airkiss这些通过已经连接的无线路由器发送广播给设备,在使用过程中兼容性差、不稳定, 很多路由器不支持udp广播 如果广播通过5G频段广播,设备无法收到 路由器名称冲突会导致连接错误路由器等问题 这两个协议都封装的比较多,不

    2024年02月09日
    浏览(28)
  • 全屋WiFi方案:Mesh路由器组网和AC+AP

    参考自:《什么是AC+AP》 《全屋WiFi方案:AC+AP》 《什么是mesh?什么是ac+ap?家里网络信号不好怎么办?》 《家庭无线漫游组网方案——MESH篇》 全屋WiFi方案有两种:Mesh路由器组网和AC+AP。 今天给大家讲讲什么是mesh?什么是ac+ap?家里网络信号不好怎么办?怎么选择wifi组网模

    2024年02月09日
    浏览(48)
  • 第三十六讲:神州无线AP胖AP模式配置与管理

          胖AP(Fat AP)配置一个开放式WLAN非常方便,需要完成的操作包括有线和无线两部分的配置。有线部分即ethernet接口的配置,保证AP能够接入Internet,无线部分的配置包括关联WLAN与VLAN,广播SSID,启用VAP,若无其他DHCP服务器的话,AP还需要启用DHCP为无线客户下发IP地址。 配置要

    2024年02月05日
    浏览(45)
  • 基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

    ESP32 开启 WiFi AP 模式创建 WiFi 热点 定义 IP 地址 创建 TCP Server 使用手机连接 ESP32 创建的 AP 热点 查看 UART0 日志打印,获取 TCP Server 的 IP 地址 使用手机端 TCP 调试 APP( 网络助手 ) 与 ESP32 创建的 TCP Server 建立连接

    2024年02月12日
    浏览(42)
  • [Android][WIFI]手机作AP,关闭移动网络后,STA端断开重连问题分析

    测试平台 Android版本:Android P(9.0) 复现步骤 准备两台移动设备,一台作为AP,一台作为STA; 作为AP的设备具备移动网络上网,热点网络分享能力; 打开作为AP的设备的移动网络流量开关,再打开热点; 作为STA的设备接入该AP,并等待其通路判断完成,确保Internet网络访问能力正

    2024年02月10日
    浏览(66)
  • ESP8266_AP模式、TCP连接

    ESP8266设置成AP模式,笔记本连上此WLAN; 作为TCP服务器端,配置好本地端口8266,等待客户端建立TCP连接(并设置60s keep alive); 侦听到客户端发来的TCP连接建立请求,如果能够成功建立TCP连接,则进入等待数据的阶段; 收到TCP数据,向客户端发送响应; 如果60s之内没有收到

    2024年02月07日
    浏览(40)
  • 51系列单片机---ESP-01S无线WiFi模块的开发(路由服务器模式)

    记录一下基于STC89C52RC单片机对ESP-01S无线WiFi模块的开发(路由服务器模式)。 ESP-01S模块的路由服务器模式和设备模式开发思路相似,开发之前对ESP-01S模块的测试和波特率修改是一样的,差别只在于AT指令的不同。 记录一下代码编写的逻辑和过程: 1、用到的AT指令(发送AT指

    2024年04月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包