一、项目背景
思考一:
暑假自驾旅行,路经几个服务区发现,现在服务区都有服务区智能公厕系统(如下图),如果学校厕所也有这样的大屏显示厕所环境监测信息,不仅能让中小学生认识到环境监测的重要性,更能提高中小学生的公共卫生意识。
除此之外,现如今中学生在厕所偷偷抽烟,加上厕所不能安装监控,所以无法对抽烟学生不能很好地监管,环境监测系统就可以监测厕所里是否有人抽烟,及时通报。
思考二:
女性生理期有不确定性,在特殊的生理情况下,难免会遇到窘迫的时候。如果青春期女生,在校遇到生理期,窘迫尴尬之余,又能以怎样的方式寻求帮助呢?如果有一个按钮可以求助,是否可以解决女生的烦恼。
除此之外,厕所没有监控,所以是校园霸凌频发地,被欺凌者不能及时求救,悲剧时常发生。如果有一个按钮可以求助,是否可以及时阻止校园霸凌。
于是,我想用行空板+物联网的方式,看能不能解决这个难题。
二、方案设计
1. mind+1.8 模拟环境监测大屏。
2.SIOT2.0物联网平台,存储和物联通信,转发消息。
3、项目共设计了大屏数据监测系统、A行空板用来显示公厕各项数据,A行空板上设计了两个按钮,一个是女生特殊时期(生理期)求助按钮,另一个是被霸凌的求助按钮。
A行空板如果检测到空气质量指数超标,B行空板收到后,就反馈“疑似有人吸烟”等信息;如果有人触发了A行空板上的按钮,B行空板板收到后,就反馈”特殊时期求助“或者”有霸凌事件“。
三、制作过程
(一)数据版面大屏设计
利用Mind+的可视化面板,设计“校园公厕环境监测系统”大屏。
大屏内容包括:时钟、室内温度、室内湿度、空气质量指数、eCO2指数、TVOC指数、温馨提示等。
(二)硬件连接
本项目选用了行空板、扩展板、SCI 采集模块、SHT31数字温湿度传感器、ENS160空气质量传感器、PM2.5空气质量传感器、无源音箱来进行硬件的连接,以下是硬件连接示意图:
A行空板硬件连接:
B行空板硬件连接:
(三)SIot设计
利用行空板自带的SIot,设计了以下的数据管理:
(四)行空板版面设计
A行空板界面 B行空板界面(1) B行空板界面(2)
(五)程序代码
A行空板(用做服务器主板)
B行空板(接收信息)
(六)设计过程中发现的问题
问题一:两块行空板无法相互通讯
一开始是用start.SIot来进行物联网互联,后来发现两块行空板不能共享一个服务器地址
解决方法:
网上找到一个帖子,提到了解决方法,就是A行空板做服务器,B行空板做智能终端,
A行空板和B行空板要在同一个网络下,可以各自先登录自己的IP地址。
但是,在SIot服务器地址设置时,要用同一个,如果是以A行空板做服务器,那么B行空板的SIot服务器地址也要和A行空板一致,这样才能实现两块行空板相互之间的通讯。
问题二:行空板不能离线运行程序
本来想用自动生成的代码直接放到行空板离线运行,结果出现各种报错。
解决方法:
在项目中的文件,新建一个py文件,将自动生成的代码,直接拷贝到新建的py文件里保存,然后运行一次,再将这个文件复制粘贴到行空板中的文件里面。
七)总结
本项目利用各种监测室内环境指数的传感器进行了设计及制作,最终实现了预期设想。在上一轮比赛中,没能实现按钮回调,这次实现了。此次项目在实际应用中可能还会出现各种问题,以后将项目再次完善,越来越好!
步骤1 选题
步骤2 方案设计
步骤3 数据版面大屏设计
步骤4 硬件连接
步骤5 SIot设计
步骤6 行空板版面设计
步骤7 程序设计
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from pinpong.libs.dfrobot_sht31 import SHT31
from dfrobot_rp2040_sci import *
from pinpong.board import Board
from unihiker import GUI
import siot
import time
# 事件回调函数
def button_click1():
siot.publish_save(topic="siot/暖心求助", data="特殊时期求助")
def button_click2():
siot.publish_save(topic="siot/暖心求助", data="有人霸凌")
Board().begin()
siot.init(client_id="5218723707353439",server="192.168.2.142",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
siot.connect()
siot.loop()
p_sht31 = SHT31(0x45)
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.")
siot.getsubscribe(topic="siot/室内湿度")
siot.getsubscribe(topic="siot/室内温度")
siot.getsubscribe(topic="siot/颗粒浓度")
siot.getsubscribe(topic="siot/ECO2")
siot.getsubscribe(topic="siot/TVOC")
siot.getsubscribe(topic="siot/空气质量指数")
siot.getsubscribe(topic="siot/暖心求助")
bg=u_gui.draw_image(image="202308171.png",x=0,y=0)
u_gui.fill_round_rect(x=15,y=10,w=210,h=55,r=5,color="#FFCC00")
u_gui.draw_text(text="校园公厕",x=80,y=12,font_size=15, color="#000000")
u_gui.draw_text(text="环境监测系统",x=55,y=35,font_size=15, color="#000000")
u_gui.fill_round_rect(x=15,y=75,w=210,h=25,r=5,color="#FF6600")
wendu=u_gui.draw_text(text=(str("温度") + str(p_sht31.temp_c())),x=20,y=75,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=110,w=210,h=25,r=5,color="#FF6600")
shidu=u_gui.draw_text(text=(str("湿度") + str(p_sht31.humidity())),x=20,y=110,font_size=12, color="#FFFFFF")
u_gui.fill_round_rect(x=15,y=145,w=210,h=25,r=5,color="#FF6600")
kelinongdu =u_gui.draw_text(text=(str((str("PM2.5") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"PM2.5")) + str(SCI1.get_unit1(SCI1.ePort2,"PM2.5"))))),x=20,y=145,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=180,w=210,h=25,r=5,color="#FF6600")
eCO2=u_gui.draw_text(text=(str((str("eCO2") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"ECO2")) + str(SCI1.get_unit1(SCI1.ePort2,"ECO2"))))),x=20,y=180,font_size=12, color="#FFFFFF")
u_gui.fill_round_rect(x=15,y=215,w=210,h=25,r=5,color="#FF6600")
TVOC=u_gui.draw_text(text=(str((str("TVOC") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"TVOC")) + str(SCI1.get_unit1(SCI1.ePort3,"TVOC"))))),x=20,y=215,font_size=12, color="#333333")
u_gui.fill_round_rect(x=15,y=250,w=210,h=25,r=5,color="#FF6600")
kongqizhiiang=u_gui.draw_text(text=(str("空气质量指数") + str((str(SCI1.get_value1(SCI1.ePort3,"AQI")) + str(SCI1.get_unit1(SCI1.ePort3,"AQI"))))),x=20,y=250,font_size=12, color="#333333")
button1=u_gui.add_button(text="特殊时期",x=20,y=280,w=70,h=30,onclick=button_click1)
button2=u_gui.add_button(text="其他求助",x=80,y=280,w=70,h=30,onclick=button_click1)
while True:
wendu.config(text=(str("温度") + str(p_sht31.temp_c())))
siot.publish_save(topic="siot/室内温度", data=p_sht31.temp_c())
shidu.config(text=(str("湿度") + str(p_sht31.humidity())))
siot.publish_save(topic="siot/室内湿度", data=p_sht31.humidity())
kelinongdu .config(text=(str((str("PM2.5") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort2,"PM2.5")) + str(SCI1.get_unit1(SCI1.ePort2,"PM2.5"))))))
siot.publish_save(topic="siot/颗粒浓度", data=SCI1.get_value1(SCI1.ePort2,"PM2.5"))
eCO2.config(text=(str((str("eCO2") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"ECO2")) + str(SCI1.get_unit1(SCI1.ePort3,"ECO2"))))))
siot.publish_save(topic="siot/ECO2", data=SCI1.get_value1(SCI1.ePort3,"ECO2"))
TVOC.config(text=(str((str("TVOC") + str(":"))) + str((str(SCI1.get_value1(SCI1.ePort3,"TVOC")) + str(SCI1.get_unit1(SCI1.ePort3,"TVOC"))))))
siot.publish_save(topic="siot/TVOC", data=SCI1.get_value1(SCI1.ePort3,"TVOC"))
kongqizhiiang.config(text=(str("空气质量指数") + str((str(SCI1.get_value1(SCI1.ePort3,"AQI")) + str(SCI1.get_unit1(SCI1.ePort3,"AQI"))))))
siot.publish_save(topic="siot/空气质量指数", data=(str("AQI") + str(SCI1.get_value1(SCI1.ePort3,"AQI"))))
time.sleep(5)
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import Audio
from unihiker import GUI
import siot
# 事件回调函数
def on_message_callback(client, userdata, msg):
if ((msg.payload.decode() == (str("3"))) or ((msg.payload.decode() == (str("4"))) or (msg.payload.decode() == (str("5"))))):
u_gui.fill_round_rect(x=15,y=100,w=210,h=70,r=5,color="#FF6600")
u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=105,font_size=15, color="#000000")
u_gui.draw_text(text="疑似有人抽烟",x=50,y=135,font_size=15, color="#000000")
u_audio.play("3.mp3")
if (msg.payload.decode() == (str("特殊时期求助"))):
u_gui.fill_round_rect(x=15,y=200,w=210,h=70,r=5,color="#FF6600")
u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=205,font_size=15, color="#000000")
u_gui.draw_text(text="特殊时期求助",x=50,y=235,font_size=15, color="#000000")
u_audio.play("1.mp3")
if (msg.payload.decode() == (str("有人霸凌"))):
u_gui.fill_round_rect(x=15,y=200,w=210,h=70,r=5,color="#FF6600")
u_gui.draw_text(text="教学楼二楼(女厕)",x=30,y=205,font_size=15, color="#000000")
u_gui.draw_text(text="有人霸凌",x=50,y=235,font_size=15, color="#000000")
u_audio.play("2.mp3")
siot.init(client_id="03385741237950879",server="192.168.2.142",port=1883,user="siot",password="dfrobot")
u_gui=GUI()
u_audio = Audio()
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="siot/暖心求助")
siot.getsubscribe(topic="siot/空气质量指数")
bg=u_gui.draw_image(image="20230817.png",x=0,y=0)
u_gui.fill_round_rect(x=15,y=10,w=210,h=65,r=5,color="#FFCC00")
u_gui.draw_text(text="校园公厕",x=70,y=12,font_size=20, color="#000000")
u_gui.draw_text(text="暖心服务",x=70,y=40,font_size=20, color="#000000")
while True:
pass
罗罗罗2024.04.13
666
tongtong203362024.04.14
谢谢~
undefined62024.03.21
可以借用一下视频吗
tongtong203362024.03.25
怎么借用?
JOVI2023.11.01
学习学习
tongtong203362023.11.02
谢谢~
腿毛利小五郎2023.10.25
学习666
tongtong203362023.10.27
谢谢~
tongtong203362023.11.02
谢谢~
家里略2023.10.18
很棒!学习一下
qzs19822023.08.27
给你点个赞!
春秋大仙2023.08.24
666666
hacker_2023.08.23
给你点个赞!
匿名
该评论已删除
_深蓝_2023.09.06
666