基于Node-Red和树莓派的物联网应用系统开发
——以中职物联网专业系统开发课程为例

2020-07-29 01:41广州市番禺区职业技术学校庄进样
广东教育 2020年7期
关键词:树莓温湿度编程

文/广州市番禺区职业技术学校 庄进样

一、引言

近年来物联网编程工具Node-Red和树莓派以学习门槛低、硬件成本低和具有趣味性的特点,在中职信息技术教学中倍受青睐。如广州市中职信息技术教研会在2019年举行了两期树莓派与人工智能机器人培训,全国职校信息技术技能大赛中职组在2018年和2019年举行了可视化智能控制系统设计与调试竞赛,该赛项的内容正是使用Node-Red编程工具和树莓派。

目前的中职物联网应用系统开发课程教学主要选择单片机和C语言作为开发工具,而本文则基于实践教学设计,介绍了如何使用可视化编程工具Node-Red和树莓派进行物联网应用系统开发。

二、树莓派和Node-Red

树莓派(Raspberry Pi)的尺寸只有信用卡大小,是为计算机编程教育而设计的微型电脑。它除了能代替日常桌面计算机的用途外,还能使用GPIO(General-Purpose Input/Output,通用输入/输出端口)为物联网应用提供很好的实践案例。官方推荐安装操作系统为基于Debian的Raspbian,该系统中预安装了Node-Red编程工具。

Node-Red是IBM开发的一个开源项目,以新颖有趣的方式将硬件设备、应用程序接口、在线服务连接起来,编程时只需要在浏览器中拖拽节点(Node),然后把这些节点用线连接起来,而数据则通过这些连线在节点间传递。节点是封装了特定功能的模块,核心节点会随Node-Red一起被默认安装,包括8个主要类别:输入、输出、功能、社交、存储、高级和Raspberry Pi。除了核心节点外,用户还可以在线安装其他节点,如仪表盘节点(node-red-dashboard)、DHT温湿度传感器(node-dht-sensor)等等。正是由于Node-Red这种简单、高效的编程方式,它被用作物联网的一种粘合剂并很快发展成为一种通用的、可视化的物联网编程工具。

三、系统功能设计

物联网应用系统以智能教室系统为例,实现的功能包括:在终端显示教室灯光当前的状态;进行开灯、关灯操作;显示教室实时的温度和湿度。除此之外,系统还能够设定温度的阈值,如果温度高于设定的值,系统则发出人声报警(“湿度太高,可以开空调”)和蜂鸣器鸣叫,并能够设定湿度的阈值,如果湿度高于设定的值,则自动打开排气扇进行抽湿。

四、硬件设计

现实智能教室功能的硬件主要包括树莓派、LED、DHT11温湿度传感器、蜂鸣器、12V排气扇、12V电源、继电器、杜邦线。然而因为树莓派GPIO输出不能达到12V,无法直接驱动排气扇,所以需要使用继电器进行电路转换。

树莓派提供40个GPIO引脚,通过它们输出高低电平或者通过它们读入引脚的状态:高电平或低电平。用户可以通过树莓派的GPIO口和硬件进行数据交互、控制硬件工作、读取硬件的工作状态信号等,GPIO引脚如图1所示。

图1 树莓派的GPIO示意图

各种传感器和执行器在树莓派GPIO上的连接设计尽可能布局合理,减少线材交叉,达到方便编写程序又美观的目的。具体说明如下表1所示。

表1 传感器和执行器在树莓派的引脚分配

排气扇的工作电压为12V,故不能直接连接到GPIO上,控制排气扇还需要通过继电器实现电路转换。

五、编程设计

(一)编程环境

Node-Red可视化编程在智能控制系统的应用,只需要拖拽节点,设置相应的参数,连接节点,即可搭建一个具备数据显示、处理与控制界面的控制系统,可用于通信与控制、物联网、互联网+等行业。Node-Red既可以下载安装在电脑中,也可以在安装了Raspbian操作系统的树莓派中直接使用,更多的安装使用方法可以参考官方网址https://nodered.org/docs/getting-started/,也可以使用在线版Node-Red,如:在浏览器中输入网址https://goiot.cc/,注册登录后即可开始Node-Red的编程之旅。

因为本智能教室系统以树莓派为控制中心,所以更方便的编程方式是在树莓派中开启Node-Red服务,然后在同一局域网中电脑端的浏览器中访问http://<树莓派IP>:1880/即可进行Node-Red程序编写,以及访问http://<树莓派IP>:1880/UI即可运行用户交互界面。

图3 智能教室运行的界面

(二)显示和交互界面

仪表盘节点(Dashboard)主要用于创建实时图形化交互界面,与其它节点安装类似,在菜单中的“节点管理”中“安装”选项卡中输入“dashboard”,找到名为“node-red-dashboard”并点击安装即可。

仪表盘的布局由Tab和Group两个属性组成。Tab相当于分页,Group是分组,每个Tab中可以包含多个Group。智能教室系统设置一个Tab,命名为:智能教室;设置三个Group,分别命名为:灯光控制、湿度控制、温度控制。每个Group包括dashboard的若干个节点:

灯光控制:text节点,用于显示当前灯光的状态(亮或灭);button节点两个,分别对应开灯和关灯的按钮。

温度控制:text节点,用于显示当前设置阈值;slider节点,用于调节温度的临界值,即当教室的温度高于设定的阈值时,触发蜂鸣器鸣叫和人声报警(人声报警使用文字转语音节点实现);guage节点,用于显示教室的实时温度。

湿度控制:与温度控制类似,当环境湿度高于设置的阈值时,自动开启排气扇进行抽湿。

智能教室系统的显示和交互界面,如图2、图3所示。

图2 显示和交互设计

(三)灯光控制程序

开灯和关灯使用节点button,控制树莓派引脚使用节点rpi-gpio out。在开灯节点button发送有效载荷设置为数字1(高电平),关灯节点button发送有效载荷设置为数字0(低电平)。然后分别从两个节点button右边的小方块拉出连接线,并连接到节点rpi-gpio out左边的小方块,如图4所示。

图4 实现开灯关灯

灯光LED的正极与引脚40-GPIO21相连,因此可以初始化该引脚为低电平(0),使灯光处于灭的状态。当用户点击“开灯”时,数据流向右边发送,使引脚40-GPIO21处于高电平状态,从而点亮教室的灯光;当用户点击“关灯”时,数据流向右边发送,使引脚40-GPIO21处于低电平状态,从而熄灭教室的灯光。

为便于用户在终端知道当前灯光的状态,最直观的方式是在界面中显示“亮”或“灭”,然而用户点击开灯或关灯时,发送的是数字1或0,那如何才能显示相对应的“亮”或“灭”呢?Node-Red的节点function(函数),允许用户编写javascript代码,从而实现转换发送的数据。

变量msg.payload是从上一流程中接收到的有效载荷,最终函数返回对象msg,实现其转换后的有效载荷往下一流程发送。完成后的灯光控制程序,如图5所示。

图5 灯光控制的程序

(四)获取并显示温湿度程序

获取连接到树莓派引脚温湿度传感器DHT11的数据,需要安装节点rpi-dht22(支持dht11和dht22)。值得注意的是:智能教室的温湿度数据并不是获取一次就终止了,而是按一定的时间间隔(如5秒)重复地获取实时数据并在终端上更新。

节点inject能以有规律的时间间隔向下一节点发送消息,该消息中的有效载荷可以是字符串、Javascript对象或者当前时间等。把节点inject发送的内容设置成当前时间,并每隔5秒执行一次,正符合我们的设计要求。

节点rpi-dht11获取到的温度数据包含在msg.payload中,而获取到的湿度数据则包含在msg.humidity。为了在仪表上能分别显示温度和湿度,可以使用节点function编写Javascript代码进行有效载荷的转换,温湿度显示的程序如图6所示。

图6 温湿度获取并显示的程序

图7 温度与报警联动程序

(五)温湿度与报警的联动程序

在智能教室系统中,当温度高于设定的阈值时,将会触发报警,蜂鸣器鸣叫,同时把警示文字转换成语音在终端中播放;当湿度高于设定的阈值时,将会触发继电器接通排气扇进行抽湿。

以温度高于阈值报警为例,用户设置的阈值保存为函数节点中的全局变量,代码为:flow.set(‘yuzhi_wendu’,msg.payload)。在下一节点的函数中则获取上一节点的全局变量后存放于新的变量yuzhi_wendu中,如果获取失败,则赋值26,代码为:varyuzhi_wendu=flow.get(‘yuzhi_wendu’)||26。实时温度与用户设置的阈值相比较,使用else-if条件分支语句进行判断,程序如图7所示。

湿度高于用户设置的阈值时将会触发排气扇抽湿的程序,与温度高于阈值时将会触发报警程序的原理一致,只需要在上述程序基础上修改少量代码即可实现。

六、结语

用于实践教学设计的中职物联网应用系统开发,因使用Node-Red和树莓派而变得简单和有趣,又因以智能教室为例,是学生所熟悉的情境,能够较好地促进教学目标的达成。基于Node-Red和树莓派学习开发智能教室系统,能帮助学生掌握物联网应用系统开发的基本方法,同时,通过替换、增加传感器和融入更多的Node-Red节点,使学生能够开发功能更加完备的应用系统,从而更好地进行创新创业活动。

猜你喜欢
树莓温湿度编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于AT89C51的数字型蚕用温湿度计的设计
纺织机上诞生的编程
基于DSP的多路温湿度监测系统
基于树莓派的骑行智能头盔设计
基于温湿度控制的天气预测装置
基于树莓派的远程家居控制系统的设计
蒸发冷却温湿度独立控制空调系统的应用