物联网---ESP32

news/2024/9/18 12:37:43/ 标签: 物联网, ESP32, MQTT, OneNET

物联网---ESP32

  • 一、TCP/IP协议(互联网协议)
  • 二、MQTT协议(通信协议)
    • 2.1 MQTT基本原理
    • 2.2 连接MQTT服务端
  • 三、ESP32

一、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_20">二、MQTT协议(通信协议)

  • MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议
  • MQTT特点:相互可独立空间可分离时间可异步

MQTT_23">2.1 MQTT基本原理

  MQTT客户端首先将数据发送给MQTT服务器,然后MQTT服务器保存必要的数据,再把信息发送给其他客户端
  主题和订阅:当客户端发布主题信息后,当有其他客户端订阅了某主题的信息,MQTT服务器就会把主题信息发送给订阅过的客户端

  如下图所示,汽车客户端向服务端发送主题“汽车速度”的信息,手机和PC端订阅了主题“汽车速度”信息,然后MQTT服务器发送数据

在这里插入图片描述

MQTT_30">2.2 连接MQTT服务端

  • MQTT客户端之间要想实现通讯,无论是发布消息还是订阅消息,必须要通过MQTT服务器
  • 连接MQTT服务端步骤

  1.客户端向服务端发送连接请求
  客户端向服务端发送一个CONNECT数据包

在这里插入图片描述

  下图是CONNECT数据包(报文)内容

在这里插入图片描述

  2.服务端向客户端发送连接确认
  服务端向客户端发送一个CONNACK的数据包

在这里插入图片描述

  下图是CONNACK数据包的内容

在这里插入图片描述

ESP32_51">三、ESP32

3.1 ESP介绍

  • ESP32是一款无线通信单片机,有32位处理器,内置SRAM闪存2.2V-3.6V供电,支持WIFI蓝牙,时钟为26MHz32KHz晶振,包括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用户手册

在这里插入图片描述

ESP32_65">3.2 ESP32连接云端

  • ESP32和STM32之间的数据收发方式包括串口、I2C、SPI等
  • ESP32连接WIFI的三种模式:STAAPAPSTA
  • STA(station):此种模式下,设备本身不接受无线的接入,可以看作是一个终端站点设备,是一个客户端,处在STA模式下的设备,可以连接到AP节点进行网络访问,STA模式下的设备之间的通信可以通过AP进行转发实现。例如手机、平板连接到路由器
  • AP:无线接入点,是一个无线网络的中心节点,可以看作是一个服务器,提供无线接入服务,其他无线设备允许接入该节点,所有接入该节点设备的无线信号数据都要通过它才能进行交换和相互访问,例如无线路由器、热点就是工作在AP模式下
  • APSTA:此模式是一种混合模式,指的是设备在工作时,同时支持AP和STA模式,AP和STA的特性可以同时进行

ESP32WIFIMQTT_72">3.2.1 ESP32连接WIFI/MQTT

  下面是STM32通过串口通信发送AT指令来控制ESP32连接WIFI

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地址

ESP32_SendCmd("AT+CIPSTART=\"TCP\",\"mqtts.heclouds.com\",1883\r\n", "CONNECT")//AT+CIPSTART=<type>,<remote_addr>,<remote_port>:指定协议类型TCP/UDP 远程服务器地址:IP地址或者域名 服务器端口号

OneNET_86">3.2.2 OneNET云端

  • 登录OneNET官网,点击开发者中心产品开发创建产品

在这里插入图片描述

  • 选择其他行业设备接入

在这里插入图片描述

  • 产品开发设置物模型添加自定义功能点,将需要的元素逐个添加即可

在这里插入图片描述

  • 设备管理添加设备
  • 创建产品下的所有设备都会有创建的属性,例如上面的温度,数据就以属性的方式上传

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 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和设备名称


http://www.ppmy.cn/news/1516518.html

相关文章

hutool工具类JSONUtil无法映射全是大写的单词,如何解决

