烂大街的ESP8266该怎么玩!

烂大街的ESP8266该怎么玩!

学习物联网这一块大家首先想到的是ESP8266,这个模块可以连网就是连接你家中的路由器,也可以作为一个热点来让你的手机连接它,是不是很奇妙。虽然这个东西程序和相关的产品已经很成熟,但是还是有一些入门的小伙伴不知道咋学。如何用一个ESP8266加上STM32单片机做一个小产品呢?这个学习的路线是怎样的呢还有如何入门呢?

我建议1:先单独学习ESP8266模块,搞懂他的AT指令集,通过串口调试助手和网络调试助手单独把这个模块搞明白。2:学习mqtt协议,为啥第二步要学习mqtt协议呢?因为我们esp8266是要连接服务器的,简单地说mqtt就是esp8266与服务器之间的通信协议,这个协议不难,我已经写好了笔记到时候在这里直接发布就可以了。3:就是要学习android studio自己做一个app。既然是物联网控制当然有app了,虽然阿里云还有机智云有直接可以用的app,但是作为一个是电子爱好者不能仅限于云智能,自己写一个app说出去也好装逼啊!本项目带你用32还有esp8266做一个比如温湿度显示,并在手机app上实时。

学习方法: 1.多去各大论坛查资料去B站找相关的视频。 2.学会举一反三,让你点亮一个LED,就要会灭一个led。 3.多动手,程序不是写出来的,是调出来和改出来的。

一、ESP8266 01S简介

使用 AT 功能之前,模块内必须有 AT 的固件,每个模块的生产厂商都会对乐鑫官方的 AT 固件做一些修改和删减,但是其最核心的 AT 指令功能都是相同的。我们买的ESP8826模块一般都有刷好的固件,所以不用自己刷固件。 ESP-01S WiFi 模块是一款低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求。 该模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ B/RF/PA/LNA,板载天线。 该模块支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。

(1) 模块供电电压为直流3.3V、电流为500mA以上; (2) Wi-Fi模块IO最大输出电流为12mA; (3) Wi-Fi模块NRST管脚低电平有效;EN使能管脚高电平有效; (4) Wi-Fi模块进入升级模式:GPIO0处于低电平,然后模块复位上电;Wi-Fi模块进入正常工作模式: GPIO0处于高电平,模块复位上电。 (5)Wi-Fi模块的RXD接外部MCU的TXD,Wi-Fi模块的TXD接外部MCU的RXD;


二、ESP8266刷固件

刷固件可以用杜邦线,也可以用刷固件的模块(淘宝上几块钱就可以买到),如下图:

三、 AT指令控制 ESP8266 模组

乐鑫官方的 AT 指令有将近 100 条,但常用的就十几条,理解起来也非常简单,现在举例一些常用指令,并使用这些指令一步一步的通过 TCP 连接到远程的服务器实现收发数据,更多 AT 指令可以查阅《ESP8266 AT 指令集手册》。

总结 AT 指令的构成就是,每条指令要以 AT 开始,后面跟要查询(读)或者要设置(写)的参数,例如查询 WIFI 模式对应的指令为 AT+CWMODE?,设置 WIFI 模式为AT+CWMODE=3。另外要求的回车换行符结尾是说要在待发送的数据后面追加\r\n,即十六进制的 0x0D 0x0A。

注意在使用串口调试助手发送AT 指令时,只需要在待发送指令后面加回车即可,大家可以勾选“ 按十六进制发送”,观察数据后面是否追加了 0x0D 0x0A 。 如果在数据后面添加\ \r r\ \n n 则会将其作为字符 发送而非换行符。

1. 测试模块是否正常(AT)


该指令通常在开机后查询模块是否正常启动,如果回复 OK 则表示为正常启动。

2. 开启/关闭回显(ATE1/ATE0)

从上图可以看出,我们发送了一个 AT,模块回复了 AT OK,即模块将发送过来的指令原封不动的先复述了一遍后接着发送有效回复,我们称这种复述为回显,关闭回显(发送ATE0)后如再次发送 AT,则只回复 OK。如下图:


3. 设置AP模式及AP参数(AT+CWMODE ,AT+CWSAP_DEF)

WIFI 模式有两种,一种叫 AP 模式,一种叫 Station 模式,AP 就是我们平时所说的热点,如 WIFI 路由器,开了热点的手机,或者是公共热点等,这些 AP 设备可以允许其他设备(如手机,笔记本电脑等)输入热点名和密码(也可不设置密码)后接入,Station 则是前面说的连接 AP 的设备,如:手机,笔记本电脑等,ESP8266 还有第三种模式:AP+Station,即:将 AP 和 Station 的功能合二为一,但是应用的场景不多,这里不做展示。当 ESP8266 设置为 AP 模式时,其他设备可以接入该热点,最多支持 4 台 Station 设备接入。AP 模式也是 ESP8266 默认的模式。设置 ESP8266 流程如下:

1.首先发送AT+CWMODE?查询模块当前处于哪一种模式,如下图可以知道AT+CWMODE=2也就是热点模式。

2.然后我们发送AT+CWMODE=2,让模块处于热点模式下,同时我们的电脑上也会显示热点名称。

3.我们现在自定义设置我们ESP8266的热点名和密码,来看看我们电脑能不能连接我们所设置的好的ESP8266模块。

  • 1、设置WIFI模式为AP模式,也就是充当热点模式(AT+CWMODE=2) 另: AT+CWMODE=1 为 Station 模式,AT+CWMODE=3 位 AP+Station 模式
  • 2、设置AP热点属性(AT+CWSAP=AT+CWSAP_DEF="ESP8266-XSD","12345678",5,3)

其含义为:热点名为ESP8266-XSD,密码为12345678,使用通道5加密方式为 WPA2_PSK,这里的通道对应的就是不同的射频频率,如果同一空间内存在相同通道的 WIFI 信号,将会产生干扰,影响上网质量,因此可以设置通道来避免这种干扰,常用的通道有 1、6、11,因为这三个通道互不产生干扰。设置效果如下图:

连接数量可以限制 Station 设备的接入数量,广播或者不广播 SSID 就是指是否隐藏热点名,使热点更加安全。另外AT+CWSAP=AT+CWSAP_DEF表示设置的参数会存储的 flash,还有另外一个类似指令 AT+CWSAP=AT+CWSAP_ CUR,该条指令表示设置的参数重启后失效,即不保存到 flash 中。其他的 AT 指令也有类似的后缀。

4. 设置为Station 模式(AT +CWMODE=1,AT +CWJAP)

该模式是平时应用最多的模式,因为物联网设备需要连接到家中路由才可以接入外网,此时设备就作为 Station 连接到 AP 热点。设置 Station 并连接 AP 流程如下:

  • 1.设置 WIFI 模式为 Station(AT+CWMODE=1)
  • 2.连接到家中路由器(AT+CWJAP="liuyao","liuyao1001")

下图为连接过程的串口输出:

这时候我们进入家中的路由器就能看到我们的ESP8266模块连接到了家中的路由器。如果想要断开连接,可以使用AT+CWQAP,就可以断开ESP8266与路由器的连接。

现在我们的ESP8266已经与家中的路由器连接上了,现在我们如果想获取连接的这个ESP8266的IP可以使用AT+CIPSTA?指令,返回的是路由器分配给 ESP8266 的局域网IP以及网关地址和子网掩码 。


5. 使用TCP实现局域网内的设备通信

5.1建立TCP连接(AT+CIPSTART)

TCP实现局域网内的设备通信时先要让ESP8266连接到家中的热点。该条指令可以指定建立连接的协议类型,通常使用的有两种:TCP和UDP。我们先打开网络调试助手,并将其设置为TCP Server端,具体设置如下:

接着发送AT指令建立 TCP 连接:AT+CIPSTART="TCP","192.168.0.103",8080,成功连接会提示CONNECT,接着使用发送指令:AT+CIPSEND=14,其中 15 是发送数据的长度,该指令发送完成后,接收窗口会显示 > ,我们接着在发送窗口发送"I m TCP Client",TCP Server 端会收到该信息,接着再通过 TCP Server 发送"I m TCP Server",串口接收端会打印 Client 收到的数据。 下面就是ESP8266连接当前环境的热点,与服务器建立TCP连接,传输数据的过程和动画演示(所有的字符和标点必须是英文)。

  • 1.设置WIFI 模式为 Station:AT+CWMODE=1
  • 2.连接到家中路由器:AT+CWJAP="liuyao","liuyao1001"
  • 3.发送AT指令建立 TCP 连接:AT+CIPSTART="TCP","192.168.0.103",8080
  • 4.提示发送数据长度为14: AT+CIPSEND=14
  • 5.串口调试助手发送:I m TCP Client
  • 6.网络调试助手发送:I m TCP Server


这一步很多人可能很懵,不知道为啥要这样做,你这个搞的串口调试助手还有网络调试助手还有啥TCP Server到底是啥意思啊?

哈哈,我相信很多初学者学到这里也不是很清楚。我这里简单说一下,我们的用ESP8266是不是要让它连到家中的网啊,那在这里我们的网络调试助手的TCP Server就是我们要连接的网络。有人又要说了,我要连家中路由器的网啊,为啥要连网络调试助手的网啊?这是因为如果你连家中的网,请问你如何给你家的路由器发送数据啊!你怎么知道路由器接收到了数据啊!路由器又咋给你发送数据啊!你又咋接收数据啊!我们这里用网络调试助手的目的就是让网络调试助手来代替路由器局域网。TCP Server就是服务端的意思也是就是服务器。至于为啥用串口调试助手我就不用说了吧,只有你在串口助手上调试好了,我们才用单片机的串口结合ESP8266共同代替客服端,也就不需要调试助手了。

所以说我们一定要在串口调试助手上把相关的数据调通了,把原理过程搞懂了之后我们再去搞单片机程序,再去搭建你的服务器而不是用网络调试助手代替了。怎么样现在明白了吧

5.2开启透传传输(AT+CIPMODE=1)

前面在使用 TCP 进行数据发送时,在每次发送数据之前都要指定发送数据的长度,而且在接收到数据之后,还会有+IPD,< len >的前缀,这样很不方便进行数据的处理,因此我们可以使用AT+CIPMODE=1指令开启透传模式,开启透传模式后只需要在第一次发送数据时使用ATD +CIPSEND指令来告诉ESP8266开始透传发送,随后我们直接发送想要的数据即可,在接收到数据时,也没有了+IPD,< len >前缀。 下面就是ESP8266连接当前环境的热点,与服务器建立TCP连接,开启透传模式传输数据的过程和动画演示(所有的字符和标点必须是英文)。

  • 1.设置WIFI 模式为 Station:AT+CWMODE=1
  • 2.连接到家中路由器:AT+CWJAP="liuyao","liuyao1001"
  • 3.发送AT指令建立 TCP 连接:AT+CIPSTART="TCP","192.168.0.103",8080
  • 4.开启透传模式:AT+CIPMODE=1
  • 5.开始透传发送:AT+CIPSEND
  • 6.串口调试助手发送:hello I m TCP Client!
  • 7.网络调试助手发送:hello I m TCP Server!

如果想要退出透传发送模式,先发送+++(0x2B 0x2B 0x2B),注意没有换行符,接着使用AT+CIPMODE=0指令退出透传模式,恢复到默认传输模式。如果不退出透传模式,那么在透传模式下就不能发送AT指令了,它会默认为字符串发送。

6.使用SmartConfig为设备配网

前面使用了AT+CWJAP指令来主动连接家中的 WIFI,但是在大多数的物联网产品中,缺少输入 WIFI 密码的输入设备,如:键盘,更不能将程序交给用户去修改家中的 WIFI 热点名和密码,在真正的项目开发中使用最多的方法就是通过一颗按键来使设备进入某种模式,并使用手机将当前 WIFI 的密码告知该设备来实现 WIFI 配网,这种模式就是SmartConfig(不同厂商叫法不一,但功能相近),在该模式下ESP8266会监听指定端口的UDP广播包,如果收到符合规定格式的广播包后会对其进行解析并获得WIFI的SSID 和PWD,然后自动连接获取到的 WIFI 热点,从而实现WIFI 配网。

智能配网需要三个设备:家中的路由器、WIFI模块、手机。模块处于station模式,手机连接好家中的wifi。具体的这个工作的原理是:我们需要将wifi配置为station模式。因为默认的是ap模式,然后要保证手机连接到家中的路由器热点。

手机上面的第一行是我们手机此时连接的这个热点名,下面第一行需要用户去手动的输入路由器热点对应的密码,下面会有一个按键就写着叫配网(连接),那么当我们点击这个配网之后,手机则会以UDP的这种传输的方式。向某个端口号或某个IP地址当中去广播。广播内容是厂商自己封装的一个数据帧结构,广播的时候就不用去指定具体的IP地址,每个模组可能默认是不同的。只要指定账号,当我按下配网的这个按钮之后,此时它会UDP广播的形式向外连续的去发送一串儿厂商约定好的一个数据帧结构,比如说前面对应的是厂商的这个ID,后面跟的是这个热点名,后面跟着的是这个热点密码等,当然也可以对它进行一些加密处理,如果此时我们通过按下这个。用点上面的某个按键,比如说是配置了我们这个wifi模组,进入了smartconfig这个配网模式。 这个时候wifi模块会处于一个监听的状态。比如udp的协议监听8080端口上面这个数据。如果我收到了这一块儿有效的数据,那么他会将这里面有用的热点名和密码摘出来,然后使用类似透传模式这种功能,内部的将它连接到指定的热点上面,就实现了一键配网的过程。 知道了ESP8266模块如何用了之后,接下来我们就用STM32和ESP8266来实现与服务器的之间的数据收发,具体操作我们下一篇再说!


编辑于 2020-10-01 12:14