Wifi——AP模式简介(手机app控制例程)
【摘要】 ESP8266模块AP模式例程解析。
0. 本文参考例程:野火物联
例程和APP 只支持手机跟WIFI 模块通信,是属于局域网的点对点通信,没有实现公网通信功能。
1. Wifi模块ESP8266简介
ESP8266 是串口型WIFI,速度比较低,不能用来传输图像或者视频这些大容量的数据,主要应用于数据量传输比较少的场合,比如温湿度信息,一些传感器的开关量等。
ESP8266与单片机串口连接。一方面单片机可以通过串口发送AT命令给ESP8266,ESP8266会返回给单片机一个返回值;另一方面,当手机与ESP8266连接后,APP通过Wifi发送命令给ESP8266模块,ESP8266接收并通过串口将命令发送至单片机。
2. Wifi的两种模式
AP模式: Access Point,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接。
Sta模式: Station, 类似于无线终端,sta本身并不接受无线的接入,它可以连接到AP,一般无线网卡即工作在该模式。
3. 例程分析
例程中的main()函数首先对各个硬件进行初始化,其中我们关注的是ESP8266模块的初始化函数ESP8266_Init()。ESP8266_Init()函数初始化了所有与ESP8266模块相连引脚的初始化,包括:uart_tx,uart_rx,使能引脚CH,复位引脚RST。
void ESP8266_Init ( void )
{
ESP8266_GPIO_Config ();
ESP8266_USART_Config ();
macESP8266_RST_HIGH_LEVEL();
macESP8266_CH_DISABLE();
}
然后,进入函数体ESP8266_ApTcpClient_UnvarnishTest()中,并在其中无限循环,大致工作如下
macESP8266_CH_ENABLE();
使能ESP8266模块。
ESP8266_AT_Test ();
发送AT命令查看ESP8266模块是否正常。
ESP8266_Net_Mode_Choose ( AP );
设置模块为AP模式。
ESP8266_CIPAP ( macUser_ESP8266_TcpServer_IP );
设置模块的IP地址。
ESP8266_BuildAP ( macUser_ESP8266_BulitApSsid, macUser_ESP8266_BulitApPwd, macUser_ESP8266_BulitApEcn );
ESP8266模块创建WiFi热点,参数分别为Wifi名称,Wifi密码,以及Wifi的加密方式。
ESP8266_Enable_MultipleId ( ENABLE );
启动多连接。
ESP8266_StartOrShutServer ( ENABLE, macUser_ESP8266_TcpServer_Port, macUser_ESP8266_TcpServer_OverTime );
开启服务,并设定开启的端口和超时时间。
ESP8266_Inquire_ApIp ( cStr, 20 );
获取模块的AP IP。
while(1){...};
上面单片机通过发送AT命令将ESP8266设置完毕后,将等待ESP8266模块接收手机APP发送来的命令,单片机一旦接收到来自ESP8266命令,将触发串口接受中断,并根据命令做出相应的开关量的控制,比如LED或蜂鸣器等,之后发送状态信息至ESP8266,进而发送至手机APP端。代码的具体解释如下:
while(1)
{
if(收到ESP8266发来的串口命令)
{
禁用串口接收中断;
获取命令;
if(控制LED的命令){...}
else if(控制蜂鸣器的命令){...}
else if(获取全部信息命令){...}
if(有IPD字符串){获取下发命令设备ID,更新返回信息给设备}
使能串口接收中断;
}
}
4. sprintf函数
在历程中一直出现sprintf函数,我以为是打印函数,可是一直没从串口读取到信息,百度后才知道,原来:sprintf与printf函数的区别,二者功能相似,但是sprintf函数打印到字符串中(将数值转换成对应字符串形式,就是变换成ASCALL码),而printf函数打印输出到屏幕上。在单片机中将数值转换成字符串是sprintf函数最广的用途。
举例:
在单片机程序中将156.23456转换成ascall码,有如下步骤:
1. 令一个浮点数变量temp=156.23456;
2. 写函数sprintf(char *buffer,”%9.5f”,temp),即可将数存在buffer数组中
此例注:格式字符%m.nf中m代表输出数值整体位数(包含小数点,占一位),n是精度(小数点后保留n位
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)