背景 在解析第三方接口数据时&#xff0c;发现有的字段数据没有映射到对应的字段上&#xff0c;还有对于有的字段有空格或换行&#xff0c;也会一同存入数据库。 示例 实体类&#xff1a; public class Goods { private String id;private String unit;private Integer US…

HexView 刷写文件脚本处理工具-命令行介绍(八)-文件合并(/MO /MT)

介绍 /MO 和 /MT 参数:用于将一个或多个文件合并到程序的内部数据存储中。文件读取:使用第2.2.1.2.1节中描述的自动检测文件类型机制来读取文件。合并操作类型:需要选择合并操作的类型。可以选择透明模式(/MT)或不透明模式(/MO),两者不能混合使用。透明模式(/MT):加载的文…

黑神话悟空无法登录服务器怎么办

黑神话悟空游戏在登录的时候会遇到无法登录服务器的问题&#xff0c;玩家可以采用一些有效的方法进行解决&#xff0c;其中最主要的措施就是优化网络环境和减少网络干扰。Rak小编为您整理黑神话悟空无法登录服务器如何解决的步骤及注意事项。 优化网络环境 1、当游戏无法登录服…

使用notepad++将shell脚本转为UNIX格式方法(主要差别在换行符)

sh文件尽量在linux上改&#xff0c;因windows和linux换行符不同&#xff0c;在windows上改后&#xff0c;在linux上改可能会出现换行符错误。 windows换行符 linux换行符 windows环境改换行符方法 使用notepad点 编辑–》文档格式转换–》转换未unix格式。 注&#xff1a;tx…

搭建ELK-Filebeat采集系统日志

1、解压到/data/elk/filebeat mkdir -p /data/elk/filebeat tar -zxf filebeat-7.17.7-linux-x86_64.tar.gz -C /data/elk/filebeat --strip-components1 #--strip-components选项表示从目录级别上去除指定的前缀&#xff0c;以实现更加控制解压的效果 2、修改配置文件 vi /…

【长文细说】20个ElementPlus核心组件以及使用技巧

Element Plus 是一个基于 Vue 3 和 Vite 的组件库&#xff0c;它提供了一套丰富的 UI 组件&#xff0c;用于构建高质量的网页应用程序。Element Plus 是 Element UI 的 Vue 3 版本&#xff0c;Element UI 是一个广泛使用的 Vue 2 组件库。Element Plus 继承了 Element UI 的设计…

Qt5.14.2 操作PostgreSQL 记录

在Qt5.14.2中操作PostgreSQL数据库. #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QDebug>// 初始化数据库连接QSqlDatabase db QSqlDatabase::addDatabase("QPSQL");//qDebug() << "aaaa&qu…

构建第一个zk

1 必要步骤 视频学习&#xff1a;5. Circcom 中的基本算术电路_哔哩哔哩_bilibili 文字学习&#xff1a;https://hackmd.io/YlNLZS2ESI21OSqdTW_mPw/S1jqN-h80/edit 第五课&#xff0c;circom实践&#xff0c;需要安装 1 vscode 2 rust&#xff1a;Windows安装Rust环境&…

FFmpeg 实现从设备端获取音视频流并通过RTMP推流

使用FFmpeg库&#xff08;版本号为&#xff1a;4.4.2-0ubuntu0.22.04.1&#xff09;实现从摄像头和麦克风获取音视频流并通过RTMP推流。 RTMP服务器使用的是SRS&#xff0c;我这边是跑在Ubuntu上的&#xff0c;最好是关闭掉系统防火墙&#xff0c;不然连接服务器好像会出问题&a…

python手写了个简易的豆瓣影评爬虫

