本帖最后由 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测试     
 
 |