零基础教你玩转ESP8266


转载 

博哥零基础教你玩转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到底有什么东西可以提供给我们。理解它是后续开发的基本。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM