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

#新物联网挑战二#+智能植物育苗养护数据采集系统 简单

头像 feng0539 2023.06.28 712 11

【项目介绍】

 

一、【背景介绍】

 

        随着全球气候变化和环境恶化问题日益严重,低碳环保已成为全球关注的焦点。实现低碳环保的生活方式和发展模式,对于缓解环境压力、保护生态系统具有重要意义。利用活动主办方提供的硬件包(水温传感器、水TDS传感器、空气温湿度传感器、氧气传感器、空气质量传感器、土壤湿度传感器、分贝传感器、环境光传感器、行空板、SCI采集模块),通过传感器联动控制,可以实现植物生长的智能化管理,提高植物苗期的生长质量和成活率,同时也为低碳环保事业贡献一份力量。

        该系统能够实时监测植物生长所需的温度、湿度、光照强度、空气质量以及土壤湿度等参数,并通过数据分析技术为植物提供最佳的生长环境。

        具体来说,我们可以将水温传感器安装在水箱中,用于实时监测水温,并控制加热和降温设备,以保证水温在植物生长所需的范围内。同时,水TDS传感器可以检测水中的溶解物质含量,从而判断水的质量是否符合植物的要求。如果水质不佳,系统会及时发出警报并进行处理。

        空气温湿度传感器可以检测空气中的温度和湿度,从而精准控制环境温湿度,并自动开启或关闭空气加湿设备。氧气传感器可以检测室内氧气含量,避免植物缺氧或二氧化碳过高的情况。空气质量传感器可以检测室内空气中有害物质含量,并自动开启或关闭空气净化器。

        土壤湿度传感器可以实时检测植物生长介质中的湿度,根据植物所需的水分量,自动调节灌溉设备。分贝传感器可以检测室内噪音水平,保证植物能够在安静的环境中生长。环境光传感器可以检测室内光照强度,自动调节灯光设备,保证植物得到足够的光照。

 

二、【遇到的问题】
 

        因为缺少一些配套的硬件,只是在理论上实现一些效果,所以本作品主要讲了数据采集。

【制作过程】

步骤1 硬件准备

材料清单

  • 行空板 X1 链接
  • SCI采集模块 X1 链接
  • 电容式土壤湿度传感器 X1 链接
  • 模拟声级计/分贝计/噪音计 X1 链接
  • NS160 空气质量传感器 X1 链接
  • I2C 氧气传感器 X1 链接
  • 模拟TDS传感器 X1 链接
  • SHT31-F数字温湿度传感器 X1 链接
  • I2C VEML7700 环境光传感器 X1 链接
  • 水温度传感器 X1 链接
  • 两头PH2.0-3P白色硅胶绞线 长10cm X4 链接
  • 两头PH2.0-4P白色硅胶绞线 长10cm X5 链接

硬件连接:分贝传感器、光线传感器、氧气传感器、温湿度传感器接到SCI,SCI接到行空板,TDS传感器、空气质量传感器、水温传感器、土壤湿度传感器和摄像头连接到行空板,行空板连接到电脑。

如图:

1687998527909.jpg

步骤2 软件准备

Mind+1.8.0版本SIoT V2版本

下载链接:
1.腾讯微云下载(推荐): 链接: https://share.weiyun.com/6SFhgLQj

阿里云盘下载:
链接:https://www.aliyundrive.com/s/BXPfB9TpjEn
提取码: 49vj百度云盘下载:
链接:https://pan.baidu.com/s/1vjb8phx8wUf0BiLlEQV9oQ?pwd=mind
提取码:mind

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

升级方法:

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

2.打开Mind+,在项目中打开上一步下载的升级行空板SIOTV2.mp文件。

3.行空板连接电脑待启动完成,点击连接远程终端中选择10.1.2.3连接行空板,连接成功之后点击运行,等待行空板重启完成即可。

4.此时打开行空板上的SIOT网页,按Ctrl+F5刷新页面,可以看到界面已经SIOTV2了,登录账号是siot,密码dfrobot。

 

连接行空板上的SIoT服务器

在可视化平台上输入行空板的IP,USB线连接电脑时为10.1.2.3,点击完成即连接到了行空板上的SIoT服务器。

开关按钮选择Topic为siot/测试,按钮开启发送on,关闭发送off

 

 

步骤3 SIoT服务器设置

打开http://10.1.2.3:8080/topics网址,新建主题如下:

