1. 前言

    在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识。并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式:

  1. Station模式,也叫站点模式;
  2. Soft-Access Point模式,也叫Soft-AP模式,可以理解为WiFi热点模式;
  3. 以上两种的集合模式,Station 兼Soft-Access Point,也是Mesh NetWork的实现基础;

    任何基于ESP8266的WiFi功能开发,都是基于上面其中一种工作模式来进行开发。所以,它们是我们WiFi基础学习的重点。
    本篇章将讲解Soft-Ap模式。

2. 回顾Soft-AP模式 —— 谁想连上我

    AP是Access Point简称,也就是访问接入点,是网络的中心节点。一般家庭的无线路由器就是一个AP,众多站点(STA)加入到它所组成的无线网络,网络中的所有的通信都通过AP来转发完成。
    其实生活中,类Soft-Access Point模式还是应用非常广泛的。
    比如你去网购,你和商家就是STA,快递公司就是AP,负责把你下单的东西从商家传送到你手上。
    比如你在口碑买一个奶茶,你和奶茶店就是STA,跑腿平台就是AP,负责把你的奶茶从奶茶店送到你手上。
    老规矩,看看图结构:

    软AP也叫做Soft-AP,硬件部分是一块标准的无线网卡比如ESP8266,但其通过驱动程序使其提供与AP一样的信号转换、路由等功能。
    与传统AP相比,它的成本很低,功能上也能凑合。在基本功能上,Soft AP与AP并没有太大的差别,不过因为用软件来实现AP功能,SoftAP的接入能力和覆盖范围远不如AP。
    注意点:一般能同时连接到Soft-AP 的station的个数上线到8个,但是一般默认是4个。(至于为什么是4个,待会博主告诉你)

3. ESP8266WiFiAP库

    有了前面的理论基础,那么我们开始详解一下ESP8266 soft-AP模式的专用库——ESP8266WiFiAP库,大家使用的时候不需要

#include <ESP8266WiFiAP.h>

    只需要引入

#include<ESP8266WiFi.h>

    至于原因,敬请回顾 ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
    首先,对于AP类库的描述,可以拆分为三个部分:

  1. 第一部分方法,建立AP网络(Access Point,wifi热点);
  2. 第二部分方法,管理第一部分方法建立的连接;
  3. 第三部分方法,获取AP的信息,包括MAC地址、IP地址等;

    讲解之前,先浏览一下博主整理的百度脑图,以便有个整体认识:

3.1 第一部分方法——建立AP网络

3.1.1 softAP —— 启动免密码wifi网络

函数讲解:

/**
 * 建立一个AP热点
 * @param ssid              SSID账号 (max 63 char,最大63个字符).
 * @param passphrase        密码(对于WPA2加密类型最少8个字符,对于开放网络设置为NULL)
 * @param channel           WiFi 通道数字, 1 - 13.默认是1
 * @param ssid_hidden       WiFI是否需要隐藏 (0 = broadcast SSID, 1 = hide SSID),通过它设置别人是否能看到你的WiFi网络
 * @param max_connection    最大的同时连接数  1 - 4.当超过这个数,再多的station想连接也只能等待
 * @param bool 返回设置soft-AP的结果
 */
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);

应用实例:

//实例代码 这只是部分代码 不能直接使用
//开放网络(所谓开放网络也就是,不需要密码,只需要知道AP名字就可以了)
WiFi.softAP(ssid);

3.1.2 softAP —— 启动校验式wifi网络

函数说明:

/**
 * 建立一个AP热点
 * @param ssid              SSID账号 (max 63 char,最大63个字符).
 * @param passphrase        密码(对于WPA2加密类型最少8个字符,对于开放网络设置为NULL)
 * @param channel           WiFi 通道数字, 1 - 13.默认是1
 * @param ssid_hidden       WiFI是否需要隐藏 (0 = broadcast SSID, 1 = hide SSID),通过它设置别人是否能看到你的WiFi网络
 * @param max_connection    最大的同时连接数  1 - 4.当超过这个数,再多的station想连接也只能等待
 * @param bool 返回设置soft-AP的结果
 */
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);

应用实例:

//开放网络(所谓开放网络也就是,不需要密码,只需要知道AP名字就可以了)
WiFi.softAP(ssid);
//校验式网络(需要输入账号密码),通道为1,wifi不隐藏,最大连接数=4
WiFi.softAP(ssid, password);
//校验式网络(需要输入账号密码),通道为2,wifi隐藏,最大连接数=4
WiFi.softAP(ssid, password,2,1);

