- 教程
- 教育
- 知识库
【免费下载链接】课程
本项目致力于成为跨学科知识的中枢,系统汇聚与持续孵化高质量的课程资源。内容覆盖计算机、人工智能、信息科技、人文教育等多个领域,旨在为学生、教师、自学者及所有终身学习者,构建一个结构清晰、易于访问、持续生长的开放知识库,以降低学习门槛,提升知识流转的效率。 我们诚挚邀请并需要每一位老师、同学及爱好者的智慧与热情。 无论是分享一份笔记、完善一节教程、纠正一个错误,还是参与项目代码的开发,您都可以成为“源师兄”课程生态的共建者。让我们携手,让优质教育资源触手可及,共同塑造一个更有活力的学习社区。
本篇技术指南以人教平台物联网课程"项目七:物联数据需采集"为主线,讲解如何用 ohcode 库在开源鸿蒙主控板上采集温湿度与光线传感器数据,并通过 MQTT 协议实时发布到 MixIO 物联网云平台。读完本文,你将掌握物联网数据采集链路的完整搭建方法:WiFi 联网、MQTT 鉴权连接、传感器数据读取、主题发布与平台侧数据监听的实战全流程。
项目背景:数据从"看得到"到"传得上云"
物联网系统的核心价值在于让设备产生的数据"流动"起来。在之前的项目中,传感器数据通常只显示在主控板的 OLED 屏幕上,人必须站在设备旁边才能看到;而在本项目"物联数据需采集"中,我们把温湿度、光线这些环境数据通过 MQTT 主题发布到云平台,实现数据的远程采集与存储——这是后续远程控制、数据分析、智能决策的地基。
本项目的数据链路可以概括为:
温湿度传感器(DHT) ─┐ 光线传感器(light) ─┼→ 主控板采集 → WiFi 联网 → MQTT 服务器(mixio.mixly.cn:1883) → MixIO 平台数据面板 OLED 本地显示 ────┘主控板作为数据采集端,负责周期性地读取三个传感器的数值,同时做两件事:一是把数据实时显示在本地 OLED 上,二是把数据作为消息内容发布到指定 MQTT 主题。任何订阅了该主题的设备(如 MixIO 平台数据面板、另一块主控板)都能即时收到数据。
准备阶段:硬件与 MixIO 平台账号
硬件清单
本项目需要以下硬件(均为主控板的标准外设):
| 硬件 | 用途 | 说明 |
|---|---|---|
| 开源鸿蒙主控板 | 数据采集与联网控制核心 | 板载 OLED、RGB 灯,支持 WiFi |
| DHT 温湿度传感器 | 采集温度、湿度 | 接入 1 号接口,接口可选1/2/8/12/13/14/15/16 |
| 光线传感器 | 采集环境光线强度 | 使用light()读取板载/外接光线数据 |
| WiFi 路由器 | 提供网络接入 | 主控板仅支持 2.4G WiFi |
在 MixIO 平台注册并创建项目
本项目采用的是 MixIO 物联网平台(MixIO 的完整注册、登录、建项目与数据通信操作详见仓库内的 MixIO 平台完整使用教程),核心步骤为:
- 注册账号:在平台注册页面填写邮箱、密码,完成注册。邮箱就是后续登录与 MQTT 鉴权的用户名。
- 登录平台:输入邮箱与密码登录,进入项目管理界面。界面左侧标题栏显示的账户与密码,将用于填写代码中的 MQTT 连接参数。
- 新建项目:点击右上角「+」按钮,输入项目名称,确认创建。
- 进入项目:在项目卡片右下角点击绿色进入按钮,即可进入项目内部的数据通信界面。
确定主题与连接参数
代码中的mqtt_topic按"用户名/项目名/主题名"三段式结构定义,其含义在源码注释中已明确:
mqtt_topic = "用户名/项目名/主题名" #项目采用mixily的物联网平台,用户名:登陆平台的邮箱;项目名:项目管理中某一个项目名;主题名:自定义| 组成部分 | 取值来源 | 说明 |
|---|---|---|
| 用户名 | 登录平台的邮箱 | 与 MQTT 连接的user参数一致 |
| 项目名 | 项目管理中的某一个项目名 | 必须与平台上创建的项目完全一致 |
| 主题名 | 自定义 | 用于区分同一项目下的不同数据类别 |
核心代码全解析
本项目完整代码如下(原文代码,未做删减):
from ohcode import oled, wifi, mqttclient, dht, pin, light import time mqtt_topic = "用户名/项目名/主题名" #项目采用mixily的物联网平台,用户名:登陆平台的邮箱;项目名:项目管理中某一个项目名;主题名:自定义 #连接WiFI oled.show("WiFi连接中...") wifi.connect(ssid='填入WiFi名', psd='填入WiFi密码', timeout=10000) #请替换为您的WiFi名和WiFi密码,注意主控板仅支持2.4G WiFi oled.show("WiFi连接成功") #连接MQTT mqttclient.connect(server='mixio.mixly.cn', port=1883, client_id='自定义', user='填入登陆平台的用户名', psd='填入登陆平台后左下方密码') #请在mixio平台主页面查找 oled.show("MQTT服务器连接成功") dhtt = dht(1) #设置1号接口的温湿度传感器,根据需要调整接口号(1\2\8\12\13\14\15\16) while True: temp=dhtt.temp() hum=dhtt.humi() lgt=light().read() #读取光线传感器数据 mqttclient.publish(topic=mqtt_topic, content=(str(temp))) mqttclient.publish(topic=mqtt_topic, content=(str(lgt))) mqttclient.publish(topic=mqtt_topic, content=(str(hum))) oled.show(f"温度:{temp}\n湿度:{hum}\n光线:{lgt}") time.sleep(3) #等待3秒,继续下一次循环模块导入与主题定义
from ohcode import oled, wifi, mqttclient, dht, pin, light import timeohcode是项目统一的硬件编程库,一次导入本项目的全部依赖:oled(屏幕显示)、wifi(网络连接)、mqttclient(MQTT 通信)、dht(温湿度传感器)、pin(引脚控制)、light(光线传感器)。time用于控制采集周期。同一套 ohcode 导入与联网模板也出现在仓库中 项目一:远程控制窗户、项目三:设计花卉环境检测系统 等所有物联网项目中,是本课程系列统一的编码范式。
第一步:连接 WiFi
oled.show("WiFi连接中...") wifi.connect(ssid='填入WiFi名', psd='填入WiFi密码', timeout=10000) oled.show("WiFi连接成功")wifi.connect()接收三个参数:
| 参数 | 含义 | 注意事项 |
|---|---|---|
ssid | WiFi 名称 | 替换为实际路由器名称 |
psd | WiFi 密码 | 替换为实际密码 |
timeout | 连接超时时间(毫秒) | 示例为10000,即 10 秒 |
关键限制:主控板仅支持 2.4G WiFi,路由器若开启 5G 与 2.4G 双频合一,需要确保设备可连接到 2.4G 频段。连接前后分别用oled.show()在屏幕上给出"连接中/连接成功"的状态提示,方便现场调试时直观确认。
第二步:连接 MQTT 服务器
mqttclient.connect(server='mixio.mixly.cn', port=1883, client_id='自定义', user='填入登陆平台的用户名', psd='填入登陆平台后左下方密码') oled.show("MQTT服务器连接成功")mqttclient.connect()是数据上云的关键调用,五个参数的含义与取值来源如下:
| 参数 | 含义 | 取值说明 |
|---|---|---|
server | MQTT 服务器地址 | 本项目固定为mixio.mixly.cn |
port | MQTT 服务端口 | 本项目为1883(MQTT 标准明文端口) |
client_id | 客户端标识 | 自定义,建议具有唯一性,避免与平台其他客户端冲突 |
user | MQTT 用户名 | 填登录平台的邮箱 |
psd | MQTT 密码 | 填登录平台后左下方显示的密码,在 MixIO 平台主页面查找 |
其中psd与登录密码不是同一个概念——它是 MixIO 平台为 MQTT 设备接入单独分配的密码,显示在平台主页面左下方,这也是初学者最容易填错的地方。连接成功后 OLED 显示"MQTT服务器连接成功",代表主控板已与云平台建立长连接,可以随时收发数据。
第三步:初始化温湿度传感器
dhtt = dht(1) #设置1号接口的温湿度传感器,根据需要调整接口号(1\2\8\12\13\14\15\16)dht(1)将 DHT 温湿度传感器初始化在 1 号接口。从源码注释与仓库其他项目(如 项目九:文物保护新手段)看,DHT 传感器支持的接口范围为1/2/8/12/13/14/15/16,实际接线时需根据硬件布局调整。注意:接口号一旦改错,传感器将无法读取到有效数据。
第四步:循环采集与发布
while True: temp=dhtt.temp() hum=dhtt.humi() lgt=light().read() #读取光线传感器数据 mqttclient.publish(topic=mqtt_topic, content=(str(temp))) mqttclient.publish(topic=mqtt_topic, content=(str(lgt))) mqttclient.publish(topic=mqtt_topic, content=(str(hum))) oled.show(f"温度:{temp}\n湿度:{hum}\n光线:{lgt}") time.sleep(3) #等待3秒,继续下一次循环主循环按固定节奏执行"采集 → 发布 → 显示"三个动作:
- 采集:
dhtt.temp()读取温度、dhtt.humi()读取湿度、light().read()读取光线强度。三个读取函数在 项目八:反馈控制有算法 等项目中同样被用于环境数据采集,是 ohcode 中统一的数据读取接口。 - 发布:调用三次
mqttclient.publish(topic=mqtt_topic, content=...),把温度、光线、湿度依次发布到同一主题。content要求是字符串,因此用str()把数值转成字符串——这一点很容易遗漏,若直接传数值会导致发布失败。 - 显示:用 f-string 把三个数据拼成两行文本显示在 OLED 上(
\n换行),本地即时可见。 - 节奏控制:
time.sleep(3)让每次循环间隔 3 秒。这个间隔决定了数据上传的频率——间隔越小数据越密集,但对 WiFi 与服务器压力越大;间隔越大数据越稀疏。实际项目中应根据需求调整,例如项目十:健康生活新设备 中注释说明循环内time.sleep(1)会导致按键需长按 1 秒才生效,可见采集周期会影响整个系统的实时性表现。
在 MixIO 数据面板验证数据是否上云
程序运行后,打开 MixIO 平台进入项目,点击右下角「数据」标签切换到数据面板,即可验证数据是否成功上云(操作步骤详见 MixIO 平台完整使用教程 的"数据通信使用"章节):
- 监听主题:在面板左侧选择本项目使用的主题,上方数据监视表中会实时滚动显示主控板发布上来的温度、湿度、光线数值。
- 发送文本数据:填写发送主题与文本内容,点击发送按钮即可向设备下发指令(此能力属于反向控制,配合
mqttclient.received()订阅回调使用,见下文进阶部分)。
上图即 MixIO 平台的数据通信界面,左半部分用于选择与监听主题、查看实时消息流,右半部分用于向设备发送文本或 JSON 数据。看到温度、湿度、光线三个数值以 3 秒为周期持续滚动更新,即代表"物联数据需采集"已完整跑通。
进阶改造:让数据采集更智能
本项目的采集发布模式可以直接扩展成更复杂的物联网应用,仓库中已有多个基于同一模式演进的成熟案例:
1. 带阈值判断的"告警式"发布
项目三:设计花卉环境检测系统 展示了在发布前先做条件判断的思路——只有当温度超过 30 时才发布"温度过高",湿度低于 15 时发布"湿度过低",光线过弱时发布"光线过弱",同时仍周期性发布完整数据:
if temp > 30: mqttclient.publish(topic=mqtt_topic,content='温度过高') #发送话题消息 if hum < 15: mqttclient.publish(topic=mqtt_topic,content='湿度过低') if light < 10: mqttclient.publish(topic=mqtt_topic,content='光线过弱')这种模式把"采集"升级为"采集 + 判断 + 事件上报",既能减少无效消息量,又让远端(如项目九:文物保护新手段 中的博物馆环境监测)能直接收到告警语义的数据。
2. 从"只发不收"到"双向通信"
本项目的mqttclient.publish()是单向上行;仓库中 项目一:远程控制窗户、项目二:利用物联网插座控制台灯 和 项目五:远程控制更便捷 则通过mqttclient.received(topic=..., callback=...)订阅同一主题,把平台侧发送的消息转成设备动作(开窗、亮灯、开锁)。将"采集发布"与"订阅回调"组合,即可构建"采集环境数据 + 远程下发指令"的完整闭环物联网系统。
3. 结构化数据的组织
当数据种类增多时,可将多个数值组织成带标签的字符串发布,如 项目八:反馈控制有算法 中的"土壤湿度:"+str(hum)+",光线:"+str(lgt)、项目十二:农业生产新模式 中的'奶牛编号: '+str(sn)+'\n产奶量: '+str(v)。这类自描述文本让平台侧无需约定字段顺序即可读懂数据含义,也可进一步改造为 MixIO 支持的 JSON 键值对格式(见 MixIO 平台完整使用教程 的"发送 JSON 数据"部分)发送结构化数据。
常见问题与排查思路
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| OLED 一直停在"WiFi连接中..." | WiFi 密码错误,或路由器不支持 2.4G 频段 | 核对ssid/psd,确认路由器开启 2.4G |
| MQTT 连接失败 | user或psd填错 | user必须是注册邮箱;psd是平台主页面左下方的密码,不是登录密码 |
| 平台收不到数据 | mqtt_topic三段结构与平台不一致 | 确认"项目名"与平台创建的项目名完全一致,主题名与数据面板监听的主题一致 |
| 数据乱码或空白 | content传入非字符串 | 确认发布内容已用str()转换 |
| 传感器读数为 0/异常 | 接口号错误或接线松动 | 核对dht(1)的接口号是否在1/2/8/12/13/14/15/16范围内 |
| 客户端频繁掉线 | client_id与其他设备冲突 | 更换为唯一标识 |
小结
"物联数据需采集"项目看似只有短短一个循环,却打通了物联网数据链路的所有关键环节:传感器采集(dht/light)→ 网络接入(wifi.connect)→ 云平台鉴权(mqttclient.connect)→ 数据发布(mqttclient.publish)→ 平台监听验证。这套"采集—上云—验证"的流程是仓库中全部物联网项目(远程控制、环境监测、健康记录、农业生产等)的公共地基,掌握本项目即掌握了人教平台物联网课程的核心骨架,后续所有项目都建立在这一数据通道之上。
- 教程
- 教育
- 知识库
【免费下载链接】课程
本项目致力于成为跨学科知识的中枢,系统汇聚与持续孵化高质量的课程资源。内容覆盖计算机、人工智能、信息科技、人文教育等多个领域,旨在为学生、教师、自学者及所有终身学习者,构建一个结构清晰、易于访问、持续生长的开放知识库,以降低学习门槛,提升知识流转的效率。 我们诚挚邀请并需要每一位老师、同学及爱好者的智慧与热情。 无论是分享一份笔记、完善一节教程、纠正一个错误,还是参与项目代码的开发,您都可以成为“源师兄”课程生态的共建者。让我们携手,让优质教育资源触手可及,共同塑造一个更有活力的学习社区。
相关推荐
基于 MixIO 平台的花卉环境检测系统实战:DHT 温湿度与光线传感器物联网数据上报指南
基于 MixIO 平台的花卉环境检测系统实战:DHT 温湿度与光线传感器物联网数据上报指南 本指南基于仓库中 项目三:设计花卉环境检测系统 https://li
教程教育知识库nanoT5-base-65kBPE-v2分词器深度解析:65kBPE词汇表的技术实现
nanoT5 base 65kBPE v2分词器深度解析:65kBPE词汇表的技术实现 nanoT5 base 65kBPE v2是一款高效的AI模型分词器,其
DistilBERT-base-cased问答系统构建:基于SQuAD数据集的完整实现指南 🚀
DistilBERT base cased问答系统构建:基于SQuAD数据集的完整实现指南 🚀 想要构建一个高效的问答系统吗?DistilBERT base
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考