一、项目介绍:
1.背景介绍:
信息科技课标中第四学段提到结合跨学科主题“在线数字气象站”,让学生进行“物联网实践与探索”的内容学习。
校园物联网气象站项目,让学生使用行空板,通过连接常用的声音、湿度、温度、光线等传感器,配合SIOT物联网平台,实时描绘校园气象的信息状态,探寻数据的变化规律。校园物联网气象站能为学校提供实时的温度、湿度、风速、风向等方面的数据监测,帮助学生开展气象实践,进一步加强学生对于科技的认知,增强互联智能设计能力。
2.遇到的问题:
校园物联网气象站,既需要有质量过硬、侦测数据准确的传感器,又需要有物联网平台的支撑进行实时数据采集和处理。
采购整体的校园气象站硬件,价格昂贵,不能满足让学生进行互联智能设计的需要。物联网平台要保障数据稳定采集、实时传输、信息量大,而多数物联网平台达到一定数据量后需要交费才能使用,且依赖互联网网络的支持。
二、制作过程:
1.创意实现的过程、步骤:
(1)确定项目需求:制作一个能实时显示室内与室外不同环境中温度、湿度、光照、噪声等数据的校园物联网气象站。数据的实时显示,让孩子们看出气象数据的变化规律,并进行直观的数据对比。室内环境的实时画面,让气象站更有真实感。
(2)整理现有硬件:行空板(板载声音、光线传感器)、DHT11温湿度传感器、连接线若干。
(3)完成程序编写和调试。
2.在制作过程中发现的问题:
(1)在使用行空板调试的过程中,出现提示:AttributeError: module 'siot' has no attribute 'publish_save'
解决办法:
需要升级siot库,即:板子联网,然后终端运行 pip install -U siot。可见官方文档:https://www.unihiker.com.cn/wiki/pip_install
(2)行空板上的SIOT正常用着,突然就连不上了。SIOT无法登录,可视化面板提示连接失败。
故障原因:在查看电脑网络连接时,把SIOT生成的本地连接给禁用了。该本地连接启用后,问题解决。
(3)可视化面板中,想显示摄像头画面,使用命令也与直播中使用的积木相同,却出现下面的提示:
李工@liliang9693 将该程序实地操作后,却一切正常,并将使用摄像头的代码进行了优化,同时添加案例教程:https://mindplus.dfrobot.com.cn/dashboard#target_16
通过学习案例教程,发现把USB摄像头插到了笔记本电脑上是不对的。将USB摄像头插到行空板,重新运行程序,故障解除。
三、资源
1.代码:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
import base64
from io import BytesIO
from PIL import Image
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import DHT22
from pinpong.board import DHT11
from pinpong.board import Board
from unihiker import Audio
import time
import siot
import cv2
Board().begin()
siot.init(client_id="6043251182327172",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
u_audio = Audio()
siot.connect()
siot.loop()
dht1 = DHT11(Pin((Pin.P21)))
dht1 = DHT22(Pin((Pin.P21)))
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
vd = cv2.VideoCapture()
vd.open(0)
siot.getsubscribe(topic="siot/光线")
siot.getsubscribe(topic="siot/声音")
siot.getsubscribe(topic="siot/温度")
siot.getsubscribe(topic="siot/湿度")
siot.getsubscribe(topic="siot/温湿对照")
siot.getsubscribe(topic="siot/温湿柱")
siot.getsubscribe(topic="siot/画面")
siot.getsubscribe(topic="siot/日期")
while True:
ret, grab = vd.read()
siot.publish(topic="siot/画面", data=base642base64(grab))
siot.publish_save(topic="siot/声音", data=u_audio.sound_level())
siot.publish_save(topic="siot/光线", data=light.read())
siot.publish_save(topic="siot/温度", data=dht1.temp_c())
siot.publish_save(topic="siot/湿度", data=dht1.humidity())
siot.publish_save(topic="siot/日期", data=time.strftime("%Y年%m月%d日"))
siot.publish_save(topic="siot/温湿对照", data=(str((str(dht1.temp_c()) + str(","))) + str(dht1.humidity())))
siot.publish_save(topic="siot/温湿柱", data=(str((str((str((str((str((str((str((str((str(dht1.temp_c()) + str("|"))) + str(dht1.humidity()))) + str(","))) + str((str((str(dht1.temp_c()) + str("|"))) + str(dht1.humidity()))))) + str(","))) + str((str((str(dht1.temp_c()) + str("|"))) + str(dht1.humidity()))))) + str(","))) + str((str((str((str(dht1.temp_c()) + str("|"))) + str(dht1.humidity()))) + str(","))))) + str((str((str(dht1.temp_c()) + str("|"))) + str(dht1.humidity())))))
time.sleep(1)
2.源文件:
四、总结:
1.作品的完成度:
校园物联网气象站,将最常见的温湿度、光照和噪声等数据进行实时显示,选取了室内和室外的“开心农场”作为采集数据的地点,利用SIOT平台实现了本地化的服务平台布署,具备了简易校园气象站的呈现效果。
2.可改善的空间:
硬件方面,使用多块行空板,接入更多的传感器,让气象站的数据更加丰富。软件方面,选取适合的可视化面板组件,让气象站的呈现界面更加美观,区块划分更加合理,更利于气象数据的实时显示和对比。
五、作品演示:
花生编程2023.07.30
赞赞赞赞赞
花生编程2023.07.30
厉害厉害
三春牛-创客2023.07.27
不错不错
三春牛-创客2023.07.27
厉害厉害