ESP8266使用AT指令完成MQTT功能

ESP8266使用AT指令完成MQTT功能

在esp8266设备中烧录安信可的AT固件之后,进行AT指令完成信息发布,并最终实现在Homeassistant中发布传感器并设置传感器状态。

一、基础指令

以下是完整的步骤和对应的AT指令:

1. 配置ESP8266为Station模式

AT+CWMODE=1

2. 连接到WiFi网络

AT+CWJAP="HM","123321123"

此指令会将ESP8266连接到SSID为HM的WiFi网络,密码为123321123。根据需要进行自行配置。

3. 检查IP地址

AT+CIFSR

此指令会返回ESP8266的IP地址。如图片显示:
在这里插入图片描述

4. 设置MQTT预配置

要配置MQTT功能,您可能需要使用ESP8266的AT指令扩展库,ESP8266标准的固件没有直接提供MQTT支持。如果您的ESP8266固件已经预装了MQTT支持模块,通常会有以下MQTT相关指令:

设置MQTT客户端ID、用户名、密码(如果需要)
AT+MQTTUSERCFG=0,1,"Client_ID","user","pass",0,0,""
  • 0 表示配置第一个客户端。
  • 1 表示启用SSL(0表示不启用)。
  • "Client_ID" 是MQTT客户端的唯一标识符。
  • "user""pass" 分别是MQTT的用户名和密码,若不需要认证则可以为空字符串。
  • 由于我的mqtt服务器不需要验证,因此user和pass随便填写或者不该也没关系。
配置MQTT服务器地址和端口
AT+MQTTCONN=0,"192.168.10.120",1883,0
  • 0 表示第一个客户端。
  • "192.168.10.120" 是MQTT服务器的IP地址。
  • 1883 是MQTT服务器的端口号。
  • 最后的 0 表示清理会话标志。

5. 订阅MQTT主题(可选)

如果您希望订阅某个主题,可以使用以下指令:

AT+MQTTSUB=0,"test/topic",0
  • 0 是客户端ID。
  • "test/topic" 是订阅的主题。
  • 0 表示QoS等级。

6. 发布消息到MQTT服务器

AT+MQTTPUB=0,"test/topic","Hello World",0,0
  • 0 表示客户端ID。
  • "test/topic" 是要发布的主题。
  • "Hello World" 是要发布的消息内容。
  • 第一个 0 是QoS等级。
  • 第二个 0 表示不保留消息。

发布之后,由于前面订阅了该消息,因此串口会接收到相关信息,如下:
在这里插入图片描述

7. 断开MQTT连接

当你不再需要连接MQTT服务器时,可以使用以下指令断开连接:

AT+MQTTCLEAN=0
  • 0 表示客户端ID。

这是完成WiFi连接、MQTT连接、订阅、发布消息等所有步骤的完整流程。

二、指令数组

为了便于单片机通过串口使用ESP8266模块,将所有上述的AT指令放在一个数组中,单片机可以依次读取并发送这些指令。

const char* at_commands[] = {// 设置为Station模式"AT+CWMODE=1\r\n",// 连接到WiFi网络 (SSID: HM, 密码: 123321123)"AT+CWJAP=\"HM\",\"123321123\"\r\n",// 查询IP地址"AT+CIFSR\r\n",// 设置MQTT客户端配置 (Client_ID: ESP8266, 用户名和密码为空)"AT+MQTTUSERCFG=0,1,\"ESP8266\",\"\",\"\",0,0,\"\"\r\n",// 连接到MQTT服务器 (IP: 192.168.10.120, 端口: 1883)"AT+MQTTCONN=0,\"192.168.10.120\",1883,0\r\n",// 订阅主题 (主题: test/topic, QoS: 0)"AT+MQTTSUB=0,\"test/topic\",0\r\n",// 发布消息到主题 (主题: test/topic, 消息: Hello World, QoS: 0, 不保留)"AT+MQTTPUB=0,\"test/topic\",\"Hello World\",0,0\r\n"
};

三、发布话题给Homeassistant

参考教程https://blog.csdn.net/Hot_Ant/article/details/129904700,了解MQTT向HASS中创建设备和发布状态的过程。总结来说即发布配置->发布状态。

