在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266。但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式:

  1. Station模式;
  2. AP模式;
  3. AP兼Station模式;

    重点来了,8266编程开发,都是基于以上三种模式中的一种模式来进行开发。所以,开发ESP8266的时候,需要首先确定工作模式。

1. ESP8266工作模式

1.1 Station模式 —— 我想连上谁

    Station(STA)模式用于将ESP8266模块连接到由接入点(Access Point,理解为热点)建立的Wi-Fi网络。请查看下图:

    Station模式有几个特点,以方便管理的Wi-Fi连接。

  • 在连接丢失的情况下,一旦WiFi再次可用,ESP8266将自动重新连接到最近使用的接入点(Access Point,理解为热点),往往这一点容易出问题(有时路由器重启了,会发现ESP8266一直连接不上路由)。
  • 模块重启也会发生同样的情况。
  • 因为ESP8266将最后使用的接入点认证信息(ssid账号,psw密码)保存到Flash(非易失性)存储器中。
  • 如果在Arduino IDE修改代码,但代码不更改Wi-Fi工作模式或接入点认证信息(ssid账号,psw密码),则ESP8266使用保存在Flash上数据来重新连接。

1.2 AP模式(soft-AP)—— 谁想连上我

    AP(Access Point)模式可以理解为Station模式的相反面,用于将ESP8266模块作为接入点建立Wi-Fi网络,供其他Station模式的模块连接进来。请查看下图:

  • AP模式可以用于Station模式的模块之间交互的中转站(让所有模块处于同一个WiFi网络中);
  • 在将ESP8266模块(Station模式)连接到wifi之前,一般我们是不知道当前wifi网络的ssid账号和psw密码,那么我们怎么告诉ESP8266呢?
    在AP模式下,我们可以使用手机或者笔记本连接到它,然后我们就可以给ESP8266模块发送连接网络的ssid和psw。一旦完成,ESP8266自动切换到Station 模式,就可以连接到目标wifi接入点。

1.3 AP兼Station模式

    该模式是以上两种模式的整合。请查看下图:

1.4 核心点

    牢牢记住,WiFi有三种工作模式:Station模式、AP模式、AP兼Station模式,这样就足够了。每个ESP8266模块肯定工作于这三种模式之一,当然除非你没用WIFI功能,把它当做arduino开发版用。

