【嵌入式模块】ESP8266完整教程

前言

  无线通信中除了最为常用的蓝牙之外,剩下的就是WiFi了,但是相比于蓝牙模块一般只用来进行透传,WiFi模块的可自定义程度要更强,而这也导致了WiFi模块的入门相对难了一点。

参考资料

  • WIFI模块的STA模式和AP模式有什么区别 - 百度知道
  • ESP8266的两种开发方式 - 知乎
  • ESP8266 NodeMCU引脚说明 - 简书
  • ESP-01S-ESP8266入门教程 - 博客园
  • esp8266-01s介绍与使用 - CSDN——资源丰富,涵盖广泛
  • ESP8266模块使用完整教程 - CSDN——资源较多,但有点老,也有点深
  • 关于ESP8266自动下载和CH340的几件事 - CSDN
  • ESP8266串口WiFi模块的基本使用和配置教程 - 电子论坛
  • 安信可固件汇总

认识ESP8266

  关于ESP8266的各种资料在网上很杂也很乱,似乎就没有找到一个完整版的入门教程,通过查找各种资料并进行交叉比对,我对ESP8266有了一个整体的认识。

两种状态

  ESP8266为一个WiFi透传模块,和蓝牙透传模块具有主从两种工作模式一样,也具有两种工作模式:STA模式(Station)AP模式(Access Point),一般WiFi模块还会有一个STA+AP模式,即可以在两种模式下切换的状态。
  AP模式下,WiFi模块产生热点,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。该模式对应TCP传输协议中的服务端(TCP Server)
  STA模式下,WiFi模块为连接到无线网络的终端(站点),可以连接到AP,一般无线网卡工作在STA模式下。该模式对应TCP传输协议中的客户端(TCP Client)

  透传,又称透明传输,具体来说就是“输入即输出(如从WiFi模块串口输入的字符会透传到服务器端)”,数据不改变,不同协议之间的转换(如串口到WiFi、蓝牙等)由模块完成。使用者无需关心内部具体实现,因此模块对于使用者是“透明的”、似乎不存在的(因为可无视中间的实现原理)。一个高度封装的模块,应该隐藏内部实现细节,仅对外提供使用接口。

两种开发方式

  ESP8266系列一般都具有两种开发方式,一种为AT指令开发方式,即厂家出厂时预先在ESP8266芯片烧入好固件,封装好WiFi的协议栈,内部已经实现透传,而用户只需要使用一个USB转TTL的模块或者单片机的串口就能实现与WiFi模块的通信,发送AT指令来对WiFi模块进行控制。(和蓝牙透传模块类似)
  另外一种开发方式就是SDK开发,因为ESP8266本身即是可编程的芯片,可以把它视为一个带有无线通信的单片机,而用户需要在专门的IDE中编写对应的程序,然后通过烧写固件的方式将程序写入到芯片中,因此,此时想要实现WiFi通信,需要自定义WiFi协议栈,因此对用户掌握的相关知识要求更高。
  所以,如果发现一个ESP8266模块对AT指令没有反应,那很有可能是内部的程序不是既定的AT固件,而是被烧入了其他程序。

分类

  很多人会遇到这样一种情况:先有器件再去学知识。因此往往会面临器件型号与所学知识不匹配的问题,因此,学习ESP8266,了解其各种型号及其对应的参数显得非常重要。
  在某宝上搜索ESP8266,会发现有很多种型号,包括ESP-01、ESP-01S、DT-06、ESP-12F,如下图所示:
【嵌入式模块】ESP8266完整教程_第1张图片
【嵌入式模块】ESP8266完整教程_第2张图片
【嵌入式模块】ESP8266完整教程_第3张图片
  其中DT-06一般只使用AT指令开发,而且这个模块可以用电脑连接WiFi产生的热点之后在浏览器中直接配置WiFi模块,省去了麻烦的AT指令,更加便捷。【所以不太需要烧入固件】
  ESP-01S和ESP-01两种型号基本一样,其中ESP-01S表面只有一个LED灯,ESP-01表面有两个LED灯,且ESP-01S优化了内部电阻。参考链接
  最让我纠结的是第三种——ESP-12F,因为淘宝上面有两种非常类似的板子,一种是使用CP2102作为USB转TTL,体现为上面那个芯片为四方的芯片,而当时我买的那种USB转TTL芯片为CH340C,体现为上面那个芯片为双列的引脚,如下图所示。