使用python手写了个简易的豆瓣影评爬虫代码。 __author__ wsximport time import requests from bs4 import BeautifulSoup import os import re import uuiddef clean_windows_filename(string_file_name):invalid_chars r[\\/:*?"<>|]return re.sub(invalid_c…

ZooKeeper 的特性及其在分布式系统中的配置中心的应用

以下是配置管理和服务注册的实现方式&#xff1a; 1. 配置管理 配置管理指的是将系统中各个组件的配置信息集中管理&#xff0c;以便动态更新和统一配置。ZooKeeper 可以用来管理配置文件&#xff0c;通过它的节点结构和数据一致性功能&#xff0c;确保所有客户端都能获得最新…

PIL convert(‘RGB‘) 用法

PIL 不提供 BGR转RGB的方法。 1. 图像模式转换 如果图像当前的模式不是 RGB&#xff0c;例如它是灰度&#xff08;L&#xff09;、CMYK 或其他模式时&#xff0c;convert(RGB) 会将图像转换为 RGB 格式。 灰度图像 (L)&#xff1a; 如果图像是灰度图像 (L)&#xff0c;conver…

【机器学习工具库-一-传统机器学习sklearn库】

sklearn库 安装安装顺序 sklearn库的六大功能sklearn中的核心调用流程 sklearn库是用于机器学习一个工具包&#xff0c;有了它&#xff0c;可以帮我们用简单的函数实现传统机器学习中的分类、聚类等任务。 安装 sklearn的官网 http://scikit-learn.org/stable/ sklearn库基于N…

【C++ 面试 - 内存管理】每日 3 题(二)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

Django后端架构开发:Nginx服务优化实践

Django后端架构开发&#xff1a;Nginx服务优化实践 目录 &#x1f31f; Nginx核心概念&#x1f50d; Nginx服务原理&#x1f504; Nginx负载均衡&#x1f517; Nginx反向代理⚙️ Nginx动静分离 &#x1f31f; Nginx核心概念 Nginx作为一款轻量级且功能强大的HTTP服务器&…

分布式性能测试-通篇讲解 Locust 性能测试

分布式性能测试-小试牛刀 Locust 分布式负载生成概述 Locust 支持分布式负载生成,以模拟更高的并发负载。你可以通过以下方式来配置和使用分布式模式: 1. 基本概念 Master 实例:管理整个负载测试,运行 Locust 的 Web 界面,并协调各个 Worker 的任务。Worker 实例:实际…

思特威-秋招正式批-笔试

1.在全局数据区中分配空间的变量类型有哪些 2.new和malloc的区别 3. class CData{unsigned short m_uilndex, m_uilndexFlag 9; int m_iData[10]; int m_iType;int iGetDataType() {return m_iType;} public: CData(); }CData::CData(), m_iType(5) {string strTxt "…

【算法模板】基础:区间合并

区间合并是一种常见的算法问题&#xff0c;通常在处理范围覆盖、时间调度、区间覆盖等问题时会用到。区间合并的目的是将一些有重叠或相邻的区间合并成一个更大的区间&#xff0c;从而简化问题的复杂性。 算法思想 给定一组区间&#xff0c;可能存在部分区间之间有重叠或相邻关…

你是如何克服编程学习中的挫折感的?——从Bug中找到成长的契机

你是如何克服编程学习中的挫折感的&#xff1f; 从Bug中找到成长的契机 在编程的世界里&#xff0c;Bug 是不可避免的。无论是初学者还是经验丰富的开发者&#xff0c;都不可能完全避免 Bug 的出现。与其视 Bug 为敌人&#xff0c;不如将其看作成长的契机。每一个 Bug 的出现&…

虚幻5|简单的设置角色受到伤害,远程攻击机关设置,制作UI,低血量UI

虚幻5|制作玩家血量&#xff0c;体力&#xff08;还未编辑&#xff0c;只用于引用&#xff09;-CSDN博客 需完成制作玩家血量及体力部分 一.给角色添加死亡动画 1.为了保证角色在播放死亡蒙太奇的时候&#xff0c;不会重新播放&#xff0c;而是保持原来倒地的姿势&#xff0…