它要解决什么
温室管理需要在采集与控制之间建立稳定的消息链路,并支持手动与智能两种模式的切换。本项目将环境采集、土壤执行与手机端操作连接为一套端到端系统。
从传感器采集到手机端实时控制,一套完整的智慧农业物联网系统。
两块开发板各司其职,MQTT 消息中转,HarmonyOS 全功能终端。
SmartShed 是一套面向智慧农业的物联网系统,覆盖从温室感知到手机控制的完整链路。两块运行 OpenHarmony 的 Hi3861 开发板分别承担传感器采集与执行器控制,通过 EMQX 的 MQTT 服务中转消息;HarmonyOS 应用展示温湿度、光照与土壤水分,并提供远程管理入口。
温室管理需要在采集与控制之间建立稳定的消息链路,并支持手动与智能两种模式的切换。本项目将环境采集、土壤执行与手机端操作连接为一套端到端系统。
RGB 板负责环境数据采集,SOI 板负责执行器控制,两块板各自运行 OpenHarmony 并接入同一个 MQTT 服务端。上行数据与下行指令通过约定的 Topic 分隔。
板端使用 OpenHarmony LiteOS-M 与 C 语言;消息层为 EMQX 的 MQTT 发布订阅;应用端为 ArkTS / ArkUI 编写的 HarmonyOS 应用,包含自行实现的 MQTT 客户端与 HDS 界面。
嵌入式与应用两个仓库及课程报告均已公开,页面收录数据流、硬件映射、线程设计与 Glass 形态适配。实物复现需要对应的传感器、执行器、网络环境与 broker 配置。
2025-2026 学年第二学期课程设计报告,汇报人:陈梓睿(Ray Chen)
Smart Shed(智慧大棚)是一套基于开源鸿蒙 OpenHarmony和华为鸿蒙 HarmonyOS NEXT的智慧农业物联网控制系统。 简单来说就是:两块开发板负责感知和控制环境参数,通过 MQTT 协议跟手机 App 实时通信, 最终实现温室里温度、湿度、光照、土壤水分的自动监测与智能调控。
OpenHarmony + Hi3861 × 2
传感器采集 & 执行器控制
EMQX MQTT Broker
消息中转 & Topic 路由分发
HarmonyOS NEXT (API23)
Mate 70 Pro+ / MatePad Pro
整体架构、踩过的坑、做了哪些创新
嵌入式端采集数据 → 服务端中转消息 → 手机端显示与控制
OpenHarmony 1.0 Release
Rayawa/rgb @ HiSilicon-Hi3861
Rayawa/soi @ HiSilicon-Hi3861
传感器采集 + OLED 显示
PWM/GPIO 执行控制
MQTT 5.0 WebSocket
wss://broker.emqx.io:8084
@MQTTX
公网消息中转
Topic 路由分发
HarmonyOS 6.1.0 (API23)
Smart Shed @ Mate 70 Pro+
Smart Shed @ MatePad Pro 12.2
实时数据显示
手动 / 智能双模式
开发过程中实际遇到的问题
环境感知板(RGB)和土壤执行板(SOI)物理隔离、逻辑解耦,各管各的又互相配合。
HarmonyOS 端完全从 TCP Socket 开始手搓 MQTT 报文,不依赖任何第三方库。
集成鸿蒙官方 Design System 组件库:沉浸式导航、引力动效、光场背景。
手动模式自由调档位;智能模式根据阈值自动决策,后台线程安全常驻运行。
额外做了手表端的 Glass 应用形态,沉浸式材质加气态动效。
离线自动检测(5s 超时)、断线指数退避重连、GlobalLogBus 日志总线全方位兜底。
发布/订阅架构原理与数据流设计
MQTT 是一种轻量级的消息协议,专门为物联网低带宽场景设计的
嵌入式端 Hi3861 作为发布者,把传感器数据打包成 JSON 发到指定 Topic。
EMQX 充当 MQTT Broker,接收消息后按 Topic 规则转发给对应的订阅者。
HarmonyOS App 订阅相关 Topic 后就能收到传感器数据,同时也能下发控制指令。
数据怎么从硬件一路跑到手机上,以及操作怎么传回硬件执行
扩展板上的传感器采集原始数据 → ADC 读光照/土壤湿度,I2C 读 AHT20 温湿度
Hi3861 把数据转成 JSON 格式,通过 MQTT PUBLISH 报文发给 EMQX Broker
EMQX 收到消息后按 Topic 规则分发给已订阅的客户端
HarmonyOS 接收并解析消息 → @StorageLink 更新状态 → UI 数字刷新 / 智能模式判断阈值
手动模式拖滑块调档位,或者智能模式下阈值越界自动生成控制指令
HarmonyOS 把控制指令转成 MQTT 报文,经 EMQX 分发出去
Hi3861 收到消息后解析主题和内容 → 控制 GPIO/PWM 输出 → 风扇/水泵/补光灯动作
OpenHarmony LiteOS-M + CMSIS-RTOS 多线程,纯 C 语言开发
负责"看环境"和"本地显示"
SSD1306 OLED (128×64) 实时刷新温湿度和光照数据
负责"测土壤"和"干活"
大分功能、小分模块,清晰好维护
Wi-Fi 连接、MQTT 通信、OLED 驱动都放这里。I2C 互斥锁也在这里管理,防止多线程抢总线。
分两个子目录:
两个开发板的 .gn 构建文件统一管理。条件编译按板卡动态启用模块,加新板子只需加个 gn 文件。
CMSIS-RTOS 管理 LiteOS-M 实时内核下的并行任务
smart_shed_all.c,栈大小 8KB每个功能模块独立运行在 LiteOS 内核中,各自有栈空间(4KB~8KB)和优先级,互不阻塞:
AHT20 / I2C
ADC 采样
ADC 采样
GPIO/PWM 控制
SSD1306 渲染
Paho 发布/订阅
AHT20 温湿度传感器和 OLED 显示屏共用 I2C0 总线(GPIO13 & GPIO14),两个线程同时访问就会出问题。解决办法:
温湿度采集线程和 OLED 刷新线程同时读写 I2C0,导致数据错乱
用 i2c0_lock/unlock 互斥锁,每次读写前后加锁解锁,保证同一时刻只有一个设备占用总线
I2C0-0x78 GPIO13&14
oled_ssd1306.c
ADC_CH4
soil_moisture_task.c
P06
water_pump_task.c
P08
fan_task.c
I2C0-0x78 GPIO13&14
oled_ssd1306.c
I2C0-0x44
temp_and_hum_task.c
ADC_CH4
light_intensity_task.c
GPIO10/11/12=>PWM1/2/3
led_task.c
Wi-Fi 连上 → TCP 通了 → MQTT 收发 → 执行器动起来
连接 SSID "Rayawa",DHCP 拿到 IP 后进入 lwIP TCP 通信
Paho 库只管报文的编解码,TCP Socket 的完整生命周期得自己管理
传感器数据以 JSON 格式上报到 EMQX Broker
收到 PUBLISH 报文后用 MQTTDeserialize_publish() 解析主题和负载,再通过 mqtt_apply_command() 设置全局变量。执行器线程持续读这些变量来控制 GPIO/PWM,驱动风扇、水泵等设备工作
ArkTS · Stage 模型 · HDS 高级视觉 · 自实现 MQTT 客户端
跑在 Mate 70 Pro+ 和 MatePad Pro 上的全功能控制终端
拖滑块调风扇(0-3档)、水泵(0-3档)、补光灯(0-100%)。进页面自动同步当前档位到开发板,支持触觉反馈。
设定温度/湿度/光照/土壤湿度的上下限阈值。定时轮询传感器数据,超范围就自动触发控制。后台常驻线程,退出页面安全销毁防泄漏。
MQTT 回调收传感器数据,@StorageLink 状态管理驱动 ArkUI 自动刷新数字显示。
GlobalLogBus 事件总线记录通信状态、用户操作和错误信息,方便排查问题。
基于 ArkTS 的分层架构
应用级全局资源和 Hvigor 构建脚本的统一管理入口。
ArkTS 构建的 UI 层,包含手动/智能双模式和调试面板的完整界面。
封装 MQTT 客户端(MqttReceiverClient.ts),TCP Socket 直连实现双向通信,零第三方依赖。
核心数据结构和状态模型,确保 UI 与数据的响应式绑定。
HarmonyOS 端没用任何第三方 MQTT 库,完全从 TCP Socket 开始手搓报文。这样对整个通信过程有完整的掌控力,出问题了也好排查。
集中管理风扇档位、水泵档位、补光灯亮度,@StorageLink 跨页面共享状态。
传感器数据和控制指令通过统一格式在 MQTT 层可靠传输。
GlobalLogBus 统一收集通信状态、操作记录和异常信息。
进页面建连接、退页面销毁线程释放资源,杜绝内存泄漏。
兼顾功能与视觉体验
沉浸式光场顶部导航,毛玻璃模糊效果
按钮按压弹性形变 + 光场扩散反馈
分步延迟进入,弹簧曲线入场体验流畅
流光背景贯穿全界面,深色模式下氛围感拉满
平板自适应双栏,信息密度和视觉平衡兼顾
页面切换时的引力场效果,元素间自然的吸引排斥动画。
流光背景+双栏深色全局光场,动态光影随交互流动变化。
淡入淡出+弹性动画,SpringMotion 弹簧曲线丝滑过渡。
ArkUI 响应式栅格系统,自动适配手机和平板两种设备形态:
单栏纵向滚动,卡片堆叠展示
双栏并列,充分利用宽屏空间
智能手表形态 —— 沉浸式材质 + 气态动效
基于 HDS 规范自定义的按钮组件体系,统一 Glass 形态下所有交互元素的视觉表现和触摸反馈。支持多种尺寸和状态样式(默认/按压/禁用),小屏幕上也好用。
你可能会问的,以及这个项目带给我什么
OpenHarmony 提供真正的 RTOS(LiteOS-M),有抢占式调度、原生多线程管理和成熟的华为硬件生态。Arduino / ESP32 适合做原型;而这个项目的重点是多任务、互斥锁、可配置栈和条件编译。何况,跟一个完整的操作系统打交道,和用一套框架做原型,是完全不同的学习体验。
总共约 6 周:2 周做嵌入式部分(驱动、多线程、MQTT),3 周做 HarmonyOS 应用(从 JavaUI API7 完整重写到 ArkTS API23、从零实现 MQTT 客户端、HDS 设计),1 周做联调、测试与报告。最耗时的是应用侧重写 —— 旧代码的迁移确实麻烦。
毫无疑问是 I2C 总线冲突。AHT20 和 SSD1306 共用同一条 I2C0,采集线程和显示线程同时访问时就会乱套。解法看起来很简单(加个互斥锁),但定位问题花了我将近两天,最后靠逻辑分析仪才找到。其次是用 ArkTS 从零写一个完整的 MQTT 客户端,尤其是断线重连和线程生命周期的处理。
嵌入式侧:USB 逻辑分析仪抓 I2C 总线、UART0 串口打印日志、MQTTX 实时观察消息。HarmonyOS 侧:DevEco Studio 自带调试器、HiLog 看系统日志,以及应用内置的 GlobalLogBus 面板实时跟踪 MQTT 活动。最有用的大概是 MQTTX —— 能实时看到 broker 上到底跑了什么,省了我不少个晚上。
作为课程原型它已经比较完整。但要真正部署还缺几样:MQTT 认证(目前没有密码)、智能模式阈值的持久化(现在存在易失内存里)、以及初始配置界面(WiFi 的 SSID 和密码目前写死)。硬件方面,Hi3861 没有工业级认证,低成本传感器也缺标定。不过软件架构是扎实的,这些改进接进来不算难。
比预想的多得多。技术上有:嵌入式系统编程、RTOS、物联网协议、现代移动应用开发。方法上有:怎么端到端设计一个分布式系统、怎么用清晰的分层控制复杂度、怎么把文档写好。而最重要的是:面对解释不了的硬件 bug 时的耐心,以及看着整套系统从传感器一路跑到手机屏幕时的成就感。
从第一行代码到最终答辩,SmartShed 是一次穿越 HarmonyOS / OpenHarmony 生态的完整旅程。我几乎碰到了 IoT 系统的每一层:硬件驱动、RTOS、网络协议、移动应用开发、界面设计,甚至还有一点构建链(GN / Ninja)的工程工作。
如果只让我记一件事,那就是复杂度要靠架构来管理。一开始我试图把所有东西塞进一个文件 —— 结果是维护噩梦。重构成分层结构(common / modules / boards)并在应用侧采用 Stage 模型之后,每一次修改都变得有针对性、可预期。
谢谢你读到这里。如果这个项目给了你启发,或者你有问题,欢迎联系我,也可以去 GitHub 上看源码 —— 它完全开源。