1.png
2.png
3.png

步骤4 Mind+扩展设置

1.官方库添加

4.png

2.pinpong库添加

5.png

3.用户库添加

6.png

步骤5 编程

1.初始化

7.png

2.MQTT订阅

8.png

3.天气预报部分设置

         本部分借鉴了[教程]【行空板图形化Python入门教程】第15课:天气助手请移步学习。

用自己的账号登录,地址改为兰山,主要变成如下:

1685409067463.png

4.变量设置

10.png

5.天气预报内容获取设置

11.png
 

6.传感器数据获取设置

12.png

7.摄像头图传设置

13.png

8.其他设置

14.png

 

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
import base64
from io import BytesIO
from PIL import Image
from pinpong.libs.dfrobot_ens160 import Ens160
from pinpong.libs.dfrobot_tds import TDS
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import DS18B20
from dfrobot_rp2040_sci import *
from pinpong.board import Board
from pinpong.board import Pin
import requests
import siot
import time
import cv2


Board().begin()
siot.init(client_id="8901479492667037",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
siot.connect()
siot.loop()
p_p21_analog=Pin(Pin.P21, Pin.ANALOG)
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.")

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()):
    pass
p_ens160 = Ens160(0x52)
p_ens160.set_pwr_mode(p_ens160.ENS160_STANDARD_MODE)
p_ens160.set_temp_hum(27, 67)
tds1 = TDS(Pin((Pin.P22)))
ds1 = DS18B20(Pin((Pin.P24)))
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/风速")
siot.getsubscribe(topic="siot/空气质量")
siot.getsubscribe(topic="siot/气压")
siot.getsubscribe(topic="siot/摄像头")
siot.getsubscribe(topic="siot/SHT31温度")
siot.getsubscribe(topic="siot/SHT31湿度")
siot.getsubscribe(topic="siot/ENS160二氧化碳")
siot.getsubscribe(topic="siot/氧气传感")
siot.getsubscribe(topic="siot/ENS160TVOC")
siot.getsubscribe(topic="siot/ENS160空气质量")
siot.getsubscribe(topic="siot/水温传感")
siot.getsubscribe(topic="siot/TDS传感")
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/星期")
siot.getsubscribe(topic="siot/时间")
siot.getsubscribe(topic="siot/传感器")
siot.getsubscribe(topic="siot/检修时间")
url = (str("https://www.yiketianqi.com/free/day?appid=29988737&appsecret=Jipy6ZPN&unescape=1&city=") + str("兰山"))
response = requests.get(url)
data = response.json()

