物联网设备MQTT接入的思考

本文介绍了在物联网项目中使用MQTT协议进行多个设备消息监听的方法。重点探讨了如何利用MQTT的通配符特性(如“+”和“*”)简化对大量设备上传数据的订阅管理,并给出了具体的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.背景

        项目需要接入物联网设备,我从一个小白开始接触,没有系统的学习,靠着理解力和零散的网络资料,一步步的记录小白如何完成任务的。

二.关于多个设备消息监听的问题

        自己已经在本机搭建了MQTT的Server端,也用模拟工具、代码、物联网设备(1个温湿度计)做了连通的测试了。后面再补一篇文章,过程最难的还是网络问题引起的乌龙。

        未来用户的场景,是现场安装设备,安装之后,就需要设置设备。设置好了后,数据都到了云端。那么云端怎么取出这么多的设备信息呢?还是一个一个topic的去订阅么?因为我的物联网设备上传的topic是:WifiSHT/设备id/SHT20。那不是每一个设备上传,我都要去配置监听的topic哦?不同厂家的设备,topic格式会不会不一样呢?

        我第一个思路想到的就是通过一些api获取所有的topic,让用户选择对应的设备。简单找了一下资料,发现activeMQ有对应的API。但是相关资料不多,说明我的方向不太对。

        我之前想,我是否可以写一个表达式,来方便topic名字的监听。顺着向下,发现topic支持通配符的。比如同一个厂家或者系列的产品,以我的温湿度计为例topic可能是WifiSHT/设备id1/SHT20、WifiSHT/设备id2/SHT20、WifiSHT/设备id3/SHT20、。。。。。。那么,我们监听的topic只需要一个 WifiSHT/+/SHT20。这个“+”号就帮我们通配了不同的设备,换句话说,订阅这1个topic就能收到这个系列多个设备回传的数据了。当然,这里的1个topic说法可能不准确,其内部实现的原理不一定是一个topic,可能只是一种通配的方式而已。暂时没有必要深究下去。当然格式不同,可能还有其他的符号。比如测试工具MQTT X添加订阅时的demo就是以“#”号结尾的。#代表多级,类似spring包扫描的**。

三.通配符 “+”和“*”

+:匹配/之间的一段

*:匹配多段

四.参考地址

MQTT 基础--MQTT 主题、通配符和最佳实践 :第 5 部分_网络安全那些事的博客-优快云博客_mqtt主题通配符

感谢原作者

### 如何将树莓派连接到阿里云物联网平台 要实现树莓派与阿里云物联网平台的连接,可以参考以下方法和技术要点: #### 1. **硬件准备** 为了完成树莓派与阿里云IoT平台的连接,需要准备好如下设备和工具: - 树莓派开发板及其配件(电源适配器、MicroSD卡等) - 安装有操作系统(如Raspbian)的树莓派环境 - 网络接入能力(Wi-Fi或以太网) #### 2. **软件配置** 在软件层面,需安装并配置必要的库文件以及依赖项。以下是主要步骤概述: - 使用 `pip` 或其他包管理工具安装 Python SDK 库来支持阿里云 IoT 平台通信功能[^1]。 ```bash sudo pip install aliyun-python-sdk-core-v3 sudo pip install aliyun-python-sdk-iot ``` - 利用 CryptoJS 和 UUID 模块生成唯一标识符以便于身份验证过程中的数据加密处理。 #### 3. **代码实例** 下面提供了一个简单的 Python 脚本示例,展示如何通过 MQTT 协议向阿里云发送消息: ```python import paho.mqtt.client as mqtt from uuid import uuid4 import time # 设置您的产品Key, 设备名称和DeviceSecret product_key = 'your_product_key' device_name = 'your_device_name' device_secret = 'your_device_secret' client_id = f"{product_key}.{device_name}|securemode=3,signmethod=hmacsha1|" username = device_name + "&" + product_key password = get_password(device_secret=device_secret) def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) def main(): client = mqtt.Client(client_id=client_id) client.username_pw_set(username=username,password=password) broker_address="iot-as-mqtt.cn-shanghai.aliyuncs.com" client.on_connect = on_connect try: client.connect(broker_address, port=1883, keepalive=60) while True: payload_json='{"id":"%d","params":{"power":true}}'%(int(time.time())) topic="/sys/" + product_key + "/" + device_name + "/thing/event/property/post"; (rc,mid)=client.publish(topic,payload=payload_json,qos=1) print(f'Message ID {mid} published.') time.sleep(5) except Exception as e: print(e) if __name__ == '__main__': main() ``` 此脚本实现了基本的消息发布操作,并包含了安全认证机制以保障传输的安全性。 #### 4. **参考资料扩展阅读建议** 对于更深入的学习者来说,还可以查阅官方文档或者观看一些实际案例演示视频进一步巩固理解水平。例如,在优快云博客上分享的一篇有关微信小程序调用阿里云IoT API的文章提供了详尽的操作指南;另外一篇讨论VFP与Python对比分析的文章虽然侧重点不同但也值得借鉴思考[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值