要通过ESP8266发送传感器配置和状态的AT指令,以下是分别配置二进制传感器(运动检测)和发布传感器状态的指令。

1. 配置二进制传感器(运动检测)

传感器的配置主题为 homeassistant/binary_sensor/garden/config,有效载荷用于告诉Home Assistant这个传感器的属性,包括名称、类型和状态主题。

对应的AT指令如下,但是可能是因为指令过长或转义问题,导致返回为ERROR,通过MQTT软件提前配置好再发布状态即可。注意双引号和逗号前面,使用了反斜杠进行转移。

AT+MQTTPUB=0,"homeassistant/binary_sensor/garden/config","{\"name\": null\, \"device_class\": \"motion\"\, \"state_topic\": \"homeassistant/binary_sensor/garden/state\"\, \"unique_id\": \"motion01ad\"\, \"device\": {\"identifiers\": [\"01ad\"]\, \"name\": \"Garden\"}}",0,1

解释:

  • homeassistant/binary_sensor/garden/config 是配置的主题。
  • JSON字符串是传感器的配置,使用了双反斜杠转义双引号。
  • 0 表示QoS为0。
  • 1 表示保留消息(MQTT Retain Flag)。

在这里插入图片描述

在这里插入图片描述

2. 发布传感器状态

当传感器状态发生变化时,需要通过发布消息来更新传感器的状态。

发布状态为“ON”(表示检测到运动)
AT+MQTTPUB=0,"homeassistant/binary_sensor/garden/state","ON",0,0

在这里插入图片描述

发布状态为“OFF”(表示未检测到运动)
AT+MQTTPUB=0,"homeassistant/binary_sensor/garden/state","OFF",0,0

在这里插入图片描述

四、解决发布config报错问题

  1. 尝试了一些方法,均无解,只要缩短一部分长度后,就可以正常OK了,使用完整指令就会报错。
  2. 后续尝试使用esp32进行测试。也是可能这款单片机只有1M的flash导致的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557809.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

10.8学习

1.CAP ★一致性(2PC、3PC、Paxos、Raft) ●强一致性:数据库一致性,牺牲了性能 ACID:原子性、一致性、隔离性、持久性 ●弱一致性:数据库和缓存,延迟双删、重试 ●单调读一致性:…

[面试] java开发面经-1

前言 目录 1.看到你的简历里说使用Redis缓存高频数据,说一下Redis的操作 2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩 3.你的项目中使用了ThreadLocal,那么当有两个请求同时发出时,会怎么处理,可以同时处理两个请求吗 4.使用…

01_InfluxDb

InFluxDb 概览课程地址Flux语言安装使用场景底层原理-数据结构数据价值热数据冷数据 数据只写不改InFluxDb 1.8 生态InFluxDb查询语言 TelegrafChronograph_画面插件Kapacitor InFluxDb 2.2 生态InFluxDb查询语言 Telegrapf 集群集群方案 概览 时序数据库,对时序场景有特别的优…

java web gis 快速搭建开发环境_服务端搭建

前言: 链接:https://pan.baidu.com/s/15i7FxthazW0J87D5jWh5ng?pwd32nd 提取码:32nd 复制这段内容后打开百度网盘手机App,操作更方便哦 Java 环境 jdk 1.8 ; maven ; 中间件: redis 数据库: postgres 1.4 ; postgis 代码管理: git 客户端 开发工…

【每日一题 | 24.10.8】确定字符串是否是另一个的排列

1. 题目2. 解题思路3. 代码实现(AC_Code) 上期回顾:【每日一题 | 24.10.7】Fizz Buzz 经典问题 个人主页:C_GUIQU 归属专栏:每日一题 1. 题目 确定字符串是否是另一个的排列 2. 解题思路 题目核心要求:理解字符串排列…

使用最小二乘法画噪声数据的近似曲线

