华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发

目录

前言

1. 华为云

1.1. 创建实例

1.2. 创建产品

1.3. 编辑服务模型

1.4. 注册设备

1.4.1. 复制设备连接参数

1.5. 连接参考代码

2. micropython版-物联网

2.1. 环境搭建

2.2. 实现步骤

2.3. 示例代码

结语


前言

物联网(IoT)技术的快速发展,使得设备间的智能互联成为现实。MQTT协议凭借其轻量级、低功耗和高可靠性,成为物联网通信的核心技术之一。本文以华为云IoT平台MicroPython开发为主线,详细介绍如何通过MQTT协议实现设备与云端的双向通信。

内容涵盖:

  • 华为云IoT平台的实例创建、产品定义、设备注册及连接配置

  • MicroPython环境搭建,实现ESP32等嵌入式设备的Wi-Fi连接与MQTT通信

  • 完整的代码示例,包括设备属性上报、云端指令接收与响应

无论您是物联网开发者、嵌入式工程师,还是对IoT技术感兴趣的爱好者,本文都将帮助您快速掌握设备上云的完整流程,并实现稳定、高效的物联网通信。

1. 华为云

1.1. 创建实例

记得选择华北-北京四区

1.2. 创建产品

1.3. 编辑服务模型

1.4. 注册设备

1.4.1. 复制设备连接参数

1.5. 连接参考代码

参考连接:设备属性上报_设备接入 IoTDA_华为云

参考代码:

import json
import time
import paho.mqtt.client as mqtt
from MqttSign import AuthIfo# pip install paho-mqtt==1.6.1
# 1. 去到设备界面复制设备ID
# 2. 复制设备mqtt联网参数# 订阅的话题
subTopic = "$oc/devices/xxxxxxxxxxxxxxx/sys/properties/set/request_id=123"
# 发布的话题
pubTopic = "$oc/devices/xxxxxxxxxxxxxx/sys/properties/report"port = 1883keepAlive = 300"""
{"username": "x","password": "x","clientId": "x","hostname": "x.iot-x.cn-north-4.myhuaweicloud.com","port": 8883,"protocol": "MQTTS"
}
"""
username="x"
password= "x"
clientId= "x"
hostname= "x.iot-mqtts.cn-north-4.myhuaweicloud.com"client = mqtt.Client(clientId)
client.username_pw_set(username=username, password=password)def on_connect(client, userdata, flags, rc):if rc == 0:print("Connect huaweicloud IoT Cloud Sucess")else:print("Connect failed...  error code is:" + str(rc))def on_message(client, userdata, msg):topic = msg.topicpayload = msg.payload.decode()print("receive message ---------- topic is : " + topic)print("receive message ---------- payload is : " + payload)# {"paras":{"switch":1},"service_id":"heima8","command_name":"cmd_switch"}# json格式的字符串转成python里面的数据结构,字典data = json.loads(payload)print("switch:",data['paras']['switch'])# 回复服务器# $oc/devices/{device_id}/sys/properties/set/response/request_id={request_id}topic = "$oc/devices/67d92038dc85c43dcb35a707_heima8/sys/properties/set/response/request_id=123"client.publish(topic, "post_payload")if ("thing/service/property/set" in topic):on_thing_prop_changed(client, msg.topic, msg.payload)def on_thing_prop_changed(client, topic, payload):post_topic = topic.replace("service","event")post_topic = post_topic.replace("set","post")Msg = json.loads(payload)params = Msg['params']post_payload = "{\"params\":" + json.dumps(params) + "}"print("reveice property_set command, need to post ---------- topic is: " + post_topic)print("reveice property_set command, need to post ---------- payload is: " + post_payload)client.publish(post_topic, post_payload)def connect_mqtt():client.connect(hostname, port, keepAlive)return clientdef publish_message():# publish 5 messages to pubTopic("/a1LhUsK****/python***/user/update")for i in range(50):data = {"services": [{"service_id": "heima8","properties": {"switch": i,},}]}message = json.dumps(data)client.publish(pubTopic, message)print("publish msg: " + str(i))print("publish msg: " + message)time.sleep(2)def subscribe_topic():# subscribe to subTopic("/a1LhUsK****/python***/user/get") and request messages to be deliveredclient.subscribe(subTopic)print("subscribe topic: " + subTopic)client.on_connect = on_connect
client.on_message = on_message
client = connect_mqtt()
client.loop_start()
time.sleep(2)subscribe_topic()
publish_message()while True:time.sleep(1)

2. micropython版-物联网

