义教信息科技课程 物联网实践与探索 第21 课文物保护新手段——基于行空板K10的博物馆环境监测物联系统

项目来源
本节课源自《义务教育信息科技教学指南》八年级 “物联网实践与探索” 中的第21 课文物保护新手段。
结合《义务教育信息科技教学指南》课程中对博物馆环境监测系统实践要求,我们利用行空板K10、空气质量传感器、加湿器模块设计了模拟博物馆环境监测物联实验。实验通过温度、湿度、二氧化碳(CO₂)、甲醛(CH₂O)、总挥发性有机物(TVOC)、PM2.5、PM10 以及光照强度等环境数据,经无线网络传至物联网服务平台。平台分析处理数据,依结果自动控制空调、恒湿器等设备,调控环境参数,超出阈值时报警,保障文物保存环境适宜。
学习目标

硬件准备
接线图

流程图

软件准备
1. 下载SIoT V2
下载链接:
腾讯微云下载(推荐):
链接: https://share.weiyun.com/6SFhgLQj
百度云盘下载:
链接:https://pan.baidu.com/s/17clVjJXWTZh02FteKy3mcA?pwd=mind
提取码:mind
阿里云盘下载:
https://www.aliyundrive.com/s/tCqwJwGtZzL
提取码: 3h4x
谷歌云盘下载:
链接: 点击下载
2. 启动SIoT V2
下载后win版本的SIoT V2解压,双击start SIoT.bat即可启动新版SIoT。

注意:启动时需要将SIoT添加到允许应用通过防火墙,勾选专用网络和公用网络,否则外部设备可能无法访问

启动之后会弹出小黑窗启动服务器。

在浏览器输入 上图中地址172.26.192.1:8080 即可打开网页,输入账号siot,密码dfrobot,点击“登录”。

登录成功后,即可单击“新建主题(Topic)”创建主题。

新建主题如下:

3. 下载 Mind+
下载行空板K10公测版Mind+压缩包:
将压缩包解压,注意解压过程中关闭杀毒软件,解压后文件夹路径不含中文,解压后文件夹路径不易过长。
若编译任何代码都报错,请查看:公测版解压问题
编写程序
1. 添加主控板
打开Mind+,切换到“上传模式”。

点击”扩展“,在扩展页面中,点击”主控板“,选择”行空板K10“,点击”返回“,完成加载。

2. 连接设备
使用USB线将行空板K10的Type-C口接到电脑USB口

在mind+中点击“连接设备”,找到对应的K10设备并点击,完成设备连接。

3. 添加扩展
点击”扩展“,在扩展页面中,点击“网络服务”,选择”MQTT“、“Wi-Fi”,点击”返回“,完成加载。

点击”扩展“,在扩展页面中,点击“用户库”,加载“环境空气质量传感器”,点击”返回“,完成加载。

4. 编写程序
编写程序,如下图所示。