文章目录 问题MATLAB代码验证数据1验证数据2 问题 已知有系列含有噪声的数据(x , y)用最小二乘法计算m和b。(ymxb) MATLAB代码 disp(This promgram perform a leastsquares fit of an); disp(input data set to a straight line.); n_points input(E…

HTB:Tactics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.Which Nmap switch can we use to enumerate machines when our ping ICMP packets are blocked by the Windows firewall? 2.What does the 3-letter acronym SMB stand for? 3.What port does SMB use to operate at? 4.What comma…

python数据分析与可视化工具介绍-numpy库

NumPy(Numerical Python的简称),是科学计算基础的一个库,提供了大量关于科学计算的相关功能,例如,线性变换,数据统计,随机数生成等。其提供的最核心的类型为多维数组类型&#xff08…

DAMA数据管理知识体系(第7章 数据安全)

课本内容 7.1 引言 概要 数据安全包括安全策略和过程的规划、建立与执行,为数据和信息资产提供正确的身份验证、授权、访问和审计数据安全来源要求 利益相关方政府法规特定业务关注点合法访问需求合同义务语境关系图 图7-2 语境关系图:数据安全业务驱动因…

微信小程序python+uniapp毕业论文选题系统设计与实现 lj141

目录 项目介绍具体实现截图开发者工具介绍技术路线性能/安全/负载方面开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取 项目介绍 考虑到实际生活中在毕业论文选题管理方面的需要以及对该系统认真的分析,将小程序权限按管…

探索循环神经网络RNN:解锁序列数据的奥秘

在这个数据驱动的时代,机器学习模型已经深入到我们生活的方方面面,从智能推荐系统到自然语言处理,无一不彰显其强大的能力。在众多模型中,循环神经网络(Recurrent Neural Network, RNN)以其独特的结构和对序…

STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8

目录 一、教程简介 二、驱动理论讲解 三、CubeMX生成底层代码 四、Keil5编写代码 五、实验结果 一、教程简介 本教程面向初学者,只介绍DS18B20的常用功能,但也能满足大部分的运用需求。跟着本教程操作,可在10分钟内解决DS18b20通信难题。…

基于uniapp+django微信小程序 食品安全信息管理系统

目录 项目介绍具体实现截图开发者工具介绍技术路线性能/安全/负载方面开发语言以及框架介绍python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取 项目介绍 食品安全信息管理系统设计的目的是为用户提供食品信息、科普专栏、食品检测、检测结果、交…

Chromium 中js Fetch API接口c++代码实现(二)

Chromium 中JavaScript Fetch API接口c代码实现(一)-CSDN博客 接着上一篇继续介绍调用,上函数堆栈。 1、打开http://192.168.8.1/chfs/shared/test/test02.html 此标签进程ID12484, 2、打开vs附加上此进程ID12484 3、点击页面测…

Java--IO高级流

缓冲流 缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,BufferedOutputStream 字符缓冲流:BufferedReader,Buf…

用友Yonbuilder 平台使用教程序

用友Yonbuilder 平台使用教程 目录概述需求: 设计思路实现思路分析 免费下载参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

环形链表(c语言)

1.//环形链表 //输入:head [3,2,0,-4], pos 1 //输出:true //解释:链表中有一个环,其尾部连接到第二个节点。 //输入:head [1, 2], pos 0 //输出:true //解释:链表中有一个环,其…

【机器学习】线性回归算法简介 及 数学实现方法

线性回归 简介 利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 数学公式: ℎ_(w) w_1x_1 w_2x_2 w_3x_3 … b w^Txb 概念 ​ 利用回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关…

AI先驱荣获2024诺贝尔物理学奖

瑞典皇家科学院10月8日宣布,将2024年诺贝尔物理学奖授予John J. Hopfield和Geoffrey E. Hinton,以表彰他们利用人工神经网络实现机器学习的奠基性发现和发明。 John J. Hopfield(约翰J霍普菲尔德)美国新泽西州普林斯顿大学 Geoff…

新型僵尸网络针对 100 个国家发起 30 万次 DDoS 攻击

近日,网络安全研究人员发现了一个名为 Gorilla(又名 GorillaBot)的新僵尸网络恶意软件家族,它是已泄露的 Mirai 僵尸网络源代码的变种。 网络安全公司 NSFOCUS 在上个月发现了这一活动,并称该僵尸网络在今年 9 月 4 日…