物联网---ESP32
- 一、TCP/IP协议(互联网协议)
- 二、MQTT协议(通信协议)
-
- [2.1 MQTT基本原理](#2.1 MQTT基本原理)
- [2.2 连接MQTT服务端](#2.2 连接MQTT服务端)
- 三、ESP32
-
- [3.1 ESP介绍](#3.1 ESP介绍)
- [3.2 ESP32连接云端](#3.2 ESP32连接云端)
-
- [3.2.1 ESP32连接WIFI/MQTT](#3.2.1 ESP32连接WIFI/MQTT)
- [3.2.2 OneNET云端](#3.2.2 OneNET云端)
一、TCP/IP协议(互联网协议)
- TCP/IP是一组用于互联网及其他网络中数据传输的通信协议。它定义了如何将数据从一台计算机发送到另一台计算机,包括数据的格式、传输方法以及如何确保数据的完整性和可靠性
- TCP/IP通常被描述成四层模型
1.应用层 :提供应用程序间 的通信和数据交换服务。常见的应用层协议有HTTP 、FTP、SMTP、DNS等
2.传输层 :提供端到端的通信服务 ,确保数据能够可靠地从源主机传输到目标主机。主要的传输层协议是TCP(稳定)和UDP(快)
3.网络层 :负责数据包 的路由选择 和传输,确保数据能够从源主机传输到目标主机。主要是IP(地址)
IP地址目前分为IPv4和IPv6,v4是由4个十进制数字组成,v6是由8个十六进制组成
在局域网 中,路由器通过WIFI连接到PC、移动端和ESP8266,路由器会给每个设备分配一个IP地址(局域网的IP地址) ,当路由器连接到网络服务器时,例如电信、联通等,就可以实现上网
网关的作用就是负责将互联网连接到各个设备
4.链路层(网络接口层):负责在物理网络上传输数据帧,定义了如何在本地网络中传输数据。包括以太网、WIFI等协议
二、MQTT协议(通信协议)
- MQTT是一个客户端服务端 架构的发布 /订阅模式的消息传输协议
- MQTT特点:相互可独立 、空间可分离 、时间可异步
2.1 MQTT基本原理
MQTT客户端首先将数据发送给MQTT服务器,然后MQTT服务器保存必要的数据,再把信息发送给其他客户端
主题和订阅 :当客户端发布 某主题信息 后,当有其他客户端订阅了某主题的信息,MQTT服务器就会把主题信息发送给订阅过的客户端
如下图所示,汽车客户端向服务端发送主题"汽车速度"的信息,手机和PC端订阅了主题"汽车速度"信息,然后MQTT服务器发送数据
2.2 连接MQTT服务端
- MQTT客户端之间要想实现通讯,无论是发布消息还是订阅消息,必须要通过MQTT服务器
- 连接MQTT服务端步骤:
1.客户端向服务端发送连接请求
客户端向服务端发送一个CONNECT数据包
下图是CONNECT数据包(报文)内容
2.服务端向客户端发送连接确认
服务端向客户端发送一个CONNACK的数据包
下图是CONNACK数据包的内容
三、ESP32
3.1 ESP介绍
- ESP32是一款无线通信 单片机,有32位处理器,内置SRAM 和闪存 ,2.2V-3.6V 供电,支持WIFI 和蓝牙 ,时钟为26MHz 和32KHz晶振,包括GPIO、UART、SPI、I2C、PWM、ADC等外设
- 固件下载 方式主要是UART下载
- 网络协议是IPv4、IPv6、TCP/UDP/HTTP/MQTT
- 用户配置 方式有AT+指令集 、云端服务器 、安卓/IOS APP
- 开发ESP32主要使用的环境是ESP-IDF和Arduino IDE两种
下图为ESP32管脚布局,具体芯片有所不同,但大致一样
其中EN为芯片使能,高电平有效,GND接地,VCC接3.3V电压,剩余引脚包括GPIO、串口、ADC管脚等,具体见ESP32用户手册
3.2 ESP32连接云端
- ESP32和STM32之间的数据收发方式包括串口、I2C、SPI等
- ESP32连接WIFI的三种模式:STA 、AP 和APSTA
- STA(station) :此种模式下,设备本身不接受无线的接入 ,可以看作是一个终端站点设备,是一个客户端,处在STA模式下的设备,可以连接到AP节点进行网络访问,STA模式下的设备之间的通信可以通过AP进行转发实现。例如手机、平板连接到路由器
- AP :无线接入点,是一个无线网络的中心节点,可以看作是一个服务器,提供无线接入服务,其他无线设备允许接入该节点 ,所有接入该节点设备的无线信号数据都要通过它才能进行交换和相互访问,例如无线路由器、热点就是工作在AP模式下
- APSTA:此模式是一种混合模式 ,指的是设备在工作时,同时支持AP和STA模式,AP和STA的特性可以同时进行
3.2.1 ESP32连接WIFI/MQTT
下面是STM32通过串口通信发送AT指令来控制ESP32连接WIFI
c
ESP32_SendCmd("AT+RST\r\n", "OK")//复位,保证ESP32从一个已知的状态开始
ESP32_SendCmd("AT+CWMODE=1\r\n", "OK")//设置WIFI模式:STA
ESP32_SendCmd("AT+CWDHCP=1,1\r\n", "OK")//开启DHCP,使得ESP32从路由器中获取IP地址
ESP32_SendCmd("AT+CWJAP=\"abc\",\"abc123456\"\r\n", "GOT IP")//连接指定的WIFI:网络名称+密码
下面是STM32通过串口通信发送AT指令来控制ESP32连接到MQTT服务器
连接MQTT服务器之前,确保ESP32已经连接到WIFI并获得了有效的IP地址
c
ESP32_SendCmd("AT+CIPSTART=\"TCP\",\"mqtts.heclouds.com\",1883\r\n", "CONNECT")//AT+CIPSTART=<type>,<remote_addr>,<remote_port>:指定协议类型TCP/UDP 远程服务器地址:IP地址或者域名 服务器端口号
3.2.2 OneNET云端
- 登录OneNET官网,点击开发者中心 --- 产品开发 --- 创建产品
- 选择其他行业 --- 设备接入
- 产品开发 --- 设置物模型 --- 添加自定义功能点,将需要的元素逐个添加即可
- 设备管理 --- 添加设备
- 创建产品下的所有设备都会有创建的属性,例如上面的温度,数据就以属性的方式上传
- 登录设备(登录OneNET)
- ESP32接入OneENT步骤:生成Token --- 连接MQTT消息组包(将MQTT协议包发送给ESP32,ESP32转发给MQTT服务器)
-
ESP32上传数据
-
OneNET平台订阅MQTT主题 ,ESP32向主题发送消息(温湿度等),OneNET收到消息,所有发送给主题的消息都认定为属性上报,OneNET解析属性,执行操作,保存到平台
-
上传主题为:$sys/{pid}/{device-name}/thing/property/post:产品ID和设备名称
-
OneNET下发命令
-
ESP32需要订阅主题才可以收到OneNET平台下发的数据
-
下发主题为$sys/{pid}/{device-name}/thing/property/set,产品ID和设备名称