拿到DFROBOT的测试新产品:云雀气象仪已经多日,前阶段因为太忙,一直没有启动评测,这些天尝试着玩一玩这个“小云雀”,同时结合Mind+ 1.8.0版本进行小项目的创作,毕竟咱也算第一个吃螃蟹的人(Mind+1.8仅供内部评测)。项目演示效果:
本次仔爸使用云雀气象仪,结合行空板,制作了一个小小的个人气象站,暂且命名为“小云雀气象站”,这个项目也非常契合信息科技新课标中有关物联网相关的知识内容,仔爸也发现在新课标的最后提供了一个跨学科主题学习案例:在线数字气象站,应该说小云雀气象站能实现该案例的大部分内容(未实现部分有待进一步尝试)。
不过信息科技课标中的这个案例是面向7~9年级学生,我感觉实现起来还是有一定的难度,而云雀气象仪的推出,完全可以将这个案例下沉到小学去实施,降低了学习的门槛,实在是中小学生的一大幸事。
好了,话不多说,让我们进入激动人心的云雀气象仪评测的内容吧!
硬件:
云雀气象仪 x1
行空板 x1
microbit/掌控板扩展板 x1
电吹风 x1
步骤1 认识云雀气象仪
先来一张项目图吧,三角架支撑的云雀气象仪与行空板通过扩展板上的I2C接口进行了连接。
云雀的帽子已经拿下来,露出了风杯,其实帽子就是一个指南针。
云雀各部分的介绍直接参见
DFROBOT的知识库https://wiki.dfrobot.com.cn/_SKU_EDU0157_%E4%BA%91%E9%9B%80%E6%B0%94%E8%B1%A1%E4%BB%AA#target_0
步骤2 项目制作
小云雀气象站的设计原理是,通过云雀气象仪获取自然界中的温度、湿度、风力、气压等数据,将这些数据发送并存储到行空板自带的SIoT服务器中,然后通过Mind+1.8中的可视化面板显示气象数据。
1.前期准备
升级到ISoT V2版本
由于目前Mind+1.8中的可视化面板中各个控件仅支持连接SIoT V2版本的物联网服务器,此处可以采用Windows操作系统下运行最新发布的SIoT V2 服务器程序,也可以将行空板中的SIoT版本进行升级(推荐),因此我们首先升级行空板中的SIoT。打开Mind+1.8,切换到Python模式,连接行空板,然后打开提供的升级程序“升级行空板SIOTV2.mp”,单击运行按钮,如下图各步骤。
在Mind+中加载云雀用户库
在Mind+中打开“扩展”,切换到“用户库”,然后在项目网址中输入下面的网址:https://gitee.com/liliang9693/ext-yunque.git再按回车,下方出现云雀用户库,单击即可调用。
2.图形化程序编写
该程序一共三个脚本块,前两个分别是初始化函数和发送函数,发送函数的作用是将获取的数据通过MQTT模块发送并存储到SIoT服务器。本来想着将“云雀初始化直到成功 I2C模式地址0X42”积木块也放到“初始化”函数里,但发现不成功,原来创建对象时,需要在函数内设置成全局,可在Python代码方式下进行尝试。
3.Python编程
这里仔爸尝试进行Python程序的编写和修改,同时针对图形化中无法将云雀初始化放入“初始化”函数进行问题的解决。这里我们需要先从gitee仓库下载一个DFRobot_Atmospherlum.py文件,也就是在python编程中使用的云雀扩展库。
同时将该文件与我们编写的主程序放在同一目录中
接下来我们对上一步图形化编程完成后自动生成的Python程序进行修改。
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from DFRobot_Atmospherlum import * # 调用了同一目录下的DFRobot_Atmospherlum.py文件
from pinpong.board import Board
import time
import siot
# 自定义函数
def ChuShiHua():
# 已经放到“初始化”函数中
global yunque_i2c
yunque_i2c = DFRobot_Atmospherlum_I2C(0x42)
while (yunque_i2c.begin() != 0):
print("yunque_i2c initialize failed!!")
time.sleep(1)
print("Sensor initialize success!!")
yunque_i2c.set_local_time()
time.sleep(1)
global wind_direct
wind_direct = {"N": "北","S": "南","E": "东","W": "西","NE": "东北","SE": "东南","SW": "西南","NW": "西北",}
def FaSong():
siot.publish_save(topic="siot/风向", data=(wind_direct[wind]))
siot.publish_save(topic="siot/风速", data=wind_speed)
siot.publish_save(topic="siot/温度", data=temperature)
siot.publish_save(topic="siot/湿度", data=humidity)
siot.publish_save(topic="siot/气压", data=pressure)
Board().begin()
siot.init(client_id="",server="10.1.2.3",port=1883,user="siot",password="dfrobot")
siot.connect()
siot.loop()
ChuShiHua()
while True:
wind = (yunque_i2c.get_value("dir"))
pressure = (yunque_i2c.get_value("Pressure"))
temperature = (yunque_i2c.get_value("Temp"))
humidity = (yunque_i2c.get_value("Humi"))
wind_speed = (yunque_i2c.get_value("speed"))
time.sleep(1)
FaSong()
4.可视化面板设计
可视化面板极大方便我们设置要展示的数据内容,无需对每个控件、图标进行代码编程,可谓零代码实现数据可视化,否则需要在Python中调用matplotlib库、PyEcharts库等手动编程实现。
该项目中,温度采用了柱状图,相关湿度使用了水波图,风速使用拆线图,气压使用了进度仪表盘,另外还使用了时钟、色块、文字和静态图片等装饰组件。具体可视化面板相关操作参见:
Mind+1.8可视化面板知识库
https://mindplus.dfrobot.com.cn/dashboard#target_1
步骤3 项目完成后的再思考
一个简单物联网迷你小气象站已经完成建设,我们可以将它应用到中小学教学中去,但我在完成该项目中,有以下思考和改进:
1.可视化面板的编辑还可以再方便一点,比如控件的复制,以及控件更多参数的设置。
2.结合离线或在线语音合成进行天气播报。
3.对数据的计算和分析,如通过风速计算出风力,求一段时间内的平均值(如当天的平均气温等)
百度百科:风力等级表
https://baike.baidu.com/item/%E9%A3%8E%E5%8A%9B%E7%AD%89%E7%BA%A7%E8%A1%A8
4.启用云雀本身的离线记录功能,将云雀直接通过USB数据线与电脑连接后,会出现一个U盘,里面有一个config.txt的配置文件,可以通过修改参数实现让云雀自己记录获取的数据,应该是一个.csv数据文件,供分析。
5.可视化面板脱离Mind+环境运行。仔爸通过仔细查找发现在Mind+ 1.8软件文件夹下有一个resources子文件夹,里面有一个网页可以打开可视化面板,那么是否可以将该文件夹下相关的子文件夹拷贝到其他电脑上直接打开实现数据可视化?
花生编程2023.07.10
不错不错
花生编程2023.07.10
赞
三春牛-创客2023.06.08
不错不错
三春牛-创客2023.06.08
厉害厉害
ROkl3Od35LJI2023.06.04
666
hacker_2023.05.26
赞!!!
hacker_2023.05.24
非常的好
hacker_2023.05.24
非常的好
贺兰山下2023.05.03
行空板很好的一个案例