回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

#物联网挑战赛#尚阳小学校园物联网大屏 中等

头像 王晓凝 2023.05.31 163 4

        物联网、人工智能以及机器学习在近几年中一直是最重要的趋势之一。其中物联网一直以惊人的速度发展,从用智能手机控制的智能恒温器到装有数百个传感器的先进无人驾驶汽车,从某种意义上来说改变了人类的生活形态。

       近日,看到DFRobot新出了MIND+1.8测试版,增加了可视化面板组件,倍感兴奋。通过参加“玩转数据可视化-打造属于自己的物联网大屏”的培训,我也迫不及待的想试试,于是从角落里再次拿出吃灰已久的行空板,开始尝试做一块自己定制版的”物联网大屏“。

 

材料清单

设计构思: 

 

        本轮比赛的主题为智慧校园可视化数据平台,想做一个科技感十足,效果令人震撼,印象深刻作品。但由于时间紧张,工作繁忙等原因,但考虑到自己手头的硬件和自身技术水平,我想结合我们学校”芸香广场“来制作一个”智慧校园芸香广场大屏“的可视化数据平台。可以通过摄像头实时显示广场的情况。可以通过物联网大屏来给校园”芸香广场“的灯光进行控制。

 

智慧校园“芸香广场“可视化数据平台界面组件和布局设计效果:

大屏.jpg

通过测试后发现可以实现以下功能 :

       1.利用鼠标点击彩灯开关按钮实现对彩灯的打开和关闭。

       2. 屏幕座边的时钟组件可以实时显示当前时间。

       3.屏幕右边可以显示摄像头画面,模拟监控图像实现远程对广场的监控。

 

制作体会:

        经过测试发现MIND+1.8中的数据可视化面板功能非常强大。虽然实际使用中发现还有一些需要改进的地方,但已经非常值得赞扬了。相信后续推出的版本中会逐渐更新得更加强大易用!

 

制作反思及下一步待实现的功能:

       1.当鼠标移动到某个组件上能,能语音播放相关组件的数据。

       2.添加更多的显示组件和传感器数据。

       3.美化可视化数据大屏的界面,进一步完善物联网功能。

以下是程序截图:

程序.jpg

代码
Python代码:
#  -*- 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 NeoPixel
from pinpong.board import Board
import siot
import cv2

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if (msg.payload.decode() == (str("on"))):
        np1.range_color(0,30,0x0000FF)
    if (msg.payload.decode() == (str("off"))):
        np1.clear()


Board().begin()
siot.init(client_id="9550413928003256",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)

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
np1 = NeoPixel(Pin((Pin.P22)),30)
sy = cv2.VideoCapture()
sy.open(-1)
while not (sy.isOpened()):
    print("摄像头初始化中....")
print("摄像头初始完成")
siot.getsubscribe(topic="siot/摄像头")
siot.getsubscribe(topic="siot/彩灯")

while True:
    ret, grab = sy.read()
    siot.publish(topic="siot/摄像头", data=base642base64(grab))

评论

user-avatar
  • 花生编程

    花生编程2023.08.05

    赞赞赞

    0
    • 花生编程

      花生编程2023.08.05

      厉害厉害

      0
      • 三春牛-创客

        三春牛-创客2023.08.02

        赞赞赞

        0
        • 三春牛-创客

          三春牛-创客2023.08.02

          厉害厉害

          0