2.1. 环境搭建

安装umqtt.simple包

2.2. 实现步骤

  1. 准备好阿里云设备连接参数
  2. 连接wifi
  3. 创建MQTTClient对象
  4. 订阅消息
  5. 定时发布消息

  1. 准备阿里云设备参数

  1. 连接wifi
def ConnectWifi(ssid, passwd):global wlanwlan = network.WLAN(network.STA_IF)  # create a wlan objectwlan.active(True)  # Activate the network interfacewlan.disconnect()  # Disconnect the last connected WiFiwlan.connect(ssid, passwd)  # connect wifiprint("开始联网...")while (wlan.ifconfig()[0] == '0.0.0.0'):time.sleep(1)print("联网成功:",wlan.ifconfig())

  1. 创建MQTTClient

该操作api最后参数为维持心跳的时长,每隔60s就给服务器发消息,告诉服务器设备还活着

client = MQTTClient(CLIENT_ID, SERVER, 1883, username, password, 60) 
  1. 订阅消息
def subscribe_callback(topic, msg):msg = json.loads(msg)topic = topic.decode()print("接收到topic",topic)if(topic == subscribe_TOPIC):if msg['params']['AlarmSwitch'] !=0:         led.value(0)   else: led.value(1)# 设置订阅消息回调函数
client.set_callback(subscribe_callback)  # set callback
# 订阅话题
client.subscribe(subscribe_TOPIC)  # client subscribes to a topic
  1. 等待用户数据
 while True:client.wait_msg() 

2.3. 示例代码

#-*-coding:utf-8-*-
from umqtt.simple import MQTTClient
from machine import Pin
import network
import time
import machine
import dht
from machine import Timer
import json"""
{"ProductKey": "k0ejus4OoQl","DeviceName": "5Lq9OGQODLusHlBp97fl","DeviceSecret": "307bf81677628905e79784b4d2f65ace"
}{"clientId":"k0ejus4OoQl.5Lq9OGQODLusHlBp97fl|securemode=2,signmethod=hmacsha256,timestamp=1733748536747|",
"username":"5Lq9OGQODLusHlBp97fl&k0ejus4OoQl",
"mqttHostUrl":"iot-06z00epnznwak8t.mqtt.iothub.aliyuncs.com",
"passwd":"929e8ea099ddb639608637e4088e6ff75f617c358b954ab3c7d6f0f15f24fecc",
"port":1883}"""#---以下的参数值都需要根据自己的环境修改-----------------------------------------------
led=Pin(48,Pin.OUT) #ESP32的引脚2接了LED灯,可根据自己的ESP32板子的LED引脚来设置SSID = "icheima"  #填写自己的WIFI名称
PASSWORD = "abcdefgh"   #填写自己的WIFI密码SSID = "SUIXING-Hotel"  #填写自己的WIFI名称
PASSWORD = ""   #填写自己的WIFI密码SERVER = "iot-06z00epnznwak8t.mqtt.iothub.aliyuncs.com"  # mqttHostUrl
CLIENT_ID = "k0ejus4OoQl.5Lq9OGQODLusHlBp97fl|securemode=2,signmethod=hmacsha256,timestamp=1733748536747|"  # clientId
username = "5Lq9OGQODLusHlBp97fl&k0ejus4OoQl" #username
password = "929e8ea099ddb639608637e4088e6ff75f617c358b954ab3c7d6f0f15f24fecc"  #密码
publish_TOPIC = "/sys/k0ejus4OoQl/5Lq9OGQODLusHlBp97fl/thing/event/property/post"
subscribe_TOPIC = "/sys/k0ejus4OoQl/5Lq9OGQODLusHlBp97fl/thing/service/property/set"
#---以上的参数值都需要根据自己的环境修改-----------------------------------------------client = Nonewlan = Nonei = 0def ConnectWifi(ssid, passwd):global wlanwlan = network.WLAN(network.STA_IF)  # create a wlan objectwlan.active(True)  # Activate the network interfacewlan.disconnect()  # Disconnect the last connected WiFiwlan.connect(ssid, passwd)  # connect wifiprint("开始联网...")while (wlan.ifconfig()[0] == '0.0.0.0'):time.sleep(1)print("联网成功:",wlan.ifconfig())def subscribe_callback(topic, msg):msg = json.loads(msg)topic = topic.decode()print("接收到topic",topic)if(topic == subscribe_TOPIC):if msg['params']['AlarmSwitch'] !=0:         led.value(0)   else: led.value(1)def publish_message(mytimer):global clientglobal ii+=1try:request_params = {"CurrentTemperature": 11+i,"CurrentHumidity": 120+i,"CurrentVoltage": 120+i,"AlarmSwitch":1+i}request = {"id": 1,"version": "1.0","params": request_params,"method": "thing.event.property.post"}message = json.dumps(request)print('发布消息============================')print(message)client.publish(topic=publish_TOPIC, msg=message, retain=False, qos=0)print("发布消息成功")except Exception as e:print('exception:', e)mytimer.deinit()def wifi_deng_run():global clientglobal ledglobal wlanprint('物联网点灯大师启动...')try:ConnectWifi(SSID, PASSWORD)client = MQTTClient(CLIENT_ID, SERVER, 0, username, password, 60)  # create a mqtt clientprint('client:%s' % str(client))led.value(1)client.set_callback(subscribe_callback)  # set callbackclient.connect()  # connect mqttclient.subscribe(subscribe_TOPIC)  # client subscribes to a topicmytimer = Timer(0)mytimer.init(mode=Timer.PERIODIC, period=2000, callback=publish_message)while True:client.wait_msg()  # wait messageexcept Exception  as ex_results:print('exception1', ex_results)return "FAILED"finally:if (client is not None):led.value(0)client.disconnect()wlan.disconnect()wlan.active(False)print("重新连接")return 'FAILED'while (True):if wifi_deng_run() == 'FAILED':print('FAILED,retry to connect')time.sleep(5)

结语

本文通过华为云IoT平台和MicroPython的结合,展示了MQTT协议在物联网中的强大能力。从云端实例配置到嵌入式设备开发,我们一步步实现了设备与云的高效通信,并完成了数据上报与远程控制功能。

未来,随着5G、边缘计算等技术的发展,物联网的应用场景将更加丰富。希望本文的实战指南能为您提供清晰的开发思路,助力您构建更智能、更可靠的物联网系统。如果您在实践过程中遇到问题,欢迎查阅华为云官方文档或社区论坛,共同探索物联网的无限可能! 🚀

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025-04-30 AIGC-如何做短片视频

摘要: 2025-04-30 AIGC-如何做短片视频 如何做短片视频: 一、画图修图 1.保存视频(无水保存) 2.文案提取(提取文案) 3. DeepSeek(提示词) 4.小梦Ai(图片视频) 5.修图Ai 6.扩图Ai 7.养生…

硬件工程师面试常见问题(10)

第四十六问:锁存器,触发器,寄存器三者的区别 触发器:能够存储一位二值信号的基本单元电路统称为 "触发器"。(单位) 锁存器:一位触发器只能传送或存储一位数据,而在实际工…

外部访问 Kubernetes 集群中 MQ 服务的方案

外部访问 Kubernetes 集群中 MQ 服务的方案 当您在 Kubernetes 集群中部署了消息队列服务(如 RabbitMQ、Kafka、ActiveMQ 等)后,以下是外部客户端访问这些服务的几种可靠方法: 一、基础访问方案 1. NodePort 方式暴露服务 # M…

论文笔记(八十二)Transformers without Normalization

Transformers without Normalization 文章概括Abstract1 引言2 背景:归一化层3 归一化层做什么?4 动态 Tanh (Dynamic Tanh (DyT))5 实验6 分析6.1 DyT \text{DyT} DyT 的效率6.2 tanh \text{tanh} tanh 和 α α α 的消融实验…

软考中级-软件设计师 操作系统(手写笔记)

第一章:基础知识 第二章:进程管理 状态转换图 进程同步机制 信号量机制 信号量题 死锁 第三章:存储管理 基础知识 分页存储管理 分段存储管理 段页式存储管理 页面置换算法 第四章:文件管理 基础知识 索引分配 空闲存储空间的管…

ubuntu 部署moodle

通过地址https://download.moodle.org/releases/latest/选择下载,下载两种压缩包都特别慢(有可能无法下载)。 可以使用下面git下载项目 注意图中php、mysql等版本要求,本次采用Ubuntu22.04下 nginxphp8.2mysql8.4部署 mkdir /var…

python实战项目67:空气质量在线检测平台js逆向

python实战项目67:空气质量在线检测平台js逆向 一、需求介绍二、完整代码一、需求介绍 项目需求是获取某个城市(以北京市为例)历年(2013年12月至2025年4月)的空气质量数据,字段包括日期、AQI、质量等级、PM2.5、PM10、NO2、CO、SO2等。改网站的网址是“https://www.aqis…