【嵌入式模块】ESP8266完整教程_第4张图片
  理论上来说,大家核心芯片一样,只是换了USB转TTL的芯片,那装上驱动应该得是一样的用法才对,但显然不是。我看很多教程上面都说将WiFi模块通过USB线直接连接到电脑即可,但是我的这个【新的板子】插上电脑会提示音,但马上就没了,设备管理器找不到串口,而且经过测试发现,当按下RST按键时,电脑能够识别,一松手又不行了。问题类似于这个链接中描述的一样。
  经过多方查找资料,最终通过一个教程找到了问题所在:带有CP2102的ESP模块直接插上USB线即可烧入程序;而带有CH340的ESP模块直接连接电脑为运行内部程序的模式,如果要进入下载程序的模式,需要上电后按住FLASH按键,然后按一下RST键,即可发现电脑识别出了端口。
  此外,如果在这个板子中烧入AT固件,是没办法通过USB线进行串口通讯来传输AT指令的,必须要用一个USB转TTL的模块连接到其引出来的TX,RX引脚来进行通讯

固件及其刷新方法

  所谓固件,是指ESP-8266芯片内部的程序,如果要运行AT指令,则要在ESP8266中烧入固定的固件,这个一般是来自厂家官网,比如乐鑫。

硬件方面

  如果要对ESP8266烧入固件/程序,可以使用较为普遍的USB转TTL模块,也可以去买一个专门的下载器,如下图所示:
【嵌入式模块】ESP8266完整教程_第5张图片
  这个下载器主要使用于ESP-01S,连接方式如下图所示:

【嵌入式模块】ESP8266完整教程_第6张图片
  相比于使用杜邦线连接USB转TTL模块更加简便,而且这个下载器也兼具USB转TTL的功能,在下载完程序之后按一下上面的按键即可与WiFi进行串口通信。一物两用。

  那如果手边只有USB转TTL模块怎么办呢?也只是麻烦一点。一样可以烧入固件,但需要注意两点:

  • 最好使用外部电源,如AMS1117产生的3.3V,因为据说USB转TTL的电源不够稳定,而ESP-8266就需要非常稳定的电源。
  • 接线不能只接4根线(RX,TX,VCC,GND),其他的三根线也要接(GPIO_0、GPIO_2、EN)

具体操作方法可以参考这个文字教程或者这个视频教程。

软件方面

  对于软件,比较常用的有两个:FLASH_DOWNLOAD_TOOLSArduino IDE

  • FLASH_DOWNLOAD_TOOLS
    这个软件主要是用于向ESP8266芯片中写入bin文件。首先打开这个软件,会弹出一个黑框以及一个选择界面,不用管黑框,直接选择ESP8266,如下图所示。
    【嵌入式模块】ESP8266完整教程_第7张图片
    【嵌入式模块】ESP8266完整教程_第8张图片
    需要注意,如果FLASH SIZE选择了8M,那么烧入的固件也必须选择8M的。此外,点击START之后,当绿色方框内显示Finish时,表明固件烧入完毕。
  • Arduino IDE
    上文提到,ESP8266本身也可以视为一个单片机,因此其内部的程序也可以自定义编写,而IDE就可以选择Arduino IDE,但使用前需要简单配置一下。具体方法如下:
  1. 打开文件->首选项,在附加开发板管理器网址中粘贴这个地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,如下图所示。
    【嵌入式模块】ESP8266完整教程_第9张图片
  2. 然后点开工具->开发板->开发板管理器
    【嵌入式模块】ESP8266完整教程_第10张图片
  3. 等下面的进度条加载完毕后在搜索框中输入ESP8266。即可得到一个唯一的选项,安装即可。【嵌入式模块】ESP8266完整教程_第11张图片
    注意:如果显示下载失败可以考虑,因为下载地址为Github。
  4. 安装完毕后再次点击工具->开发板,可以发现多了一个ESP8266板子。
    【嵌入式模块】ESP8266完整教程_第12张图片
  5. 在给ESP-12F烧入程序时,一般可以直接选择第一个,或者NodeMCU 0.9,而给ESP-01S烧入程序时,一般就是选择第一个就行。
    【嵌入式模块】ESP8266完整教程_第13张图片

AT指令开发方式

  烧入AT固件之后,接下来就是使用AT指令来控制WiFi模块了,这里的所有AT指令都需要加上回车换行
  另外就是,由于AT指令依赖于烧入的AT固件,因此建议找到对应型号的WiFi模块的说明书,参考上面列出的AT指令。
  本文不再赘述。

SDK开发方式

  一般来说,说到SDK开发,大都是使用ESP-12F,因为它所有引脚都引出了,这样可自定义程度更高。

  • ESP8266开发专栏 - CSDN
  • ESP-12F开发教程_太极创客 - BiliBili
  • Lua Loader开发资料汇总
  • Lua Loader下载

补充教程

  • 【嵌入式模块】再探ESP8266,保姆级教程

你可能感兴趣的:(嵌入式专栏,ESP8266,物联网,单片机,嵌入式,教程)