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

物联网+罗刹马户又鸟饮食 简单

头像 绘编程吴老师 2023.08.09 529 5

从前啊,在大唐的西边,有一个遥远的岛屿,这个岛屿是一个很少有人来的偏僻国度。

这个国度叫什么呢,叫罗刹国。

这罗刹国啊,顾名思义,民间传说,这罗刹国本来没有人,是一群恶鬼去这个岛上了,这才有了罗刹国!

古代动物是饮食习惯碰撞现在的科技看看能出现什么样的火花!

微信图片_20230809114826.jpg

步骤1 编写程序,做局域网;

在行空板上运行的优点是可以避免网络问题,数据独立存储,可24小时运行,推荐。

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

· 升级方法:

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

2.打开Mind+,在项目中打开上一步下载的升级行空板SIOTV2.mp文件。
image.png
3.行空板连接电脑待启动完成,点击连接远程终端中选择10.1.2.3连接行空板,连接成功之后点击运行,等待行空板重启完成即可。
image.png
4.此时打开行空板上的SIOT网页,按Ctrl+F5刷新页面,可以看到界面已经

image.png
image.png

4.1-打开可视化面板

打开Mind+1.8.0,在顶部菜单栏可以看到可视化面板的入口,点击即可弹出新窗口(方便一边编程调试一边看效果)。
 

image.png

 

2.点击新建项目,选择新建空白项目,输入项目名称描述后点击确认即可新建一个项目,点击编辑即可进入面板编辑页面。

image.png

4.2-连接SIoT V2服务器

进入页面后会弹出提示选择数据源,如果是电脑本地启动SIOT V2,则ip为127.0.0.1,如果要连接行空板上的SIoT V2,则ip可以填写行空板的ip。其他设置保持默认,确认后会提示连接成功,如果错误则检查SIoT是否已经运行且IP正确。

 

image.png

 

可视化界面非常简洁,与Mind+编程界面类似,顶部是菜单栏,左侧为组件栏,中间编辑区,右侧设置栏。

image.png

随着科技的进步,人们对生活品质的追求越来越高了。空气作为生活中最基础的部分,是越来越受人们的关注,比如最常见PM2.5,PM1.0,PM10等空气中的颗粒物。所以能够实时检测身边的空气质量是多么幸福的一件事啊。根据这一需求,DFRobot推出了一款可以测量PM2.5,PM1.0,PM10等颗粒物的空气质量传感器,它采用了简单易用的Gravity接口,能兼容大部分的主控器,配上我们的样例代码,可快速搭建出自己的空气质量检测站。典型的使用场景:吸烟室、厨房、温泉、浴室等环境。

PM2.5空气质量传感器采用的是一款基于激光散射原理的数字式通用颗粒物传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度,并利用I2C接口输出相关数据。本传感器可嵌入各种与空气中悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数据。

工作原理介绍: 本传感器采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射,同时在某一特定角度收集散射光,得到散射光强度随时间变化的曲线。进而微处理器基于米氏(MIE)理论的算法,得出颗粒物的等效粒径及单位体积内不同粒径的颗粒物数量。

  image.png

 

 

 

image.png

Gravity: SCI采集模块是一款功能强大且高度集成的数据采集模块,具有屏幕显示、传感器自动识别、传感器校准、数据存储、RTC时钟以及数据转换等多功能,让数据采集变得更加便捷和高效。此外,SCI采集模块支持多种供电方式,可通过I2C接口输出传感器采集的物理量数据,兼容Arduino、micro:bit、掌控板、行空板、树莓派等硬件平台。

特性

· 激光散射原理实现精准测量

· 零错误报警率

· 实时响应并支持连续采集

· 最小分辨粒径 0.3µm

· 六面全方位屏蔽,抗干扰性能更强

· 超薄设计,整体厚度仅13.6毫米,适用于便携式设备。

 

image.png

 

image.png

 

屏幕显示:SCI采集模块板载屏幕,可实时显示传感器采集的数据,便于用户观察。

