回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#新物联网挑战二#打造舒适办公环境 醉美可视健康生活 简单

头像 _深蓝_ 2023.07.03 98 6

【项目背景】

我们绝大多数时间在办公室工作,办公室的环境质量直接影响着我们的健康。使用行空板以及各种传感器。打造一款属于个人的办公环境管理以及可视化大屏预警系统。

 

【项目设计】

使用行空板作为MQTT物联网服务器,数据采集器使用SCI采集模块,由于SCI采集模块和行空板的I2C接口有限,可以使用I2C级联扩展器扩展I2C接口。传感器使用空气温湿度传感器、空气质量传感器、分贝传感器、环境光传感器、氧气传感器、用来检测办公室的空气温湿度、空气质量、噪声登记以及氧气浓度等,并实时摄像头监控个人办公室。如果办公室灯光较暗,可以打开灯光照明,如果室内温度过高可以使用小风扇降温。如果氧气浓度过低,使用行空板蜂鸣器报警,开窗通风。  

R-C.jpg

【制作过程】

 

【制作材料】

空气温湿度传感器·····×1
空气质量传感器······×1
分贝传感器········×1
环境光传感器·······×1
氧气传感器········×1
行空板··········×1
SCI 采集模块·······×1
ph2.0-4p ········×4
ph2.0-3p ········×2

 

 

步骤1 硬件连接及调试

wx_camera_16871696800267.jpg
图片.png
图片.png

将氧气浓度传感器连接到SCI采集模块后显示O3为0,这是默认的臭氧浓度,这是不正确的,需要调节一下地址。
调节方法:找到该传感器背面的拨码开关,A0和A1调成1和0即可。

 

接入分贝传感器后,SCI采集模块显示是错误的,需要手动调节SCI采集模块。调节方法如下

 

图片.png

这样,传感器的连接与调试就结束了。

步骤2 行空板siot版本升级

行空板上默认内置的是SIoT V1,而Mind+可视化平台需要使用SIoT V2,因此需要先进行升级。

软件Mind+1.8.0版本及SIoT V2版本升级文件: 腾讯微云下载: 链接: https://share.weiyun.com/6SFhgLQj :  

1.下载升级文件:升级行空板SIOTV2.mp

2.打开Mind+,在项目中打开上一步下载的升级行空板SIOTV2.mp文件。

3.行空板连接电脑待启动完成,点击连接远程终端中选择10.1.2.3连接行空板,连接成功之后点击运行,等待行空板重启完成即可。

4.此时打开行空板上的SIOT网页,按Ctrl+F5刷新页面,可以看到界面已经SIOTV2了,登录账号是siot,密码dfrobot。

 

 

 

 

 

 

 

 

步骤3 使用mind+ v1.8.0编程前期准备

 

首先     选择python模式,这样才能加载行空板。

QQ截图20230703121902.jpg

接着 加载编程所需的各类库文件。

QQ截图20230703121101.jpg
QQ截图20230703121411.jpg
QQ截图20230703121511.jpg

SCI采集模块加载库地址:https://gitee.com/liliang9693/ext-sci

 

编程的前期准备工作做好后开始图形化编程

 

步骤4 使用mind+ v1.8.0编程

 

 

 

 

 

QQ截图20230703120924.jpg

以上以上是主程序需要注意的是MQTT服务器参数的设置,本例使用电脑主机的SIOT服务器。所以服务器IP地址为:10.1.2.101,如果使用行空板,则服务器地址为:10.1.2.3 

QQ截图20230703123351.jpg

 

 

QQ截图20230703121829.jpg

左图是使用行空板的线程,实时监控办公室的场景,个人在局域网内任何位置,都可以通过MQTT服务查看办公室的场景。
右图是将传感器的数据发送到行空板SIOT服务器,并保存到数据库,这样我们可以通过可视化大屏预警系统观察到办公室环境各项指标。

QQ截图20230703121807.jpg

当接收到可视化大屏系统发出的开关LED灯的指令后,开关行空板上的LED灯。

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
import base64
from io import BytesIO
from PIL import Image
from pinpong.libs.dfrobot_sht31 import SHT31
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from dfrobot_rp2040_sci import *
from pinpong.board import Board
from unihiker import GUI
import time
import siot
import cv2

# 自定义函数
def ZhiXing():
    siot.publish_save(topic="siot/air_quality", data=SCI1.get_value0("AQI"))
    siot.publish_save(topic="siot/humidity", data=p_sht31.humidity())
    siot.publish_save(topic="siot/temperature", data=p_sht31.temp_c())
    siot.publish_save(topic="siot/noise", data=SCI1.get_value0("Sound"))
    siot.publish_save(topic="siot/light", data=light.read())

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if (msg.topic == (str("siot/LED"))):
        if (msg.payload.decode() == (str("on"))):
            p_p25_out=Pin(Pin.P25, Pin.OUT)
            p_p25_out.write_digital(1)
        else:
            p_p25_out=Pin(Pin.P25, Pin.OUT)
            p_p25_out.write_digital(0)