while True:
    ShuiWen = ds1.temp_c()
    TDS = tds1.get_value()
    SHT31WenDu = SCI1.get_value1(SCI1.eALL,"Temp_Air")
    SHT31ShiDu = SCI1.get_value1(SCI1.eALL,"Humi_Air")
    YangQi = SCI1.get_value1(SCI1.eALL,"O2")
    ENS160CO2 = p_ens160.get_eco2()
    ENS160TVOC = p_ens160.get_tvoc()
    ENS160KongQiZhiLiang = p_ens160.get_aqi()
    TuRangShiDu = p_p21_analog.read_analog()
    FenBei = SCI1.get_value1(SCI1.eALL,"Sound")
    HuanJingGuang = SCI1.get_value1(SCI1.eALL,"Light")
    siot.publish(topic="siot/天气情况", data=(str("天气情况:  ") + str((data["wea"]))))
    siot.publish(topic="siot/实时温度", data=(str((str("实时温度:  ") + str((data["tem"])))) + str("°C")))
    siot.publish(topic="siot/最高温度", data=(str("最高温度:  ") + str((str((data["tem_day"])) + str("°C")))))
    siot.publish(topic="siot/最低温度", data=(str("最低温度:  ") + str((str((data["tem_night"])) + str("°C")))))
    siot.publish(topic="siot/湿度", data=(str("空气湿度:  ") + str((data["humidity"]))))
    siot.publish(topic="siot/风向", data=(str("风向:  ") + str((data["win"]))))
    siot.publish(topic="siot/风力", data=(str("风力:  ") + str((data["win_speed"]))))
    siot.publish(topic="siot/风速", data=(str("风速:  ") + str((data["win_meter"]))))
    siot.publish(topic="siot/空气质量", data=(str("空气质量:  ") + str((data["air"]))))
    siot.publish(topic="siot/气压", data=(str("气压:  ") + str((data["pressure"]))))
    siot.publish(topic="siot/日期", data=(data["date"]))
    siot.publish(topic="siot/星期", data=(data["week"]))
    siot.publish(topic="siot/时间", data=(data["update_time"]))
    siot.publish_save(topic="siot/SHT31温度", data=SHT31WenDu)
    siot.publish_save(topic="siot/SHT31湿度", data=SHT31ShiDu)
    siot.publish_save(topic="siot/氧气传感", data=YangQi)
    siot.publish_save(topic="siot/ENS160二氧化碳", data=ENS160CO2)
    siot.publish_save(topic="siot/ENS160TVOC", data=ENS160TVOC)
    siot.publish_save(topic="siot/ENS160空气质量", data=ENS160KongQiZhiLiang)
    siot.publish_save(topic="siot/水温传感", data=ShuiWen)
    siot.publish_save(topic="siot/TDS传感", data=TDS)
    siot.publish_save(topic="siot/土壤湿度", data=TuRangShiDu)
    siot.publish_save(topic="siot/分贝传感", data=FenBei)
    siot.publish_save(topic="siot/环境光", data=HuanJingGuang)
    ret, grab = vd.read()
    siot.publish(topic="siot/摄像头", data=base642base64(grab))
    siot.publish_save(topic="siot/值班教干", data=(str("值班人员:") + str("王二麻子")))
    siot.publish_save(topic="siot/联系电话", data=(str("联系电话:") + str("13900000000")))
    siot.publish_save(topic="siot/学校公告栏", data="今天下午5点全体员工到会议室集合开会")
    siot.publish_save(topic="siot/检修时间", data="2023年6月29日")
    siot.publish_save(topic="siot/传感器", data="水温传感器安装在水箱中,用于实时监测水温,并控制加热和降温设备,以保证水温在植物生长所需的范围内。TDS传感器可以检测水中的溶解物质含量,从而判断水的质量是否符合植物的要求,如果水质不佳及时发出警报并进行处理。空气温湿度传感器可以检测空气中的温湿度,从而精确控制环境温湿度,并自动开启或者关闭空气加湿设备;氧气传感器可以检测室内氧气含量,避免植物缺氧或者二氧化碳过高的情况;空气质量传感器可以检测室内空气的质量,并自动开启或者关闭空气净化器;土壤湿度传感器可以实时监测植物生长介质的湿度,根据植物所需的水份量,自动调节灌溉设备;分贝传感器可以检测室内噪音水品,保证植物能够在安静的环境中生长;环境光传感器可以检测室内光照强度,自动调节灯光设备,保证植物得到足够的光照。")

步骤6 可视化大屏设置

可视化大屏布局如下图:

15.png

背景用的是网络图片进行了PS。

【效果展示】

 

智能植物育苗养护温室数据采集系统2.gif

效果用录屏实现的

 

【总结】

 

通过本次作品制作,已经能熟练的使用SCI和Mind+数据可视化,确实是神器啊。由于传感器比较多,SCI和行空板预留接口有限,所以直接引出I2C,利用面包板进行了扩展,运行了几天,偶尔SCI有卡死,但是我感觉可能杜邦线连接不牢固问题,后来用交代粘牢后,没有再出现卡死现象。本作品主要是数据采集方面的运用,数据采集后如何运用实现自动化,后续需要大量时间来采集信息,例如不同植物对环境要求不一样,就得根据具体情况进行预警设置和自动化。

【资源】

评论

user-avatar
  • 花生编程

    花生编程2023.08.18

    赞赞赞

    0
    • 花生编程

      花生编程2023.08.18

      厉害

      0
      • fablab于奇思

        fablab于奇思2023.08.15

        你好,请问这个实时画面是怎么获取的呢?

        0
        • 三春牛-创客

          三春牛-创客2023.08.14

          赞赞赞赞

          0
          • 三春牛-创客

            三春牛-创客2023.08.14

            厉害

            0
            • 猪猪1232

              猪猪12322023.07.22

              学习中

              0
              • hacker_

                hacker_2023.07.16

                666

                0
                • 腿毛利小五郎

                  腿毛利小五郎2023.07.04

                  这个界面好霸气

                  3
                  • winn1232

                    winn12322023.07.31

                    6666

                  • winn1232

                    winn12322023.07.31

                    666

                  • winn1232

                    winn12322023.07.31

                    6666