转载
博哥零基础教你玩转ESP8266(一) 重识ESP8266
博哥零基础教你玩转ESP8266(二) 认识一下Arduino core for ESP8266
博哥零基础教你玩转ESP8266(三) 详解ESP8266 工作模式
博哥零基础教你玩转ESP8266(四) 认识一下ESP8266WiFi库
博哥零基础教你玩转ESP8266(五) ESP8266开发硬件搭建
博哥零基础教你玩转ESP8266(六) STA连接 —— 我想连上你
博哥零基础教你玩转ESP8266(七) Soft AP —— 谁想连上我
博哥零基础教你玩转ESP8266(八) Scan —— 扫描周边网络
博哥零基础教你玩转ESP8266(九) STA + Soft-AP联合出品
博哥零基础教你玩转ESP8266(十) SmartConfig —配置网路
博哥零基础教你玩转ESP8266(十一) Tcp client
博哥零基础教你玩转ESP8266(十二) Tcp Server
博哥零基础教你玩转ESP8266(十三) ESP8266WiFiGeneric库
博哥零基础教你玩转ESP8266(十四) ESP8266HTTPClient 连接世界
博哥零基础教你玩转ESP8266(十五) ESP8266WebServer 服务端
一、前言
之前楼主写了一系列《博哥ESP8266系列x》的帖子,虽然有不少同学也跟着实验起来,但是楼主总觉得好像有点“授人以鱼不如授人以渔”的感觉。楼主总觉得一直在教大家怎么去开发应用,并没有给大家讲讲里面的方法原理(可能当时比较水,能力有限)。因此,楼主又去认真研究了一遍Arduino core for ESP8266,终于有了一些新的认识。 从本篇开始,楼主会陆续分享n篇《博哥零基础教你玩转ESP8266》帖子。楼主写本系列帖子,最终目的就是教大家如何从小白开始一步一步揭开ESP8266开发的神秘面纱,让大家能够快速上手。
“xxx打火机,哪里不会点哪里”。
注意点,系列帖子,楼主有参考研究多方资料,如有雷同,纯属巧合。
二、ESP8266是什么?
官方介绍,自行百度,省略10000字。
ESP8266是我个人比较喜欢的一款wifi模块,重要是价格便宜。用户通过它可以实现一些网络操作。
原厂主打有ESP8266-01系列,-07系列,-12系列,和-13系列。目前来说,我个人比较喜欢ESP8266-12E这款,GPIO口多。
至于,ESP8266各系列的介绍,大家可以参考我之前写的一个帖子 ESP8266选型
那么,我们为什么要用ESP8266呢?
一般来说,大众选择ESP8266主要几个原因:
1. 当做wifi模块来用,价格便宜,大概10元上下的模块价格。当然如果是集成了开发版功能就稍微贵点,前期入门学习,建议先入手一个ESP8266开发版,可以减少不少弯路;
2. 除了当wifi模块,因为其内置了32位处理器,也可以进行二次开发。我们同时可以把ESP8266模块当做是Arduino+wifi功能来开发;
3. 基本的8266软件生态形成,其自身的SDK不断迭代开发、基于lua的NodeMcu模式、基于Arduino的生态移植、网络上众多参考资料,都让大家的入门开发速度加快;
4. WiFi有三种工作模式:Station模式、AP模式、AP兼Station模式;
5. 对于习惯用AT指令的同学,也支持往ESP8266烧写AT固件,可以当做串口转WiFi使用,这一点不是本系列的重点,需要研究的同学可以参考我之前写的一个帖子 ESP8266 AT基础知识
三、ESP8266使用场景
作为一款WiFi芯片,只要需要使用无线网络环境的都可以应用它。
<ignore_js_op>
具体来说,就是通过WiFi控制的各类设备。
比如,市面上现在流行的词,物联网,智能插座,智能家居,智能家电,可穿戴电子产品等等。虽然我们并没有看到它们的广泛应用,但是不要慌,总有一天会实现的,而你们就是实现这个伟大目标的奠基石。
四、怎么去开发ESP8266
前面说了那么多,终于开始讲到重点了。
目前市面上有3种开发方式:
1.使用AT模式 单片机通过串口用AT指令来实现wifi连接,例如arduino uno + esp8266. 楼主的wifi小车+wifi 彩灯就是采用这种方式,这里不讲;
2.使用NodeMcu固件,加入LUA语言,楼主表示不懂这个LUA语言(主要是懒,一懒生万恶);
3.Arduino直接编程(Arduino core for ESP8266),楼主喜欢这种方式,原理还是在SDK基础上开发,不过已经封装为我们熟知的Arduino语言(不需要Arduino硬件,利用Arduino平台来编译8266的源码),这个是整个系列编码的前提环境;
五、安装Arduino core For ESP8266
网上一大堆教程,为了帖子的完整性,楼主还是重复介绍一下。
1.打开Arduino IDE(楼主当前版本是1.8.4)-> 首选项 -> 附加开发板管理器网址,填入:http://arduino.esp8266.com/stable/package_esp8266com_index.json,重启一下IDE
2. 工具-> 开发板 -> 点击开发板管理器->滚到最下面
楼主这里已经安装过了,默认情况会有一个 install 的按钮,然后要选择安装版本,如果失败,多点几次,等待安装完毕。刚开始的时候楼主安装了2.0.0版本,然后编译发现有一个代码编译不过(client.peekBytes 提示我没有这个方法),果断直接按照2.3.0,然后就编译过了。
安装成功的话,应该就是以下这个图了。
到这里,安装完毕,当然本篇也结束了,接下来楼主会继续在这个基础上去带大家揭开ESP8266的神秘面纱,想想都有点小激动。
一、前言
在前一篇 博哥零基础教你玩转ESP8266(一) 重识ESP8266 帖子中,楼主最后教大家怎么在Arduino IDE上安装ESP8266的开发环境。
我估计很多人肯定一脸懵逼 Arduino core for ESP8266 到底是什么鬼?
楼主之前也是一脸懵逼.........
但是对于开发人员来说,要想提高开发能力,必须知其然,并知其所以然。
来来来,万能的gayhub能告诉你为什么?麻烦请点击 ESP8266 github
同时,大家也可以参考以下网址 arduino-esp8266说明文档
参考文档大多是E文,大家就将就看看。
二、Arduino core for ESP8266是什么?
该项目为ARPUNO环境下的ESP8266芯片提供了支持。它允许您使用熟悉的Arduino函数和库编写代码,并直接在ESP8266上运行它们,不需要外部微控制器。 ESP8266 Arduino内核提供了使用TCP和UDP通过WiFi进行通信的库,设置HTTP、mDNS、SSDP和DNS服务器,进行OTA更新,在闪存中使用文件系统,使用SD卡、伺服器、SPI和I2C外围设备。
三、Arduino core for ESP8266库结构
如果大家把上面的github地址的代码clone下来或者直接download下来,然后进入到libraries目录下,应该会发现包含以下库:
<ignore_js_op>
这些库就是我们后面编写代码的基础库,其实你也可以类比arduino目录下的库,原理是一样的。
楼主根据这些库,大概整理了一下百度脑图,后期根据学习的进度不间断更新,敬请关注。
<ignore_js_op>
从脑图可以看出来,根据功能区分,可以分成:
1.arduino功能,把ESP8266当做arduino来使用
使用SD卡、伺服器、SPI和I2C外围设备。
2.wifi功能,其中又可以分为网络服务功能以及无线更新ESP8266功能
ESP8266 Arduino内核提供了使用TCP和UDP通过WiFi进行通信的库,设置HTTP、mDNS、SSDP和DNS服务器,进行OTA更新,在闪存中使用文件系统。
大家重点关注脑图中的引入二字,后面你会看到楼主编写的代码会引入各种头文件,到时你就应该知道这个头文件主要有什么功能。
四、总结
本篇主要带大家大概认识一下Arduino core for ESP8266的整体库结构,让大家有个初步认识,干货不多,敬请原谅。
一、前言
在第二篇 博哥零基础教你玩转ESP8266(二) 认识一下Arduino core for ESP8266 中,楼主说到在arduino ide上主要是通过这个巨大核心库来开发ESP8266功能,并且也谈论到这个核心库其实包含了众多小核心库,包括ESP8266WiFi、ESP8266WebServer、ESP8266HTTPClient、ESP8266mDNS等等。
当然我们实际开发中并不会说会全部使用到,但是至少要形成一个意识,那就是:Arduino core for ESP8266库,在8266 sdk基础上给我们提供了很多操作方式。其中,我觉得,最重要的一个库是ESP8266WiFi(后面我们代码中你会经常看到 #inclue<ESP8266WiFi.h>,那时你就应该知道这个库具体是用来做什么的)。
在第三篇 博哥零基础教你玩转ESP8266(三) 详解ESP8266 工作模式 中,我们说到了ESP8266的三种工作模式:
1. Station模式;
2. AP模式;
3. AP兼Station模式;
后面的编程开发,都是基于这三种模式中的一种模式来开发,是重中之重。而核心库ESP8266WiFi会对这三种工作方式做了代码封装,下面我会详细讲解。
先抛个flag,工欲善其事必先利其器,这节要记住的重点是,核心库ESP8266WiFi,三种工作模式(当然你也可以抽象成两种,第三种就是前面两种的集合)。
二、ESP8266WiFi库
1.库源码结构
如果你是按照我之前说的方式去clone Arduino core for 8266的代码的话,然后把libraries目录导入到源码查看IDE(这里我推荐大家安装webstorm)的话,然后打开ESP8266WiFi那个目录,你就会发现如下代码结构:
<ignore_js_op>
没错,你会发现很多成双成对的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这两个文件,只不过说它们是最核心的统一入口;
记住这10点,基本上整个ESP8266WiFi库你就了解一半了,剩下就是看各个具体使用(引入使用一步到位 #include<ESP8266WiFi.h>,当然你也可以一个个include,so easy)。
2.ESP8266WiFi.h 和 ESP8266WiFi.cpp 详解
这里我们讲解,我们用得最多的两个文件。
什么都不说,有图有真相,上个图:
<ignore_js_op>
可以看到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 服务端(接收端);
为了让大家更加清晰了解到各个具体内容,楼主也花了点时间做了一个很粗的百度脑图,以供大家参考:
<ignore_js_op>
脑图里面给大家区分了各个类库,为了让大家愉快地看帖子,本篇就不详细介绍每个函数怎么用,等到后面用到的时候,楼主再陆续给大家介绍一下用法。
三、总结
这节要记住的重点是,核心库ESP8266WiFi到底有什么东西可以提供给我们。理解它是后续开发的基本。