def u_thread1_function():
    while True:
        ret, grab = vd.read()
        cv2.imshow("Mind+.png", grab)
        siot.publish(topic="siot/frame", data=base642base64(grab))
        if cv2.waitKey(20) & 0xff== 27:
            break


siot.init(client_id="9999280106776172",server="10.1.2.101",port=1883,user="siot",password="dfrobot")
Board().begin()
u_gui=GUI()
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="siot/LED")
siot.getsubscribe(topic="siot/fan_switch")
SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")
vd = cv2.VideoCapture()
vd.open(-1)
siot.getsubscribe(topic="siot/frame")

def frame2base64(frame):
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    img = Image.fromarray(frame) #将每一帧转为Image
    output_buffer = BytesIO() #创建一个BytesIO
    img.save(output_buffer, format='JPEG') #写入output_buffer
    byte_data = output_buffer.getvalue() #在内存中读取
    base64_data = base64.b64encode(byte_data) #转为BASE64
    return base64_data #转码成功 返回base64编码

def base642base64(frame):
    data=str('data:image/png;base64,')
    base64data = str(frame2base64(frame))
    framedata = base64data[2:(len(base64data)-1)]
    base642base64_data = data + str(framedata)
    return base642base64_data
p_sht31 = SHT31(0x45)
thread1=u_gui.start_thread(u_thread1_function)

while True:
    ZhiXing()
    time.sleep(2)

使用mind+ v1.8.0编程的具体操作如下:

步骤5 设计靓丽的可视化大屏预警系统

QQ截图20230703124538.jpg
QQ截图20230703124602.jpg
QQ截图20230703124619.jpg
QQ截图20230703124716.jpg
QQ截图20230703124740.jpg

注意事项有:
1、服务器地址需要写正确。
2、为了获得数据,需要将组建属性中的主题选择上。
3、为了办公环境监测预警可视化大屏系统更简洁、美观、大方,可以使用精简的组件。

 

 

【调试程序、测试项目运行】

 

步骤6 测试项目

点击运行程序后,我们就可以看到办公室的各项数据上传到了siot服务器,打开siot服务器web端(打开方式:输入siot服务器IP地址:8080即可打开)。打开后,我们看到了每个主题都收集了许多数据。这说明行空板中的环境数据已经发送到了siot服务器端。

IMG_20230627_173250.jpg
微信截图_20230628103432.png
微信截图_20230628103324.png
微信截图_20230628103138.png
微信截图_20230628103113.png
微信截图_20230628102955.png

 

 

步骤7 可视化大屏预警系统测试

办公检测预警系统截图.jpg
微信截图_20230628103414.png
IMG_20230627_173019.jpg

我们可以看到,通过可视化大屏预警系统,我们不仅可以查看办公室当前的温湿度、空气质量和氧气浓度,还可以实现开关灯的操作。而这一系列的操作都是通过siot服务器的结果。

 

【改进与不足】

由于近期时间和能力有限,仅仅将物联网的基础操作实现一下,没有在外观上加以优化,看起来线路较多,比较乱,下次改进。
另外,没有实现行空板的温度和氧气浓度变化的预警功能,以及高温天气使用小小风扇降温的功能。

 

【附录】

mind+可视化教程】https://mindplus.dfrobot.com.cn/dashboard

 

行空板刷siotv2失败处理https://www.bilibili.com/video/BV1VV411M7rY/?share_source=copy_web&vd_source=373aeb44aeb662eb51647bd280bc667d

 

行空板介绍以及学习程序】https://www.unihiker.com.cn/wiki/jianjie

 

Gravity SCI 采集模块】https://wiki.dfrobot.com.cn/_SKU_DFR0999_Gravity_SCI_%E9%87%87%E9%9B%86%E6%A8%A1%E5%9D%97

 

造物记物联网创新应用专项挑战赛】https://makelog.dfrobot.com.cn/contest-869.html

评论

user-avatar
  • 罗罗罗

    罗罗罗2024.04.14

    666

    0
    • hacker_

      hacker_2023.08.26

      666

      0
      • 花生编程

        花生编程2023.08.25

        赞赞赞

        0
        • 花生编程

          花生编程2023.08.25

          厉害

          0
          • 三春牛-创客

            三春牛-创客2023.08.22

            赞赞赞

            0
            • 三春牛-创客

              三春牛-创客2023.08.22

              厉害

              0