esp8266WiFi模块通过MQTT连接华为云
esp8266WiFi模块通过MQTT连接华为云
- 总结:
- 一、 MQTT透传AT固件烧录
- 二、 串口调试
- 2.1 设置模块为STA模式
- 2.2 连接WiFi
- 2.3 设置MQTT的登陆用户名与密码
- 2.4 设置MQTT的ClientID
- 2.5 设置MQTT接入地址
- 2.6 订阅设备属性上报的主题
- 2.7 上传数据
- 2.8 平台下发命令
- 2.9 华为云物联网平台的->监控运维->在线调试,完成命令下发
- 三、示例代码
最近突然想做物联网的项目,做一个类似远程控制家里的设备,比如控制灯,电视机,空调这样的,同时能够将家里的温湿度等信息可以实时上传到手机里。
刚开始认为这个不就是一个很简单的项目嘛,几个小时之内就能做出来,可是没想到诸事不顺,遇到各种各样的bug,最后竟然花了我周六和周末两个下午才做出来做出来(不要问为什么是周六和周末的下午,因为早上起不来),最后终于调通了因此写这篇文章来记录一下。
我手里正好有一块正点原子的esp8266,并且以前正好参加过华为云的训练营ModelBoxAI,了解一点华为云的知识,然后就用这两个东西来度过愉快的周末。
参考链接: ESP8266接入华为云物联网平台
总结:
坑一:esp8266出厂固件不支持MQTT功能,必须自己在链接 AT固件汇总 上下载。
坑二:下载固件的时候一定要注意你用的ESP8266系列模组的型号(这里我刚开始没注意,花了我很久时间)。
坑三:正点原子esp8266型号是esp-01,固件必须用1112_esp8266-4M。
坑四:烧录的时候注意要把GPIO0接地,才能进入烧录模式。
坑五:找到华为云平台接入地址,且保证平台在线,我这里是用的免费版。
一、 MQTT透传AT固件烧录
我最终使用的是stm32+AT指令控制esp01接入华为云联网平台完成数据上报与命令处理,在开发的时候先用usb-ttl模块连接esp8266调试
出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件烧录。
在这里有个问题,根据下面官网图,我用的esp-01,Flash是8M
应该下载 MQTT 透传AT固件(固件号:1471)
可是我下载进去后,总是卡在 连接的第三步
AT+MQTTUSERCFG=0,1,"NULL","填写用户名","填写密码",0,0,""
AT命令输入后,总是返回error,这里卡了我好久。
在尝试各种方法之后,排除了所有可能性之后,我开始怀疑是不是我烧录的固件错了?
尼玛,不可能啊?官方怎么会错?


然后我下载了官方给的两个固件,如下图,最后成功了。
这里我也不知道为什么会这样,如果有懂的小伙伴可以在评论区解答一下。

