用行空板做一个物联网温湿度采集装置
本帖最后由 hnyzcj 于 2022-4-15 06:14 编辑【创意起源】 最近在玩行空板,碰巧社区又在发DHT20温湿度传感器测评。于是突发对于之前气象社团的温湿度采集装置进行升级。以前是用掌控板来做,虽然掌控板也有屏,也有WIFI,但是屏幕太小,还没有颜色,虽然有WIFI,但是采集数据还要传输SIOT服务器上。能否有一种既可以采集数据,又能架设SIoT服务的装备呢?行空板就是其中一项非常不错的选择,于是我就利用行空板制作一个物联网温湿度采集装置。【作品展示】https://www.bilibili.com/video/BV1jr4y1H7Dc?spm_id_from=333.999.0.0【使用的库】本程序中使用了的库如下所示
序号名称作用
1time时间模块
2pyttsx3语音合成
3unihiker行空板内置库,对于屏幕显示和控制,在unihiker库中基于tkinter库封装了一个GUI类,对于方便麦克风和usb喇叭的使用,在unihiker库中封装了一个Audio类。
4pinpongpinpong库由于支持众多的主控板及开源硬件,因此分成了3个包,board、extension和libs,board包中放置主板支持的功能及常用库,extension为定制类主控,libs中放置其他传感器的扩展库。
【功能简介】本次制作的温湿度采集装置,应该具备以下功能:(1)本地实施读取:通过行空板显示屏,读取到实时温湿度数据。(2)数据存储记录:由于行空板本身就集成了SIOT,所以我们将采集的数据上传的SIOT中存储。(3)高温语音报警:我们对温度设定了一个阈值,当超过该温度通过语音来提醒。【相关器材】
序号名称数量
1行空板1
2DHT201
3USB口喇叭1
4I2C连接线1
表1器材列表【编程环境】(1)连接设备:行空板可以有多种方法连接方式,USB线、路由器、Wi-Fi、热点模式。我们今天在这里推荐使用USB线连接行空板与电脑。这种方式IP地址固定且网络稳定。使用时行空板会虚拟为一个RNDIS网卡设备,此时板子IP地址固定为10.1.2.3,输入板子的IP即可开始编程。编程环境:行空板编程方式也有多种,我们这里使用的是Jupyter编程方式。连接行空板到电脑,开机完成后打开浏览器,输入IP地址10.1.2.3即可打开主页菜单。选择应用开关,在Jupyter应用中查看运行状态,如果是未运行,则先点击启动服务,等待状态变为正在运行后,点击打开页面可以打开Jupyter后台页面。同理,也需要将SIoT服务启动。(3)Jupyter打开后,点击New > Python 3(ipykernel)即可创建一个jupyter项目。(4)输入代码后,点击“运行”即可查看结果。
【电路连线】本次作品只用了一个DHT20温湿度传感器,只要将其接到行空板任意一个I2C口即可。【编写程序】本作品中我们将行空板的屏幕作为数据显示的窗口,因此需要通过编程定义各类控件,具体工作如下所示。import time
import pyttsx3
import siot#导入siot库
from pinpong.board import Board,Pin
from unihiker import GUI #导入包
from pinpong.libs.dfrobot_dht20 import DHT20
(2)UI界面编程
gui=GUI()#实例化GUI类
#边框
rect1=gui.draw_rect(x=10, y=80, w=220, h=100,width=3, color=(255, 200, 100))
rect2=gui.draw_rect(x=10, y=200, w=220, h=100,width=3, color=(255, 200, 100))
#填充
rect3=gui.fill_rect(x=13, y=83, w=214, h=94,color=(150, 180, 200))
rect4=gui.fill_rect(x=13, y=203, w=214, h=94,color=(150, 180,200))
#标题
info_text = gui.draw_text(x=120, y=60, text='温湿度检测系统',origin='bottom',font_size=20,)
#温度控制
info_text_temp = gui.draw_text(x=70, y=160,color=(255,255,255),text='温度:',origin='bottom',font_size=24)
digit1=gui.draw_digit(x=160, y=160, text='', origin = "bottom",color="red",font_size=28)
#湿度控制
info_text_tim = gui.draw_text(x=70, y=280,color=(255,255,255),text='湿度:',origin='bottom',font_size=24)
digit2=gui.draw_digit(x=160, y=280, text='', origin = "bottom",color="red",font_size=28)
(3)SIoT服务端
SERVER = "10.1.2.3"#MQTT服务器IP地址
CLIENT_ID = ""#创建空消息队列
IOT_UserName ='siot'#用户名
IOT_PassWord ='dfrobot'#密码
IOT_pubTopic1= 'xk/001'#“topic”为“项目名称/设备名称”,设备006
IOT_pubTopic2= 'xk/002'#设备007
siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
siot.connect()#连接
siot.subscribe(IOT_pubTopic1,sub_cb)#订阅消息+回调
siot.loop()#循环
(4)初始化及主程序
Board().begin() #初始化
dht20 = DHT20()
while True:
#增加等待,防止程序退出和卡住
t=dht20.temp_c()
h=dht20.humidity()
digit1.config(text =t) # 更新屏幕上温度的显示
digit2.config(text =h) # 更新屏幕上湿度的显示
if (t>24): # 温度高于24时语音播报
engine = pyttsx3.init()
engine.say('温度过高')
engine.runAndWait()
siot.publish(IOT_pubTopic1,str(t))#发送消息
siot.publish(IOT_pubTopic2,str(h))
time.sleep(1)
【设计结构】为了固定行空板,我们设计了一个支撑架。该支撑架包括两部分,一部分为切去一块的盒体,一部分为插片,将行空板固定在插片上后,插入盒体的插槽,即可固定。具体结构设计如下所示。【设备安装】(1)用激光切割机切出结构件(2)将行空板安装在插片上(3)将DHT20安装在盒体背板上(4)用502胶水粘接盒体结构件(5)将插片插入盒体插槽,并将DHT20连接(6)将USB音箱插入行空板USB口【运行测试】 图16系统上电 图17测试
什么时候 mind+也支持行空板 shzrzxlee 发表于 2022-4-15 09:19
什么时候 mind+也支持行空板
已经支持了,你在Wiki里面找一下 shzrzxlee 发表于 2022-4-15 09:19
什么时候 mind+也支持行空板
已经支持了 已经支持了 最近行空板是挺火的哈 嗯,不错,音箱哪儿来的?
诩 发表于 2022-4-23 10:08
嗯,不错,音箱哪儿来的?
妹子送的 SIOT没用过,也是个云平台吗 hnyzcj 发表于 2022-4-23 20:46
妹子送的
哈哈哈哈
狮山闲人 发表于 2022-4-23 22:23
SIOT没用过,也是个云平台吗
是一个简单版的MQTT服务器 行空板为什么在商城没有卖啊? 没找到? Ryan Chang 发表于 2022-5-2 22:03
行空板为什么在商城没有卖啊? 没找到?
预售 hnyzcj 发表于 2022-5-3 07:30
预售
感谢回复,由预售连接么? Ryan Chang 发表于 2022-5-3 08:19
感谢回复,由预售连接么?
已经结束了,等等吧 帅帅帅帅帅帅帅
USB音箱。即使自带声卡,声音也很轻
页:
[1]