【Linux】记录一个有用PS1

PS1 是用来定义shell提示符的环境变量 下面是一个带有颜色和丰富信息的 Linux PS1 配置示例,包含用户名、主机名、路径、时间、Git 分支和退出状态提示: # 添加到 ~/.bashrc 文件末尾 PS1\[\e[1;32m\]\u\[\e[m\] # 绿色粗体用户名 PS…

Python PyTorch库【机器学习框架】全面深入讲解与实践

一、PyTorch 核心概念 1. 定义与发展背景 PyTorch 是由 Facebook AI Research (FAIR) 开发的开源机器学习框架,2016 年首次发布。其核心特性包括: 动态计算图(Define-by-Run)GPU 加速张量计算自动微分系统丰富的神经网络模块 …

呼叫中心座席管理系统:智能升级,高效服务

在数字化转型加速的今天,客户服务体验已成为企业竞争力的核心要素。传统 呼叫中心系统 依赖硬件设备、人工操作的模式已无法满足高效、智能、灵活的现代企业需求。畅信达呼叫中心 座席管理系统 V5.0应运而生,以WEBRTC软电话接入、智能座席辅助、知识库管…

时态--00--总述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 时态句子结构时态标志词 时态 句子结构 时态标志词

算法每日一题 | 入门-顺序结构-字母转换

字母转换 题目描述 输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。 输入格式 无 输出格式 无 输入输出样例 #1 输入 #1 q输出 #1 QC 首先我们要知道,C字符的所有转换形式都是依照ASCII码来的。 所以&…

晶振:从消费电子到航天领域的时间精度定义者

从手表到卫星:晶振如何在不同领域定义时间精度 在时间的长河中,人类对时间精度的追求永无止境。从古老的日晷到如今精密的计时仪器,每一次进步都离不开技术的革新。而晶振,作为现代计时的核心元件,在不同领域发挥着至…

短视频矩阵系统贴牌开发实战:批量剪辑文件夹功能设计与实现

摘要:在短视频矩阵系统的开发中,批量处理功能是提升运营效率的关键。本文将深入探讨如何实现基于文件夹的短视频批量剪辑功能,涵盖技术选型、核心功能实现及代码示例。 一、需求背景与场景价值 在短视频矩阵运营场景中,运营者常面…

读书笔记--华为从偶然到必然之创新与技术开发阅读有感

最近继续阅读一本讲述华为研发投资与管理实践方面的书籍,分享给大家。华为在创新与技术研发方面有体系化、系统化和延续性。创新是企业的生命线,是企业发展的不竭动力,同时将企业文化与创新精神进行了融合,华为的企业文化强调以客…

基于DeepSeek与HTML的可视化图表创新研究

一、研究背景 在当今数字化时代,数据呈指数级增长,广泛渗透于社会各个领域。无论是商业运营、科学研究,还是公共管理等方面,海量数据蕴含着丰富的潜在价值,成为驱动决策优化、推动业务发展、促进科学创新的关键要素。数…

K8S - 命名空间实战 - 从资源隔离到多环境管理

引言 在传统的物理机或虚拟机环境中,不同业务应用共享资源,容易导致权限冲突、资源争用和管理混乱。Kubernetes 通过 命名空间(Namespace)实现资源逻辑隔离,将集群划分为多个虚拟子集群,从而解决以下问题&…

Unity3D仿星露谷物语开发40之割草动画

1、目标 当Player选择Scythe后,鼠标悬浮在草上,会显示绿色光标。鼠标左击,会触发割草的动画。 2、优化Settings.cs脚本 添加以下两行代码: // Reaping(收割) public const int maxCollidersToTestPerRe…

【LLM】基于 Ollama 部署 DeepSeek-R1 本地大模型

本文详细介绍如何在 Linux 和 Windows 环境下,通过 Docker Compose 整合 Ollama 和 Open WebUI,部署 DeepSeek-R1 大语言模型,并提供 GPU 加速支持。无论你是开发者还是 AI 爱好者,均可通过本指南快速搭建私有化 GPT 环境。 一、环境准备 1. Docker 与 Docker Compose 安…

深度体验两年半!MAC 硬件好物分享|屏幕、挂灯、键盘、鼠标

写在前面 最近快五一放假了,所以写点轻松一点的文章~ 这篇文章就介绍这两年半来,我一直在用MAC硬件搭子!!而买这些硬件设备的钱都是一行行代码写出来的!! 我的MAC是21款14寸 m1 pro 32512版本,22年年底在…