主要程序代码及说明
1. 头文件包含
#include <AirQuality.h>
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
AirQuality.h
:用于读取空气质量相关数据,如温度、湿度、CO₂、CH₂O 等。
DFRobot_Iot.h
:实现与 MQTT 服务器的通信,用于数据的发布和订阅。
unihiker_k10.h
:操作 UNIHIKER K10 开发板的功能,如屏幕显示、RGB 灯带控制等。
2. 全局变量定义
unsigned long airConditionerStartTime = 0;
unsigned long humidistatStartTime = 0;
bool airConditionerRunning = false;
bool humidistatRunning = false;
DFRobot_Iot myIot;
UNIHIKER_K10 k10;
uint8_t screen_dir = 2;
AirQuality aq(Serial1);
Music music;
airConditionerStartTime
和 humidistatStartTime
:分别记录空调和恒湿器的启动时间。
airConditionerRunning
和 humidistatRunning
:标记空调和恒湿器是否正在运行。
myIot
:用于 MQTT 通信的对象。
k10
:操作 UNIHIKER K10 开发板的对象。
screen_dir
:屏幕显示方向。
aq
:空气质量传感器对象。
music
:用于播放声音报警的对象。
3. setup()
函数
void setup() {
k10.begin();
pinMode(P1, OUTPUT);
k10.initScreen(screen_dir);
k10.creatCanvas();
myIot.setCustomMqttCallback(obloqMqttEventTsiot47ws2812, "siot/ws2812");
myIot.setCustomMqttCallback(obloqMqttEventTsiot47airconditioner, "siot/airconditioner");
myIot.setCustomMqttCallback(obloqMqttEventTsiot47humidistat, "siot/humidistat");
myIot.wifiConnect("GOCLOUD", "L2100Hbb");
while (!myIot.wifiStatus()) {}
k10.canvas->canvasText(myIot.getWiFiLocalIP(), 1, 0x0000FF);
k10.canvas->updateCanvas();
myIot.init("192.168.123.14","siot","6524750546018316","dfrobot", topics, 1883);
myIot.connect();
while (!myIot.connected()) {}
k10.canvas->canvasText("MQTT已连接", 3, 0x0000FF);
k10.canvas->updateCanvas();
myIot.subscribeTopic("siot/humidistat");
myIot.subscribeTopic("siot/airconditioner");
myIot.subscribeTopic("siot/ws2812");
aq.begin(9600, SERIAL_8N1, P0, P1);
delay(5000);
k10.setScreenBackground(0xFFFFFF);
}
- 初始化 UNIHIKER K10 开发板,设置 P1 引脚为输出模式。
- 初始化屏幕并创建画布。
- 设置 MQTT 消息的回调函数。
- 连接 WiFi 和 MQTT 服务器,显示连接信息。
- 订阅 MQTT 主题。
- 初始化空气质量传感器。
- 延时 5 秒,最后设置屏幕背景颜色为白色。
4. loop()
函数
void loop() {
if (aq.readAllData()) {
// 显示环境数据
k10.canvas->canvasText(" 博物馆环境监测", 0, 10, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText((String(aq.getTemperature()) + String(aq.getTemperatureUnit())), 0, 60, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
// 其他数据显示...
k10.canvas->updateCanvas();
// 发布环境数据到MQTT服务器
myIot.publish("siot/CO2", (String(aq.getCO2()) + String(aq.getCO2Unit())), 1);
myIot.publish("siot/CH2O", (String(aq.getCH2O()) + String(aq.getCH2OUnit())), 1);
// 其他数据发布...
// 空调控制与计时报警
if (((aq.getTemperature()<18) || (aq.getTemperature()>22))) {
if (!airConditionerRunning) {
airConditionerStartTime = millis();
airConditionerRunning = true;
}
k10.rgb->write(1, 0x00FF00);
digitalWrite(P1, HIGH);
if (millis() - airConditionerStartTime >= 30000) {
music.playTone(131, 8000);
}
}
else {
if (airConditionerRunning) {
airConditionerRunning = false;
k10.rgb->write(1, 0x000000);
digitalWrite(P1, LOW);
music.stopPlayTone();
}
}
// 恒湿器控制与计时报警
if (((aq.getHumidity()<50) || (aq.getHumidity()>60))) {
if (!humidistatRunning) {
humidistatStartTime = millis();
humidistatRunning = true;
}
k10.rgb->write(2, 0x0000FF);
if (millis() - humidistatStartTime >= 30000) {
music.playTone(131, 8000);
}
}
else {
if (humidistatRunning) {
humidistatRunning = false;
k10.rgb->write(2, 0x000000);
music.stopPlayTone();
}
}
}
delay(1000);
}
- 若成功读取空气质量数据,将环境数据显示在屏幕上,并通过 MQTT 协议发布到服务器。
- 空调控制:当温度不在 18 - 22 范围时,若空调未运行则记录启动时间并启动空调和对应 RGB 灯;运行超过 30 秒则播放报警音。温度达标时,关闭空调、RGB 灯和报警音。
- 恒湿器控制:当湿度不在 50 - 60 范围时,若恒湿器未运行则记录启动时间并启动恒湿器和对应 RGB 灯;运行超过 30 秒则播放报警音。湿度达标时,关闭恒湿器、RGB 灯和报警音。
- 最后延时 1 秒。
5. 事件回调函数
void obloqMqttEventTsiot47ws2812(String& message) {
if ((message==String("on"))) {
k10.rgb->write(0, 0xFFFF00);
}
else if ((message==String("off"))) {
k10.rgb->write(0, 0x000000);
}
}
// 其他回调函数类似...
- 处理订阅的 MQTT 主题消息,根据消息内容控制 WS2812 灯带、空调、恒湿器对应的 RGB 灯开关。
[b]可视化面板点击可视化面板图标,进入可视化项目管理页面。
点击“新建项目”,“新建空白项目”。
输入项目名称:博物馆环境检测系统,点击“确认”按钮。
点击“编辑”
设置服务器地址为SIOT V2的地址:172.26.192.1,用户名siot,密码dfrobot,点击“完成”按钮。
依次添加折线图组件、开关组件、单行文本组件,调整布局。
按下表所示,完成各个组件的Topic配置。

[b]上传程序
点击“上传到设备”,等待直到出现“上传成功”
[b]
系统运行结果[b]1. K10运行展示
[b]
- 可视化显展示
[b]
- SIOT服务数据展示
[b]附件
- 程序代码
第21课程序代码.zip