48浏览
查看: 48|回复: 0

[K10项目分享] 义教信息科技 基于行空板K10的博物馆环境监测物联系统

[复制链接]
本帖最后由 豆爸 于 2025-2-21 06:44 编辑

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

义教信息科技 基于行空板K10的博物馆环境监测物联系统图14

项目来源

本节课源自《义务教育信息科技教学指南》八年级 “物联网实践与探索” 中的第21 课文物保护新手段。

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

学习目标

义教信息科技 基于行空板K10的博物馆环境监测物联系统图15

硬件准备

序号 名称 数量 链接
1 行空板K10 1 https://www.dfrobot.com.cn/goods-4014.html
2 空气质量传感器 1
3 加湿器模块 1

接线图

义教信息科技 基于行空板K10的博物馆环境监测物联系统图24

流程图

义教信息科技 基于行空板K10的博物馆环境监测物联系统图16

软件准备

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。

义教信息科技 基于行空板K10的博物馆环境监测物联系统图8

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

义教信息科技 基于行空板K10的博物馆环境监测物联系统图1
启动之后会弹出小黑窗启动服务器。

义教信息科技 基于行空板K10的博物馆环境监测物联系统图9
在浏览器输入 上图中地址172.26.192.1:8080 即可打开网页,输入账号siot,密码dfrobot,点击“登录”。

义教信息科技 基于行空板K10的博物馆环境监测物联系统图10

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

义教信息科技 基于行空板K10的博物馆环境监测物联系统图2

新建主题如下:
义教信息科技 基于行空板K10的博物馆环境监测物联系统图11

3. 下载 Mind+

下载行空板K10公测版Mind+压缩包:

将压缩包解压,注意解压过程中关闭杀毒软件,解压后文件夹路径不含中文,解压后文件夹路径不易过长。

若编译任何代码都报错,请查看:公测版解压问题

编写程序

1. 添加主控板

打开Mind+,切换到“上传模式”。
义教信息科技 基于行空板K10的博物馆环境监测物联系统图6

点击”扩展“,在扩展页面中,点击”主控板“,选择”行空板K10“,点击”返回“,完成加载。
义教信息科技 基于行空板K10的博物馆环境监测物联系统图12

2. 连接设备

使用USB线将行空板K10的Type-C口接到电脑USB口
义教信息科技 基于行空板K10的博物馆环境监测物联系统图4

在mind+中点击“连接设备”,找到对应的K10设备并点击,完成设备连接。
义教信息科技 基于行空板K10的博物馆环境监测物联系统图13

3. 添加扩展

点击”扩展“,在扩展页面中,点击“网络服务”,选择”MQTT“、“Wi-Fi”,点击”返回“,完成加载。
义教信息科技 基于行空板K10的博物馆环境监测物联系统图3

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

义教信息科技 基于行空板K10的博物馆环境监测物联系统图5

4. 编写程序

编写程序,如下图所示。

义教信息科技 基于行空板K10的博物馆环境监测物联系统图7

主要程序代码及说明

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;
  • airConditionerStartTimehumidistatStartTime:分别记录空调和恒湿器的启动时间。
  • airConditionerRunninghumidistatRunning:标记空调和恒湿器是否正在运行。
  • 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]可视化面板
    点击可视化面板图标,进入可视化项目管理页面。
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图17
    点击“新建项目”,“新建空白项目”。
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图18
    输入项目名称:博物馆环境检测系统,点击“确认”按钮。
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图19
    点击“编辑”
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图20
    设置服务器地址为SIOT V2的地址:172.26.192.1,用户名siot,密码dfrobot,点击“完成”按钮。
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图21
    依次添加折线图组件、开关组件、单行文本组件,调整布局。
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图22
    按下表所示,完成各个组件的Topic配置。

    义教信息科技 基于行空板K10的博物馆环境监测物联系统图23

[b]上传程序

点击“上传到设备”,等待直到出现“上传成功”
义教信息科技 基于行空板K10的博物馆环境监测物联系统图25
[b]
系统运行结果[b]1. K10运行展示
义教信息科技 基于行空板K10的博物馆环境监测物联系统图26
[b]

  1. 可视化显展示
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图27
    [b]
  2. SIOT服务数据展示
    义教信息科技 基于行空板K10的博物馆环境监测物联系统图28

    [b]附件
  3. 程序代码
    下载附件第21课程序代码.zip











您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail