前期教程
前言
之前寒假期间趁着有时间学习了一下物联网的基础器件——ESP8266 WiFi模块,即上面的前期教程,没想到看得人不少,挺多人收藏了,可见物联网的火热~
最近在做一个小物件,想要在里面添加WiFi模块,实现联网获取实时时间,这算是很普通的需求,而且网上相关的资料也是一大把。但是当我翻开自己写的博客时,突然发现写得有点不太详细(估计是当时正值假期尾声~),很多内容只是一个概述,而且感觉给出的资料有点乱,对于完全没有接触过的人来说看起来还是有点费劲的,于是想着再补一遍博客,老规矩,尝试“授人与渔”。
理清各大厂商的关系
对于硬件学习,我最推荐的就是自己去官网找资料,而不是疯狂地找各种博客,因为很有可能出现资料下了一大堆,结果能用的却没几个的尴尬情况。官网资料最主要的好处就是全且新。
对于ESP8266(或者ESP32)来说,一般说的官网有这么几个:
对于这几家,乐鑫是做芯片的,其ESP8266EX芯片据说是物联网领域里程碑式的突破,将搭载WiFi的成本大大降低,而其他的商家则是基于这个芯片开发固件并组装系统,也就有了模组(即那个板载天线引脚是小缺口的小板子)和开发板。当然,现在乐鑫也有它的模组和开发板。
所以,很显然,如果买来一个开发板或模组,首要的肯定是找开发板或模组的厂家给出的资料,如果是固件开发和代码编写的话,就得要参考芯片厂家资料了。
现在,你已经掌握了资料查找的方法,所以建议首先将开发板或模组的手册通读一遍,建立基本印象。
芯片型号辨别
在上一篇博客里面,我重点区分了一些常见(且我有的)WiFi模块,但实际上更应该区分的是芯片的型号,基于同样的芯片的不同型号的模组,一般来说大同小异,基本能够支持相同的固件烧录。
- ESP8266系列
ESP8266系列是基于乐鑫的ESP8266EX芯片(就是上面提到的那个芯片)开发的WiFi 模组,可以很方便地进行二次开发,这个系列包含多个型号,如ESP-01,ESP-01S,ESP-07,ESP-12等,具体的信息建议参考安信可官网,WiFi模组专题。
友情提示:这个链接的资料非常完善,建议反复阅读。
- ESP8285系列
ESP8266EX芯片有一个特点,那就是它没有存储,所以一般使用的时候需要搭配一个ROM芯片,这个最明显的就是ESP-01S型号了:
可以看到,它除了一个ESP8266EX外,还搭配一个ROM芯片,用于存储固件。而那些用铁壳子封装的,估计内部也是有两个芯片。
没有ROM终究不是很方便,于是乐鑫又开发了一款带有ROM的WiFi芯片:ESP8285,据说除了ROM之外,基本和ESP8266差不多,因此很多固件也是通用的。但是似乎ESP8285没有ESP8266知名度高。这个系列的代表产品就是后面会提到的四博智联开发的DT-06和ESP-M系列,资料链接参考他们的官网和论坛。 - ESP32系列
ESP32是乐鑫新一代WiFi芯片,据说性能相比于ESP8266增加了不少,它们之间的区别可以参考官网或者这篇博客。同样,基于ESP32芯片的WiFi模组和开发板也有很多型号,具体仍然参考安信可的官网。
这一块本人实践不多,不再多讨论,以后有机会继续更新!
开发方式
区分完了型号,确定了手里拿着的到底是啥板子,接下来就是根据需求确定开发方式了,这里也需要根据板子的型号来选择。
ESP8266系列
ESP8266的开发方式非常多。但是其本质就是编写能够在ESP8266中运行的代码,最后生成一个bin文件,烧录到ESP8266中,因为ESP8266本身就是一个单片机,但是这个单片机可以有多个集成开发环境,下面一一介绍。
- SDK开发
第一种方式我称之为SDK开发,就是和STM32开发差不多,利用官方给的一些库函数,来编写程序。当然,根据开发环境的不同,又可以分为是使用乐鑫官方提供的开发工具还是安信可一体化开发环境,在这个链接里面有详细介绍。这个链接也被安信可官方认可,可以在官网找到。这种方式出现得最早,入门门槛也最高,但同样,可自定义程度也越高。对于专业开发人员来说比较适用。 - Arduino开发
可能是觉得官方SDK封装程度不够,国外的一位大佬为ESP8266开发了适用于Arduino环境的库,这样使得函数的使用更加简单,开发者只需要添加ESP8266的开发板,就能使用它的库,而且其语言完全兼容Arduino单片机的语言,不用再下载SDK,并研究它里面的函数是怎么写的了,大大降低了入门的难度。具体添加开发板的操作在上一篇博客里面已经介绍了,这里不多提了。
另外,ESP32也是可以支持Arduino开发的,操作方法和ESP8266一样,只需要在附加开发板中添加ESP32的板子即可【如果有多个链接,用英文逗号相隔即可】链接是这个:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- 【2022.12.13】最近发现ESP32这个链接好像不稳定,如果选择了其对应的开发板,可能会导致代码出现乱码,所以建议换成这个链接
https://dl.espressif.com/dl/package_esp32_index.json
【实测发现是字体的问题,不能使用Fira Code Retina,而要用Fira Code Medium】
- 【2022.12.13】最近发现ESP32这个链接好像不稳定,如果选择了其对应的开发板,可能会导致代码出现乱码,所以建议换成这个链接
个人觉得使用Arduino开发入门的最快方法就是看它附带的例程
- AT指令开发
这种方式可以说是使用最为简单的了,只需要先烧录一个固定的AT固件,这样就能使用AT指令来操作ESP8266模块了,非常适合入门使用。不过,使用AT指令开发有以下几个点需要注意:-
一般我们常用的AT指令是统一的,都是参考乐鑫官方的AT指令,这个是链接,可以作为AT指令使用的参考。所以如果AT指令没有响应不要去找与固件相对应的AT指令,而应该马上换固件。
-
关于AT固件,只推荐乐鑫官方和安信可官方的固件,不过需要注意的是,下载的固件大小要和ESP8266型号相对应,一般就是两种:1M的固件对应8Mbit的EEPROM;4M的固件对应32Mbit的EEPROM,这个也是在使用FLASH DOWNLOAD TOOLS下载固件时需要设置的参数。至于型号的EEPROM的大小可以参考安信可的官方选型表,链接还是上面那个安信可官网。
-
使用AT指令的时候,后面一定要加换行,或者
\r\n
,如果是在使用过程中需要传数据,就不需要加换行,而且AT指令在返回时还会重复一遍AT指令,使用时不要觉得奇怪。
-
ESP8285
前面提到,ESP8285是自带FLASH的ESP8266EX,代表的产品系列就是四博智联的DT-06和ESP-M系列,虽然官方给了很多烧录固件的方法,但不知道为啥给的都是ESP-12的附图,总之烧录固件就没成功过,令人迷惑。最终我得出的结论就是,DT-06和ESP-M系列的WiFi模块是TTL-WiFi,这也是他们数据手册的大标题,也就意味着它不能组网!!! 最明显的体现就是它不能烧录固件,只能用它自带的固件,而且支持的所谓AT指令也仅有几条而已,它的设置方法是登录一个网站,然后在网站中设置,具体操作建议参考官方的手册,总而言之,DT-06和ESP-M系列WiFi为TTL-WiFi,主要作用是串口透传。基本可以和HC-05的蓝牙模块划等号。
WiFi组网获取网络消息
说了这么多,最后回到本次的需求上来:通过ESP8266联网实现实时网络时间的获取。这个网上的资料很多,这里给两个教程链接:
然后总结几个要点:
- 想要联网,首先WiFi模块必须是得连接互联网,比如手机热点等;
- 连接的热点只能是2.4G的,ESP8266不支持5G
- ESP8266不能连接需要账号登录的热点,比如说校园网。因为还需要了解网站的TCP请求格式等一些底层的东西,非常麻烦