2. ESP8266WiFi库

    前面我们总体上介绍了ESP8266工作模式,同时我们也了解到 Arduino IDE上主要通过 Arduino Core For ESP8266这个核心库来开发ESP8266功能,并且也谈论到这个核心库其实包含了众多小核心库,包括ESP8266WiFi、ESP8266WebServer、ESP8266HTTPClient、ESP8266mDNS等等。虽然我们实际开发中并不会说全部库都会使用起来,但是至少需要形成一个意识,那就是:Arduino core for ESP8266库,在8266 sdk基础上给我们提供了很多操作方式。
    其中,博主觉得最核心最重要的一个库就是ESP8266WiFi(后面我们代码中你会经常看到 #inclue<ESP8266WiFi.h>,那时你就应该知道这个库具体是用来做什么的)

2.1 ESP8266WiFi库源码结构

    如果你是按照博主之前说的方式去clone Arduino core for 8266的代码的话,然后把libraries目录导入到源码查看IDE(这里我推荐大家安装webstorm)的话,然后打开ESP8266WiFi那个目录,你就会发现如下代码结构:

    没错,你会发现很多成双成对的h头文件和cpp源文件,有点组cp的感觉。

    众多文件,先不要纠结。
    在这里,博主可以先告诉你几个知识点:

  1. 名字里面带Secure、SSL、TLS的,跟安全校验有关,俗称https(不要告诉我你没用过);
  2. 名字里面带Client的,跟客户端有关;
  3. 名字里面带Server的,跟服务端有关;
  4. 名字里面带8266的,你可以理解为针对ESP8266的代码封装;
  5. 名字里面带Scan的,跟wifi扫描有关;
  6. 名字里面带STA的,跟ESP8266 Station模式有关;
  7. 名字里面带AP的,跟ESP8266 AP模式有关;
  8. ESP8266WiFiType.h文件,主要是用来定义各种配置选项,比如wifi工作模式(WiFiMode),wifi睡眠模式(WiFiSleepType),wifi物理模式(WiFiPhyMode),wifi事件(WiFiEvent),wifi断开原因(WiFiDisconnectReason)等等;
  9. ESP8266WiFiGeneric(8266模块通用库),esp8266的sdk提供了一些功能,但在arduino wifi库中没有。包括处理程序来管理wi-fi事件,如连接,断开连接或获得ip,wi-fi模式的变化,管理模块睡眠模式的功能,以ip地址解析的hostName等;
  10. ESP8266WiFi库不仅仅局限于ESP8266WiFi.h和ESP8266WiFi.cpp这两个文件,只不过说它们是最核心的统一入口;
  11. WiFiUdp库,在ESP8266WiFi功能的基础上包装了UDP广播协议,适用于UDP通信,需要另外添加头文件;

    记住这11点,基本上整个ESP8266WiFi库你就了解一半了,剩下就是看各个具体使用(引入使用一步到位 #include<ESP8266WiFi.h>,当然你也可以一个个include,so easy)。

#include<ESP8266WiFi.h>

2.2 ESP8266WiFi.h 和 ESP8266WiFi.cpp 详解

    在这里,博主给读者讲解用得最多的两个文件,请看下图:

    可以看到ESP8266WiFi类,继承了ESP8266WiFiGenericESP8266WiFiSTAESP8266WiFiScanESP8266WiFiAP,同时引入了WiFiClientWiFiServerWiFiServerSecureWiFiClientSecure等等,所谓集合了诸子百家的功能于一身。

  • ESP8266WiFiGeneric:8266模块通用库,包括处理程序来管理wi-fi事件,如连接,断开连接或获得ip,wi-fi模式的变化,管理模块睡眠模式的功能,以ip地址解析的hostName等;
  • ESP8266WiFiSTA:Station模式下使用的代码功能;
  • ESP8266WiFiScan:wifi扫描功能(处于Station模式);
  • ESP8266WiFiAP:wifi网络接入点功能(AP热点);
  • WiFiClient:tcp 客户端(发送端);
  • WiFiServer:tcp 服务端(接收端);

    为了让大家更加清晰了解到各个具体内容,博主也花了点时间做了一个初略的百度脑图,以供大家参考:

    脑图相对来说比较大,烦请读者自行下载保存下来放大查看。本篇不详细介绍每个函数怎么用,等到后面用到的时候,博主再陆续给大家介绍一下用法。

3. 总结

    这节要记住的重点是,核心库ESP8266WiFi到底有什么功能可以提供给我们使用。理解它是后续开发的基本。

ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库的更多相关文章

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

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

  2. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. hibernate集成ehcahe进行缓存管理

    ehcace是现在非常流行的缓存框架,有轻量.灵活.可扩展.支持集群/分布式等优点. 在项目中,使用ehcace可以对数据进行缓存(一般使用.基于注解.基于aop),使用filter可以对页面进行缓存 ...

  2. mongodb 获取自增数

    mongodb db.getCollection('user').findAndModify({update:{$inc:{'level':1}},query:{"name":&q ...

  3. 基于Docker搭建大数据集群(三)Hadoop部署

    主要内容 Hadoop安装 前提 zookeeper正常使用 JAVA_HOME环境变量 安装包 微云下载 | tar包目录下 Hadoop 2.7.7 角色划分 角色分配 NN DN SNN clu ...

  4. 浅谈JavaScript的闭包原理

    在一般的教程里,都谈到子作用域可以访问到父级作用域,进而访问到父级作用域中的变量,具体是如何实现的,就不得不提及到函数堆栈和执行上下文. 举个例子,一个简单的闭包:   首先,我们可以知道,examp ...

  5. Maven 梳理 -多模块 vs 继承

    Maven提高篇系列之(一)——多模块 vs 继承   这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plu ...

  6. springboot 2.1.3.RELEASE版本解析.properties文件配置

    1.有时为了管理一些特定的配置文件,会考虑单独放在一个配置文件中,如redis.properties: #Matser的ip地址 redis.host=192.168.5.234 #端口号 redis ...

  7. PSSH工具

    目录 PSSH工具 参考 PSSH工具的介绍 PSSH工具的使用 PSSH工具

  8. 基于 HTML5 WebGL 的垃圾分类系统

    前言 垃圾分类,一般是指按一定规定或标准将垃圾分类储存.分类投放和分类搬运,从而转变成公共资源的一系列活动的总称.分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用.垃圾在分类储存阶段属于公众的私 ...

  9. _self.$scopedSlots.default is not a function报错

    问题: 当同一页面有elementUI的多个table表格时,如果用到v-if来动态展示表格,切换时出现如下报错: 原因: 是因为表格是element-ui通过循环产生的,而vue在dom重新渲染时有 ...

  10. uC/OS-III 任务详解(四)

    uC/OS系统的任务一般都放在最开始介绍,我放在第四章主要是对模糊的概念作清晰的讲解. 从用户的角度来看,uC/OS-III 中的任务可以分为5 种状态,分别是休眠态.就绪态.运行态.挂起态和中断态, ...