本帖最后由 hnyzcj 于 2022-4-15 06:14 编辑
【创意起源】 最近在玩行空板,碰巧社区又在发DHT20温湿度传感器测评。于是突发对于之前气象社团的温湿度采集装置进行升级。以前是用掌控板来做,虽然掌控板也有屏,也有WIFI,但是屏幕太小,还没有颜色,虽然有WIFI,但是采集数据还要传输SIOT服务器上。能否有一种既可以采集数据,又能架设SIoT服务的装备呢?行空板就是其中一项非常不错的选择,于是我就利用行空板制作一个物联网温湿度采集装置。 【作品展示】 【使用的库】 本程序中使用了的库如下所示 序号 | | | | | | | | | | | 行空板内置库,对于屏幕显示和控制,在unihiker库中基于tkinter库封装了一个GUI类,对于方便麦克风和usb喇叭的使用,在unihiker库中封装了一个Audio类。 | | | pinpong库由于支持众多的主控板及开源硬件,因此分成了3个包,board、extension和libs,board包中放置主板支持的功能及常用库,extension为定制类主控,libs中放置其他传感器的扩展库。 |
【功能简介】 本次制作的温湿度采集装置,应该具备以下功能: (1)本地实施读取:通过行空板显示屏,读取到实时温湿度数据。 (2)数据存储记录:由于行空板本身就集成了SIOT,所以我们将采集的数据上传的SIOT中存储。 (3)高温语音报警:我们对温度设定了一个阈值,当超过该温度通过语音来提醒。 【相关器材】 表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测试
|