ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266。但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式:
- Station模式;
- AP模式;
- 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的感觉。
众多文件,先不要纠结。
在这里,博主可以先告诉你几个知识点:
- 名字里面带Secure、SSL、TLS的,跟安全校验有关,俗称https(不要告诉我你没用过);
- 名字里面带Client的,跟客户端有关;
- 名字里面带Server的,跟服务端有关;
- 名字里面带8266的,你可以理解为针对ESP8266的代码封装;
- 名字里面带Scan的,跟wifi扫描有关;
- 名字里面带STA的,跟ESP8266 Station模式有关;
- 名字里面带AP的,跟ESP8266 AP模式有关;
- ESP8266WiFiType.h文件,主要是用来定义各种配置选项,比如wifi工作模式(WiFiMode),wifi睡眠模式(WiFiSleepType),wifi物理模式(WiFiPhyMode),wifi事件(WiFiEvent),wifi断开原因(WiFiDisconnectReason)等等;
- ESP8266WiFiGeneric(8266模块通用库),esp8266的sdk提供了一些功能,但在arduino wifi库中没有。包括处理程序来管理wi-fi事件,如连接,断开连接或获得ip,wi-fi模式的变化,管理模块睡眠模式的功能,以ip地址解析的hostName等;
- ESP8266WiFi库不仅仅局限于ESP8266WiFi.h和ESP8266WiFi.cpp这两个文件,只不过说它们是最核心的统一入口;
- WiFiUdp库,在ESP8266WiFi功能的基础上包装了UDP广播协议,适用于UDP通信,需要另外添加头文件;
记住这11点,基本上整个ESP8266WiFi库你就了解一半了,剩下就是看各个具体使用(引入使用一步到位 #include<ESP8266WiFi.h>,当然你也可以一个个include,so easy)。
#include<ESP8266WiFi.h>
2.2 ESP8266WiFi.h 和 ESP8266WiFi.cpp 详解
在这里,博主给读者讲解用得最多的两个文件,请看下图:
可以看到ESP8266WiFi类,继承了ESP8266WiFiGeneric、ESP8266WiFiSTA、ESP8266WiFiScan、ESP8266WiFiAP,同时引入了WiFiClient、WiFiServer、WiFiServerSecure、WiFiClientSecure等等,所谓集合了诸子百家的功能于一身。
- 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库的更多相关文章
- ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
1. 前言 在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...
- ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
1. 前言 在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识.并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: St ...
- ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
1. 前言 现在,通常,为了让手机连上一个WiFi热点,基本上都是打开手机设置里面的WiFi设置功能,然后会看到里面有个WiFi热点列表,然后选择你要的连接上. 基本上你只要打开手机连接WiF ...
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑩ UDP服务
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
随机推荐
- [Leetcode] 第334题 递增的三元子序列
一.题目描述 给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列. 数学表达式如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, ...
- filebeat使用multiline丢失数据问题
最近部署filebeat采集日志. 发现配置multiline后,日志偶尔会丢失数据,而且采集到的数据长度都不相同,所以和日志长度没有关系. 查阅filebeat官网后,找到了问题.filebeat有 ...
- supervisor模块学习使用
supervisor组件 supervisord supervisord是supervisor的服务端程序. 启动supervisor程序自身,启动supervisor管理的子进程,响应来自clien ...
- Flume系列二之案例实战
Flume案例实战 写在前面 通过前面一篇文章http://blog.csdn.net/liuge36/article/details/78589505的介绍我们已经知道flume到底是什么?flum ...
- mybatis-generator生成数据对象
mybatis-generator生成数据对象 步骤一:在pom文件中添加build的插件 <build> <finalName>doudou</finalName> ...
- Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统
一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...
- 读《深入理解Elasticsearch》点滴-查询二次评分
理解二次评分 二次评分是指重新计算查询返回文档中指定个数文档的得分,es会截取查询返回的前N个,并使用预定义的二次评分方法来重新计算他们的得分 小结 有时候,我们需要显示查询结果,并且使得页面上靠前文 ...
- 如何把安全证书导入到java中的cacerts证书库
每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载, 在该网页上右键 >> 属性 >> 点击"证书" >> 再 ...
- SUSE CaaS Platform 4 - 安装部署
SUSE CaaS Platform 相关文章 (1)SUSE CaaS Platform 4 - 简介 (2)SUSE CaaS Platform 4 - 安装部署 (3)SUSE CaaS Pla ...
- TP5安装workerman版本的坑
今天想在TP5上安装workerman,用于个人学习,然后悲剧的是,第一步就卡住了,根据手册里说的首先通过composer安装 composer require topthink/think-work ...