注意点:

  • SSID账号 最大63个字符;
  • 密码,对于WPA2加密类型最少8个字符,对于开放网络设置为NULL
  • 账号密码尽量都是英文字符;

3.1.3 softAPConfig —— 配置AP网络信息

函数说明:

/**
 * 配置AP信息
 * @param local_ip      AP ip地址
 * @param gateway       网关IP地址
 * @param subnet        子网掩码
 * @note soft-AP 建立的网络,默认的IP地址是192.168.4.1.
 */
bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

3.2 第二部分方法——管理网络

3.2.1 softAPgetStationNum —— 获取连接到AP上的station数目

函数说明:

/**
 * 获取连接到当前softAP的station或者client的数目
 * @return Stations 数目
 */
uint8_t softAPgetStationNum();

应用实例:

//实例代码 这只是部分代码 不能直接使用
Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum());

3.2.2 softAPdisconnect —— 关闭AP模式

函数说明:

/**
 * 关闭AP
 * @param wifioff disable mode? true会调用 WiFi.enableAP(false);
 * @return one value of wl_status_t enum
 */
bool softAPdisconnect(bool wifioff = false);

函数源码:

/**
 * Disconnect from the network (close AP)
 * @param wifioff disable mode?
 * @return one value of wl_status_t enum
 */
bool ESP8266WiFiAPClass::softAPdisconnect(bool wifioff) {
    bool ret;
    struct softap_config conf;
    /**清除最近配置的账号密码*/
    *conf.ssid = 0;
    *conf.password = 0;
    conf.authmode = AUTH_OPEN;
    ETS_UART_INTR_DISABLE();
    if(WiFi._persistent) {
        ret = wifi_softap_set_config(&conf);
    } else {
        ret = wifi_softap_set_config_current(&conf);
    }
    ETS_UART_INTR_ENABLE();

    if(!ret) {
        DEBUG_WIFI("[APdisconnect] set_config failed!\n");
    }

    if(ret && wifioff) {
        //禁止AP
        ret = WiFi.enableAP(false);
    }

    return ret;
}

3.3 第三部分方法——获取信息

3.3.1 softAPIP —— 获取AP的ip地址

函数说明:

/**
 * 获取softAP的ip地址
 * @return IPAddress softAP IP
 */
IPAddress softAPIP();

应用实例:

//实例代码 这只是部分代码 不能直接使用
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
//Soft-AP IP address = 192.168.4.1

3.3.2 softAPmacAddress —— 获取AP的mac地址

函数说明:

/**
 * 获取softAP MAC 地址.
 * @param mac   pointer to uint8_t array with length WL_MAC_ADDR_LENGTH
 * @return      pointer to uint8_t*
 */
uint8_t* softAPmacAddress(uint8_t* mac);

/**
 * 获取softAP MAC 地址.
 * @return String mac
 */
String softAPmacAddress(void);

应用实例:

//实例代码1 这只是部分代码 不能直接使用
uint8_t macAddr[6];
WiFi.softAPmacAddress(macAddr);
Serial.printf("MAC address = %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
//MAC address = 5e:cf:7f:8b:10:13

//实例代码2 这只是部分代码 不能直接使用
Serial.printf("MAC address = %s\n", WiFi.softAPmacAddress().c_str());

3.3.3 softAPSSID —— 获取AP的SSID

函数说明:

/**
 * Get the configured(Not-In-Flash) softAP SSID name.
 * @return String SSID.
 */
String softAPSSID() const;

3.3.4 softAPPSK —— 获取AP的PSK

函数说明:

/**
 * Get the configured(Not-In-Flash) softAP PSK or PASSWORD.
 * @return String psk.
 */
String softAPPSK() const;

4. 实例操作

    上面讲了一堆方法理论的东西,下面我们开始讲解操作实例,博主尽量都在代码中注释,直接看代码就好。

4.1 实例源码

/**
 * Demo:
 *    AP模式下,演示AP 函数方法的使用
 * @author 单片机菜鸟
 * @date 2019/09/02
 */
#include <ESP8266WiFi.h>

#define AP_SSID "AP_Test_博哥" //这里改成你的AP名字
#define AP_PSW  "12345678" //这里改成你的AP密码 8位以上
//以下三个定义为调试定义
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)    Serial.print(message)

IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);

void setup(){
  //设置串口波特率,以便打印信息
  DebugBegin(115200);
  //延时2s 为了演示效果
  delay(2000);
  DebugPrint("Setting soft-AP configuration ... ");
  //配置AP信息
  WiFi.mode(WIFI_AP);
  DebugPrintln(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
  //启动AP模式,并设置账号和密码
  DebugPrint("Setting soft-AP ... ");
  boolean result = WiFi.softAP(AP_SSID, AP_PSW);
  if(result){
    DebugPrintln("Ready");
    //输出 soft-ap ip地址
    DebugPrintln(String("Soft-AP IP address = ") + WiFi.softAPIP());
    //输出 soft-ap mac地址
    DebugPrintln(String("MAC address = ") + WiFi.softAPmacAddress().c_str());
  }else{
    DebugPrintln("Failed!");
  }
  DebugPrintln("Setup End");
}

void loop() {
  //不断打印当前的station个数
  DebugPrintln(String("Stations connected =") + WiFi.softAPgetStationNum());
  delay(3000);
}

4.2 实例结果

5. 总结

    本节主要是基于ESP8266WiFiAP库来讲解AP模式下的函数使用,并且给大家提供了一个实例,至于更多例子我就不继续举例,只能说引导大家入门使用。
STA篇和AP篇是基础,重中之重,所以请认真翻阅。

ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用的更多相关文章

  1. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用

    1. 前言     现在,通常,为了让手机连上一个WiFi热点,基本上都是打开手机设置里面的WiFi设置功能,然后会看到里面有个WiFi热点列表,然后选择你要的连接上. 基本上你只要打开手机连接WiF ...

  2. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  5. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  6. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. ESP8266开发之旅 网络篇⑩ UDP服务

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 SPIFFS文件系统

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用

    1. 前言     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...

随机推荐

  1. ASP.NET Core 3.0 : 二十五. TagHelper

    什么是TagHelper?这是ASP.NET Core 中新出现的一个名词,它的作用是使服务器端代码可以在Razor 文件中参与创建和呈现HTML 元素.(ASP.NET Core 系列目录) 一.概 ...

  2. Java面试-interrupt

    我们都知道,Java中停止一个线程不能用stop,因为stop会瞬间强行停止一个线程,且该线程持有的锁并不能释放.大家多习惯于用interrupt,那么使用它又有什么需要注意的呢? interrupt ...

  3. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介

    参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...

  4. 编程范式 --- 面向协议编程(Protocol Oriented Programming,简称POP)

    面向协议编程(Protocol Oriented Programming,简称POP) 是Swift的一种编程范式,Apple于2015年WWDC踢出 在Swift的标准库中,能见到大量POP的影子 ...

  5. 从二叉查找树到B+树中间的各种树

    高强度训练第十八天总结: 二叉查找树: 二叉查找树就是左结点小于根节点,右结点大于根节点的一种排序树,也叫二叉搜索树.也叫BST,英文Binary Sort Tree. 就长下面这吊样 查找步骤 在二 ...

  6. jedis指定数据库

    正常情况下,我们通过get或者set方法是从db0中取数据. 1.redis提供了 select命令,可以通过select index 这个指令,将数据库切换到index所在的那个数据库上 2.jed ...

  7. 深度解密Go语言之反射

    目录 什么是反射 为什么要用反射 反射是如何实现的 types 和 interface 反射的基本函数 反射的三大定律 反射相关函数的使用 代码样例 未导出成员 反射的实际应用 json 序列化 De ...

  8. .NET进阶篇-语言章-1-Generic泛型深入

    内容目录 一.概述二.泛型的好处三.泛型使用1.泛型方法2.泛型类.泛型接口四.泛型的功能1.泛型中的默认值2.约束3.协变逆变5.泛型委托4.泛型缓存五.总结 一.概述 泛型我们一定都用过,最常见的 ...

  9. Shiro集成SSM基于URL权限管理(一)

    学习了shiro之后,我们就可以说尝试把shiro加入ssm中,并做一套基于URL的权限管理. 其他的准备工作就不多说了,直接动手操作,看到效果再去理解. 表结构 执行如下,数据库名字可以自行修改,不 ...

  10. 整理一些大厂的开源平台及github,向他们看齐...

    有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...