【项目背景】
我们绝大多数时间在办公室工作,办公室的环境质量直接影响着我们的健康。使用行空板以及各种传感器。打造一款属于个人的办公环境管理以及可视化大屏预警系统。
【项目设计】
使用行空板作为MQTT物联网服务器,数据采集器使用SCI采集模块,由于SCI采集模块和行空板的I2C接口有限,可以使用I2C级联扩展器扩展I2C接口。传感器使用空气温湿度传感器、空气质量传感器、分贝传感器、环境光传感器、氧气传感器、用来检测办公室的空气温湿度、空气质量、噪声登记以及氧气浓度等,并实时摄像头监控个人办公室。如果办公室灯光较暗,可以打开灯光照明,如果室内温度过高可以使用小风扇降温。如果氧气浓度过低,使用行空板蜂鸣器报警,开窗通风。
【制作过程】
【制作材料】
空气温湿度传感器·····×1
空气质量传感器······×1
分贝传感器········×1
环境光传感器·······×1
氧气传感器········×1
行空板··········×1
SCI 采集模块·······×1
ph2.0-4p ········×4
ph2.0-3p ········×2
步骤1 硬件连接及调试
将氧气浓度传感器连接到SCI采集模块后显示O3为0,这是默认的臭氧浓度,这是不正确的,需要调节一下地址。
调节方法:找到该传感器背面的拨码开关,A0和A1调成1和0即可。
接入分贝传感器后,SCI采集模块显示是错误的,需要手动调节SCI采集模块。调节方法如下
这样,传感器的连接与调试就结束了。
步骤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模式,这样才能加载行空板。
接着 加载编程所需的各类库文件。
SCI采集模块加载库地址:https://gitee.com/liliang9693/ext-sci
编程的前期准备工作做好后开始图形化编程
步骤4 使用mind+ v1.8.0编程
以上以上是主程序需要注意的是MQTT服务器参数的设置,本例使用电脑主机的SIOT服务器。所以服务器IP地址为:10.1.2.101,如果使用行空板,则服务器地址为:10.1.2.3
左图是使用行空板的线程,实时监控办公室的场景,个人在局域网内任何位置,都可以通过MQTT服务查看办公室的场景。
右图是将传感器的数据发送到行空板SIOT服务器,并保存到数据库,这样我们可以通过可视化大屏预警系统观察到办公室环境各项指标。
当接收到可视化大屏系统发出的开关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 设计靓丽的可视化大屏预警系统
注意事项有:
1、服务器地址需要写正确。
2、为了获得数据,需要将组建属性中的主题选择上。
3、为了办公环境监测预警可视化大屏系统更简洁、美观、大方,可以使用精简的组件。
【调试程序、测试项目运行】
步骤6 测试项目
点击运行程序后,我们就可以看到办公室的各项数据上传到了siot服务器,打开siot服务器web端(打开方式:输入siot服务器IP地址:8080即可打开)。打开后,我们看到了每个主题都收集了许多数据。这说明行空板中的环境数据已经发送到了siot服务器端。
步骤7 可视化大屏预警系统测试
我们可以看到,通过可视化大屏预警系统,我们不仅可以查看办公室当前的温湿度、空气质量和氧气浓度,还可以实现开关灯的操作。而这一系列的操作都是通过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
附件
罗罗罗2024.04.14
666
hacker_2023.08.26
666
花生编程2023.08.25
赞赞赞
花生编程2023.08.25
厉害
三春牛-创客2023.08.22
赞赞赞
三春牛-创客2023.08.22
厉害