☰
物联数据需采集:基于 MixIO 平台实现温湿度与光线传感器数据上云
2026/10/14 3:07:33 网站建设 项目流程
  • 教程
  • 教育
  • 知识库

【免费下载链接】课程

本项目致力于成为跨学科知识的中枢,系统汇聚与持续孵化高质量的课程资源。内容覆盖计算机、人工智能、信息科技、人文教育等多个领域,旨在为学生、教师、自学者及所有终身学习者,构建一个结构清晰、易于访问、持续生长的开放知识库,以降低学习门槛,提升知识流转的效率。 我们诚挚邀请并需要每一位老师、同学及爱好者的智慧与热情。 无论是分享一份笔记、完善一节教程、纠正一个错误,还是参与项目代码的开发,您都可以成为“源师兄”课程生态的共建者。让我们携手,让优质教育资源触手可及,共同塑造一个更有活力的学习社区。

项目地址:https://gitcode.com/yuanshixiong/course
点击查看免费下载

本篇技术指南以人教平台物联网课程"项目七:物联数据需采集"为主线,讲解如何用 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 平台完整使用教程),核心步骤为:

  1. 注册账号:在平台注册页面填写邮箱、密码,完成注册。邮箱就是后续登录与 MQTT 鉴权的用户名。
  2. 登录平台:输入邮箱与密码登录,进入项目管理界面。界面左侧标题栏显示的账户与密码,将用于填写代码中的 MQTT 连接参数。
  3. 新建项目:点击右上角「+」按钮,输入项目名称,确认创建。
  4. 进入项目:在项目卡片右下角点击绿色进入按钮,即可进入项目内部的数据通信界面。

确定主题与连接参数

代码中的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 time

ohcode是项目统一的硬件编程库,一次导入本项目的全部依赖: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()接收三个参数:

参数含义注意事项
ssidWiFi 名称替换为实际路由器名称
psdWiFi 密码替换为实际密码
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()是数据上云的关键调用,五个参数的含义与取值来源如下:

参数含义取值说明
serverMQTT 服务器地址本项目固定为mixio.mixly.cn
portMQTT 服务端口本项目为1883(MQTT 标准明文端口)
client_id客户端标识自定义,建议具有唯一性,避免与平台其他客户端冲突
userMQTT 用户名填登录平台的邮箱
psdMQTT 密码填登录平台后左下方显示的密码,在 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秒,继续下一次循环

主循环按固定节奏执行"采集 → 发布 → 显示"三个动作:

  1. 采集:dhtt.temp()读取温度、dhtt.humi()读取湿度、light().read()读取光线强度。三个读取函数在 项目八:反馈控制有算法 等项目中同样被用于环境数据采集,是 ohcode 中统一的数据读取接口。
  2. 发布:调用三次mqttclient.publish(topic=mqtt_topic, content=...),把温度、光线、湿度依次发布到同一主题。content要求是字符串,因此用str()把数值转成字符串——这一点很容易遗漏,若直接传数值会导致发布失败。
  3. 显示:用 f-string 把三个数据拼成两行文本显示在 OLED 上(\n换行),本地即时可见。
  4. 节奏控制: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)→ 平台监听验证。这套"采集—上云—验证"的流程是仓库中全部物联网项目(远程控制、环境监测、健康记录、农业生产等)的公共地基,掌握本项目即掌握了人教平台物联网课程的核心骨架,后续所有项目都建立在这一数据通道之上。

  • 教程
  • 教育
  • 知识库

【免费下载链接】课程

本项目致力于成为跨学科知识的中枢,系统汇聚与持续孵化高质量的课程资源。内容覆盖计算机、人工智能、信息科技、人文教育等多个领域,旨在为学生、教师、自学者及所有终身学习者,构建一个结构清晰、易于访问、持续生长的开放知识库,以降低学习门槛,提升知识流转的效率。 我们诚挚邀请并需要每一位老师、同学及爱好者的智慧与热情。 无论是分享一份笔记、完善一节教程、纠正一个错误,还是参与项目代码的开发,您都可以成为“源师兄”课程生态的共建者。让我们携手,让优质教育资源触手可及,共同塑造一个更有活力的学习社区。

项目地址:https://gitcode.com/yuanshixiong/course
点击查看免费下载
上一篇:Unison 可计算文档控制台渲染实战:docFormatConsole 与 GHC "strange closure error" 的转录复现
下一篇:Nx 的 Gradle 迁移:将 dev.nx.gradle.project-graph 插件升级到 0.1.13 的完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询