即插即用:SCI采集模块可以自动识别连接的I2C传感器种类,无需手动设置,提高使用的便利性。

 

 

程序截图

 

screenshots-罗刹国1.mp-1691552384914.png

 

 

screenshots-罗刹国2-1691552239151.png

 

可视平台

 

屏幕截图 2023-08-09 114133.png

网端

屏幕截图 2023-08-09 143239.png

 

作品图片

微信图片_20230809114756.jpg
微信图片_20230809114826.jpg
1115789D5125299CFFAB0839A50A1044.png

 

材料清单

代码
#  -*- 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 dfrobot_rp2040_sci import *
from unihiker import GUI
import siot
import time
import cv2


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

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(-1)
while not (vd.isOpened()):
    print("摄像头初始化中....")
print("摄像头初始化完成")
u_gui.draw_image(image="2.png",x=0,y=0)
siot.getsubscribe(topic="siot/实时监控")
siot.getsubscribe(topic="siot/光照数值")
siot.getsubscribe(topic="siot/空气质量")
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.")

while True:
    if vd.grab():
        ret, grab = vd.read()
        siot.publish_save(topic="siot/实时监控", data=base642base64(grab))
    else:
        print("没有下一帧")
    siot.publish_save(topic="siot/光照数值", data=light.read())
    siot.publish_save(topic="siot/空气质量", data=(str(SCI1.get_value1(SCI1.eALL,"PM1.0")) + str((str(",") + str((str(SCI1.get_value1(SCI1.eALL,"PM2.5")) + str((str(",") + str(SCI1.get_value1(SCI1.eALL,"PM10"))))))))))
    if (light.read() < 230):
        p_p24_out=Pin(Pin.P24, Pin.OUT)
        p_p24_out.write_digital(1)
    else:
        p_p24_out=Pin(Pin.P24, Pin.OUT)
        p_p24_out.write_digital(0)
代码
/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Servo.h>
#include <DFRobot_HuskyLens.h>
// 创建对象
DFRobot_HuskyLens huskylens;
Servo             servo_P0;
Servo             servo_P1;
Servo             servo_P8;


// 主程序开始
void setup() {
	mPython.begin();
	servo_P0.attach(P0);
	servo_P1.attach(P1);
	servo_P8.attach(P8);
	display.setCursor(16, 5);
	display.print("欢迎来到罗刹国");
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_TAG_RECOGNITION);
	servo_P0.angle(abs(0));
	servo_P1.angle(abs(0));
}
void loop() {
	huskylens.request();
	if (huskylens.isLearned(1)) {
		if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
			rgb.write(0, 0xFF0000);
			display.setCursorLine(3);
			display.printLine("马 户");
			servo_P8.angle(abs(70));
			delay(3000);
			buzz.freq(880, BEAT_1);
			delay(1000);
			servo_P8.angle(abs(0));
			rgb.write(0, 0x000000);
			display.fillInLine(3, 0);
		}
	}
	if (huskylens.isLearned(2)) {
		if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {
			rgb.write(1, 0x0000FF);
			display.setCursorLine(4);
			display.printLine("又鸟");
			servo_P1.angle(abs(70));
			delay(3000);
			buzz.freq(880, BEAT_1);
			delay(1000);
			servo_P1.angle(abs(0));
			display.fillInLine(4, 0);
			rgb.write(1, 0x000000);
		}
	}
}

评论

user-avatar
  • 少东

    少东2023.09.04

    是没想到在这里还能被洗脑,哈哈哈哈哈哈

    1
    • 绘编程吴老师

      绘编程吴老师2023.11.08

      哈哈

  • hnyzcj

    hnyzcj2023.08.13

    哈哈哈哈,这是要被玩坏的节奏,马户,又鸟进军创客界

    1
    • 绘编程吴老师

      绘编程吴老师2023.08.19

      😄

  • hacker_

    hacker_2023.08.09

    666

    0