_shenlan_ 发表于 2023-12-27 13:07

【云雀气象仪】物联网可视化气象站

本帖最后由 _shenlan_ 于 2023-12-27 13:07 编辑

# 【云雀气象仪】物联网可视化气象站

## 一、项目背景

本项目旨在评估云雀气象仪的性能。通过结合行空板的SIoT物联网服务,我们设计了一款能够图形化展示数据的可视化大屏平台。该平台不仅能够让用户轻松感知数据的大小,还能帮助判断数据的趋势。
!(https://cdn-us.imgs.moe/2023/12/21/Psiot_TIazobYwAz.jpg)

## 二、方案设计

1. 使用Mind+ 1.8.0制作物联网可视化气象站。

2. 利用行空板自带的SIOT 2.0物联网平台进行数据存储和通信。

3. 该项目包括大屏数据监测和文字通信系统。行空板通过云雀气象仪采集温湿度、风速、风向和大气压强等数据,并上传到物联网平台。连接可视化大屏后,学生可以直观地了解当前的气象状况,增强对生活中的气象现象的认识。

## 三、制作过程

### 硬件材料:
- 云雀气象仪 × 1
- 行空板 × 1
- 4pin线 × 1

### 软件:
- Mind+ v1.8.0

### 线路连接:
将行空板和云雀气象仪的Gravity接口使用4pin线连接起来。
![线路连接](https://img.dfrobot.com.cn/wiki/5cabf4771804207b131ae8cb/9bc27b3b15554c0bf8cfbe159c10d108.png)
### 设计可视化平台:

利用Mind+ v1.8.0的最新功能,用户可以自定义可视化平台。该平台支持多数据的可视化操作,并允许个性化面板设计。以下是一个示例的可视化面板,包括温湿度检测、风速、风向和气压的显示,以及与行空板终端的文字信息交流。
![数据可视化.jpg](https://cdn-us.imgs.moe/2023/12/21/数据可视化_QrVTMpaPM6.jpg)
### 打开行空板自带的SIoT服务

SIoT服务简介:
SIoT(Smart IoT)是一款全面的智能物联网服务,具有以下主要功能:
- 连接多种物联网设备(如传感器、执行器等),通过标准通信协议进行数据交换。
- 实时采集设备数据(如温度、湿度、位置等),用于监控状态和环境变化。
- 提供数据处理和分析能力,包括数据过滤、聚合、报警等,以发现异常、预测趋势和优化性能。
- 支持快速开发各种物联网应用(如智能家居、工业自动化等),提供API接口和开发工具。
- 注重数据安全和服务可靠性,采用加密技术保护数据传输,冗余备份和故障恢复保证服务连续性。

简而言之,SIoT服务是一个全面的物联网平台,助力实现设备连接、数据处理、应用开发以及智能化和自动化的物联网解决方案。

### 打开SIoT服务:

使用行空板自带的SIoT服务:
- 打开浏览器,输入地址10.1.2.3。
![行空板后台.jpg](https://cdn-us.imgs.moe/2023/12/21/行空板后台_azvCh2wMym.jpg)
- 打开控制台,点击应用开关,启动SIoT服务。
![运行Slot.jpg](https://cdn-us.imgs.moe/2023/12/21/运行Slot_vQqsSL7bul.jpg)
- 点击打开页面,新建主题,用于采集并存储云雀气象仪的数据。
!(https://cdn-us.imgs.moe/2023/12/21/siot_svcTGC7hjY.jpg)
分别新建以下7个主题:
- 温度
- 湿度
- 温湿度
- 风速
- 风向
- 大气压强
- 报告消息

### 编写程序:

1. 将编程模式切换为Python模式。

2. 加入扩展命令单元:
   - 点击扩展,从官方库中加入行空板、代码生成器、MQTT-py模块。
   
   - 从pinpong库中加入pinpong初始化。
   
   - 从用户库中加入云雀气象仪(如果之前未加入,请在以下网址搜索并添加:https://gitee.com/liliang9693/ext-yunque)。

编写图形化程序:
![积木程序.jpg](https://cdn-us.imgs.moe/2023/12/21/积木程序_wtPI0q3isS.jpg)

编写代码如下:
'''python
#-*- coding: UTF-8 -*-

# MindPlus
# Python
import sys
sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-yunque-thirdex")
from DFRobot_Atmospherlum import *
from pinpong.board import Board
from unihiker import GUI
import time
import siot

# 事件回调函数
def on_message_callback(client, userdata, msg):
    if (msg.topic == "siot/报告消息"):
      s_message.config(text=(str(time.strftime("%H:%M:%S")) + str((str(":") + str(msg.payload.decode())))))


siot.init(client_id="16698909563024067",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
Board().begin()
u_gui=GUI()
siot.connect()
siot.loop()
siot.set_callback(on_message_callback)
siot.getsubscribe(topic="siot/报告消息")
yunque_i2c = DFRobot_Atmospherlum_I2C(0x42)
while (yunque_i2c.begin() != 0):
    print("yunque_i2c initialize failed!")
    time.sleep(1)
print("Sensor initialize end!")
yunque_i2c.set_local_time()
time.sleep(1)

u_gui.draw_text(text="物联网可视化云雀\n气象仪数据发送端",x=20,y=10,font_size=15, color="#0000FF")
s_temp=u_gui.draw_text(text="",x=0,y=80,font_size=13, color="#0000FF")
s_speed=u_gui.draw_text(text="",x=0,y=130,font_size=13, color="#0000FF")
s_pressure=u_gui.draw_text(text="",x=0,y=180,font_size=13, color="#0000FF")
s_message=u_gui.draw_text(text="暂无消息",x=0,y=230,font_size=13, color="#0000FF")
s_time=u_gui.draw_text(text=time.strftime("%Y/%m/%d %H:%M:%S"),x=0,y=280,font_size=13, color="#0000FF")

while True:
    temp=yunque_i2c.get_value("Temp");humi=yunque_i2c.get_value("Humi");speed=yunque_i2c.get_value("Speed");dir=yunque_i2c.get_value("Dir");pressure=yunque_i2c.get_value("Pressure")
    # 以上代码的作用:将云雀气象仪采集的数据赋值给变量。
    s_temp.config(text="温湿度:"+temp+'℃,'+humi+'%.');s_speed.config(text="风速和风向:{}m/s,{}方向。".format(speed,dir));s_pressure.config(text="大气压强:{}hpa。".format(pressure));s_time.config(text=time.strftime("%Y/%m/%d %H:%M:%S"))
    # 该代码将云雀气象仪的采集数据显示在行空板上。
    siot.publish_save(topic="siot/温度", data=temp)
    siot.publish_save(topic="siot/湿度", data=humi)
    siot.publish_save(topic="siot/温湿度", data=(str(temp) + str((str(",") + str(humi)))))
    siot.publish_save(topic="siot/风速", data=speed)
    siot.publish_save(topic="siot/风向", data=dir)
    siot.publish_save(topic="siot/大气压强", data=pressure)
    time.sleep(300)

'''
程序运行时,行空板显示当前的温湿度、风速、风向、大气压强和通信消息等信息。siot服务器已经获取到了数据并保存到数据库。
!(https://cdn-us.imgs.moe/2023/12/21/siot总数据一览_UugFGL1Seg.jpg)
!(https://cdn-us.imgs.moe/2023/12/21/siot风速数据_nGzhtF8h32.jpg)
!(https://cdn-us.imgs.moe/2023/12/21/siot大气压强数据_yxnuj5ZXrd.jpg)

注意事项:
- 在Python主程序开始前,首先拖入pinpong初始化命令,接着拖入云雀初始化,然后加入Mqtt初始化和连接模块。参数按默认设置即可。
- 在行空板显示对象命令中,首先定义对象,然后在循环执行中更新对象。为了代码简洁,建议使用代码生成器完成这部分工作。
- 在本次操作中,需要将温湿度、风速、风向和气压等测试量加入显示行列。由于图形化编程可能较为繁琐且耗时,本项目选择使用命令行形式编写代码,以实现更简洁的编程和更短的耗时。
- 在使用SIoT服务前,务必先打开服务并新建主题,以便在程序和可视化平台中使用。
- 云雀气象仪的扩展口支持扩展2个传感器,例如数字环境光传感器、氧气传感器、臭氧传感器、空气质量传感器、PM2.5空气质量传感器、二氧化碳传感器等。

## 四、课程应用

在初中学生的信息技术学习课程中,我们将引入云雀气象仪、SIoT服务、Mind+可视化平台和行空板等工具,通过实操方式让学生掌握物联网技术的基础知识和应用。

首先,云雀气象仪是一种便携式气象监测设备,能够测量温度、湿度、气压、光照等多种环境参数。学生可以通过连接云雀气象仪到行空板上,采集实时的气象数据。

接下来,我们利用局域网内的SIoT服务来实现设备间的通信和数据传输。由于SIoT服务的使用对于初中生来说可能有些复杂,因此我们将从简单的MQTT-Py模块操作开始教学。通过编写Python代码,学生可以学习如何使用MQTT协议发送和接收消息,这是实现设备间通信的基础。

然后,我们将引导学生在SIoT服务中新建主题,这是将不同设备的数据进行分类和管理的重要步骤。通过实践,学生将理解如何根据实际需求设置主题,并将云雀气象仪采集的数据发布到相应的主题上。


为了更好地展示和分析收集到的气象数据,我们将引入Mind+可视化平台。这是一个适合初学者的图形化编程平台,可以快速创建交互式界面和数据可视化图表。学生将在平台上设计和实现一个简单的气象数据显示和分析界面,通过拖拽和配置各种图形元素,将SIoT服务中的气象数据实时显示出来。

在整个学习过程中,我们将遵循“学中做、做中学”的教学理念,通过一系列简单易懂的案例,逐步引导学生从理解基础概念到熟练操作各个工具。在SIoT服务的新建主题环节,可以先让学生创建一个通用的主题,然后逐步细化为针对不同气象参数的主题。在Mind+可视化平台的设计阶段,可以先让学生创建一个简单的数据显示界面,然后再添加数据分析和报警等功能。

通过这样的教学方式,学生不仅能掌握物联网技术的基本原理和操作方法,还能在实践中锻炼解决问题的能力和创新思维。
!(https://cdn-us.imgs.moe/2023/12/27/IMG_20231222_141322(1)_czOe2pq41O.jpg)

## 五、总结测评云雀气象仪
使用云雀气象仪期间我总结了云雀气象仪的一些优点。
1. **多功能性**:云雀气象仪能够测量风速、风向、温度、湿度以及气压等数据,为气象监测提供了全面的信息。
2. **高精度传感器**:确保了测量数据的准确性。
3. **大存储空间**:可以存储大量的气象数据,并通过Type-C接口导出进行分析。
4. **优秀的兼容性**:可以与Arduino、Microbit、行空板等常用的开源硬件控制器连接,方便用户进行二次开发和扩展应用。
5.**操作简单,连线方便**:在连接行空板时,只需要一条4pin线将云雀气象仪和行空板连接起来即可,不存在接反或者烧板的情况。

okhxyyo 发表于 2023-12-27 13:29

<p>哇,看到小朋友啦~~祖国的花朵们好好学习成长呀</p>
页: [1]
查看完整版本: 【云雀气象仪】物联网可视化气象站