Wifi——AP模式简介(手机app控制例程)

举报
i小龙 发表于 2018/12/29 23:16:49 2018/12/29
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。