二、 串口调试
2.1 设置模块为STA模式
AT+CWMODE=1
2.2 连接WiFi
AT+CWJAP="填写wifi名称","填写WiFi密码"
2.3 设置MQTT的登陆用户名与密码
AT+MQTTUSERCFG=0,1,"NULL","填写用户名","填写密码",0,0,""
用户名与密码为华为云MQTT三元组的相关信息,可以在链接: MQTT ClientId生成工具生成
2.4 设置MQTT的ClientID
AT+MQTTCLIENTID=0,"填写ClientID"
设置MQTT的ClientID,ClientID华为云MQTT三元组的相关信息,在上一步骤中获取的三元组中查看
2.5 设置MQTT接入地址
AT+MQTTCONN=0,"填写MQTT接入的地址",1883,1
设置MQTT接入地址,华为云物联网平台的地址,具体参考控制台首页的平台接入地址
2.6 订阅设备属性上报的主题
AT+MQTTSUB=0,"订阅的主题",1
完成属性上报的话需要先订阅设备属性上报的主题,此处可填写为:
$oc/devices/填写设备ID/sys/properties/report
2.7 上传数据
AT+MQTTPUB=0," 订阅的主题 ","上报的json数据",0,0
上报的json数据:
$oc/devices/64047c741eaf704179abaa58_Temp_test/sys/properties/report ","{\"services\":[{\"service_id\":\"esp8266_data\"\,\"properties\":{\"temp\": 100}}]}
建议大家完成这步时,先使用MQTT.fx进行设备属性上报测试,确保数据无误正常上传。
在完成上面的每一步时,系统都会打印一个OK
2.8 平台下发命令
AT+MQTTSUB=0,"订阅的主题topic ",1
我们在这填写的是平台下发命令的主题:$oc/devices/填写设备ID/sys/commands/#
2.9 华为云物联网平台的->监控运维->在线调试,完成命令下发
三、示例代码
AT+MQTTUSERCFG=0,1,"NULL","6404eaf704179abaa58_Temp_test","3859a228b3bcdd143d94eff8198d58bb801b820e528b96ea6ca6ece86",0,0,""OK
AT+MQTTCLIENTID=0,"64047c7704179abaa58_Temp_test_0_0_2023030511"OK
AT+MQTTCONN=0,"04dcad.st1.iotda-device.cn-north-4.myhuaweicloud.com",1883,1
+MQTTCONNECTED:0,1,"04d3ad.st1.iotda-device.cn-north-4.myhuaweicloud.com","1883","",1OK
AT+MQTTSUB=0,"$oc/devices/64047cf704179abaa58_Temp_test/sys/properties/report",1OK
AT+MQTTPUB=0," $oc/devices/6404eaf704179abaa58_Temp_test/sys/properties/report ","{\"services\":[{\"service_id\":\"esp8266_data\"\,\"properties\":{\"temp\": 100}}]}",0,0OK
相关文章:
esp8266WiFi模块通过MQTT连接华为云
esp8266WiFi模块通过MQTT连接华为云总结:一、 MQTT透传AT固件烧录二、 串口调试2.1 设置模块为STA模式2.2 连接WiFi2.3 设置MQTT的登陆用户名与密码2.4 设置MQTT的ClientID2.5 设置MQTT接入地址2.6 订阅设备属性上报的主题2.7 上传数据2.8 平台下发命令2.9 华为云物…...
苹果新卫星专利公布,苹果Find My功能知多少
根据美国商标和专利局(USPTO)公示的清单,苹果公司获得了一项新的卫星专利,可在非地面网络(Non-Terrestrial Networks,NTN)中定位用户设备(iDevice、MacBook 等)。 在专利…...
[ICLR‘22] DAB-DETR: Dynamic Anchor Boxes Are Better Queries for DETR
paper: https://arxiv.org/pdf/2201.12329.pdfcode: GitHub - IDEA-Research/DAB-DETR: [ICLR 2022] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR将位置相关性计算显式的引入到decoder中,通过box坐标(x, y, w, h) 影响Q和K的相关性计算。特征图要有…...
双周赛99(贪心、数学、区间合并计算、换根DP)
文章目录双周赛99[6312. 最小和分割](https://leetcode.cn/problems/split-with-minimum-sum/)贪心[6311. 统计染色格子数](https://leetcode.cn/problems/count-total-number-of-colored-cells/)找规律[6313. 统计将重叠区间合并成组的方案数](https://leetcode.cn/problems/c…...
OpenText Exceed TurboX(ETX) 客户案例——弗吉尼亚理工大学
弗吉尼亚理工大学简化了高性能计算的使用。OpenText Exceed TurboX 提供高性能图形远程应用程序访问,提高工作效率 挑战 图形界面响应缓慢,影响用户使用; 对复制应用程序输出文件进行本地分析时,影响带宽和速度; 使用…...
【Python】torch.norm()用法解析
【Python】torch.norm()用法解析 文章目录【Python】torch.norm()用法解析1. 介绍1.1 p-范数1.2 Frobenius 范数1.3 核范数2. API3. 示例1. 介绍 torch.norm()是对输入的tensor求对应的范数。tensor的范数有以下三种: 1.1 p-范数 1.2 Frobenius 范数 即ÿ…...
C++核心编程<内存分区模型>(1)
C核心编程<内存分区模型>1.内存分区模型1.1内存分区模型概述1.2内存分区的意义1.3程序允许前1.3.1代码区1.3.2全局区1.3.2.1全局区的演示1.4程序运行后1.4.1栈区1.4.1.1栈区演示1.4.2堆区1.4.2.1堆区演示1.5new操作符1.5.1new操作的概述1.内存分区模型 1.1内存分区模型概…...
电路基础(1)电路模型和电路定律
电路中的电压、电流之间具有两种约束,一种是由电路元件决定的元件约束;另一种是元件间连接而引入的几何约束(就是拓扑约束),后者由基尔霍夫定律来表达。基尔霍夫定律是集总参数电路的基本定律。 1.电路和电路模型电源又…...
pytest 基础
pytest安装 安装 pip install -U pytest 验证安装 pytest --version 约束: 所有的测试文件名都需要满足test_ *.py格式或* _test.py格式。 测试文件中的测试类以Test_开头,并且不能带有 init 方法。 测试类中可以包含一个或多个test_开头的函数。 步骤…...
软测入门(七)python操作数据文件(Json、yaml、csv、excel、xml)
python操作文件 txt文件 read() : 读取所有readline() : 读取一行readlines() : 读取所有,且以行为单位,放入list列表中 file open(r"F:\abc.txt", "r", encoding"utf-8") # 以utf-8格式读取文件 # 读取所有 # print…...
【小程序】django学习笔记1
网页能用,不知道小程序能不能用。应该能吧。。。。。创建django程序文件包,xxx处是给该文件夹起个名django-admin startproject xxx一个project是由很多个app(小应用)组成的在文件夹目录下创建一个app,xxx处给该app起个…...
MySQL常用函数整理
MySQL常用函数整理sql函数分类一、流程控制1、判断值为null或空字符串2、IF函数3、IFNULL函数4、CASE函数(1) 相当于switch case的作用(2) 相当于if elseif的作用5、COALESCE函数二、字符串类(GBT答案)1、用于select、insert等子句中2、用于where子句中其…...
设计模式—“组件协作”
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式有:Template Method、Observer、Strategy 一、Template Method 动机 在软件构建过程中,对于某一…...
vue里使用driver.js实现项目功能向导指引
介绍 https://github.com/kamranahmedse/driver.js driver.js 是一个轻量级、无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的、高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器。 安装 npm …...
详解JAVA类加载
目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类…...
高斯分布、高斯混合模型、EM算法详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细…...
[Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用
目录 0.前言 1.C / C ->文件操作 1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 1.1.2 C语言文件的追加操作 1.1.3 C语言文件的读取 1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 1.2.2 C文件读取 1.2.3 文件追加 2.三个默认输入输出流 2.1 C语言中的三…...
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
去重删除有序数组中的重复项题目来自:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/题目描述给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数…...
FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持
目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利:工程代码的获取1、前言…...
【建议收藏】超详细的Canal入门,看这篇就够了!!!
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
