基于 Intel Edison 和 Node-Red 的物联网家居自动化与安防






4.91/5 (5投票s)
一套完整的基于Node-Red的家庭自动化、远程物联网家庭控制和安全系统
概述
智能家居可以说是物联网中最常听到的流行语之一。将家庭设备与云连接以发挥设备更优越的功能,是已从DIY爱好者手中走向严肃商业产品的一个领域。能够响应手势、语音、移动命令的设备,能够感知并做出决策的设备,以及与用户社交账户连接的设备,正变得越来越受欢迎。
智能家居通常指设备连接到云端的家庭。它被视为一个使用智能手机、PC来控制、监控、指示或与家中电器互动的系统。它能减轻人的工作负担。
在这个项目中,我们将向您展示如何使用Intel Edison开发板、Node-Red(物联网的可视化编程语言)和Android手机快速构建一个智能家居原型。我们将集成智能家居系统的三个重要方面:安全、监控和控制。
该项目的基本构想是构建一个家庭原型,用户可以通过手机控制家庭的照明,而照明应响应环境光。该系统监控房间温度并产生火警。它集成了用户的Gmail和Twitter账户。因此,任何通知都会发布到这些账户,这些通知可以通过IFTTT等网关进一步分发到多个账户。
用户可以坐在任何地方监控家中的电子设备。该系统通过发送通知来确保用户安全。如果用户不在家,有入侵者闯入,声音传感器会识别出入侵者并通知特定用户。此外,如果家中无人但发生火灾,用户会收到通知。这些通知通过MQTT协议传输。该系统是使用Intel Edison开发的。系统接收来自手机的命令,分析来自光照、温度和声音传感器的数据,并根据传感器的阈值做出相应的开关决策,然后将通知发送给用户。系统通过WiFi连接到互联网。
IBM的Watson因其机器学习、模式识别等服务而日益普及。Node-Red是一种基于Node.js的可视化编程语言。您可以使用Node-red中现成的模块,在极短的时间内构建一个原型。此外,您还可以添加一些自己的Node.js脚本。由于Node-Red项目可以直接部署在IBM Bluemix上,并且可以从几乎任何设备进行编程,因此它正迅速成为快速物联网项目的热门选择。
在开始阅读本文之前,我们建议您先观看以下两个关于Intel Edison与Node-Red的YouTube视频教程:
第一章
1. 引言
物联网本质上是一个互联设备的云。简单来说,微控制器、微处理器等设备通过某种方式连接到互联网,使得每个设备都能与其他设备通信。我们将整个基础设施称为物联网。物联网是一组通过MQTT、WebSocket、HTTPS等特定协议连接到互联网的设备,使得这些设备不仅可以向服务器或云服务器发送信息,还可以相互通信。
例如,您的手机连接到互联网。手机可以与其他手机通信。手机可以发送数据到云端,也可以从云端接收数据。您会称手机为物联网设备吗?从技术上讲,不会,因为根据定义,物联网不仅是网络上设备的互连,还包括能够与物理世界通信的设备。因此,当我们深入讨论物联网时,物联网被定义为一个基础设施,其中能够与物理世界通信的设备可以相互通信。
物理世界的基本含义是任何物理设备,如灯、风扇和任何传感器。而手机不能直接控制灯或继电器,也不能直接感知农业数据或水务数据,我们通常不将手机归类为物联网设备。但是,根据定义,物联网是将物理世界连接设备在云中互连,而手机可以连接到云。手机,就像PC一样,构成了物联网机制的客户端,这意味着手机可以将数据输入到连接物联网设备的云中,并且可以从作为连接设备云的云中收集数据。例如,Raspberry Pi、Intel Edison等被认为是大多数常见的物联网设备。
这些设备或多或少运行着某个版本的Linux,它们可以连接到互联网,可以与Web服务交换消息,可以调用Web服务,可以响应Web服务,可以通过MQTT等常见的物联网协议连接,这些协议允许两个机器之间进行数据交互。它们可以接收来自手机的命令;它们也可以将一些数据发送回手机。这就是物联网基础设施。所以,如果您要想象一个物联网基础设施,那么许多像Intel Edison这样的物联网设备将与继电器、传感器连接,并相互通信,将数据发送回云端。这些数据可以通过云端的巨大处理能力进行处理。处理结果可以进一步集成到机器学习或数据可视化框架中,然后可以通过手机或PC提供给用户。
每当我们谈论物联网时,物联网提供了这种基础设施,因此设备现在可以连接到云服务,交换数据,将数据放入数据收集服务,数据可以由机器学习服务分析,数据可以由可视化服务可视化。因为它利用了云,所以无论设备数量如何增加,您都不必担心底层的基础设施发生了什么。随着您不断增加设备,云会处理所有负载,并且还会确保所有设备的性能都达到极高的水平。
项目描述
智能家居系统是家居电器(如灯和风扇)的自动化。如果发生火灾且家中无人,则系统会通过发送消息通知用户。此外,如果家中有人入侵,也会通知用户。这样用户就可以采取适当的行动。
问题陈述
构建一个智能家居系统,我可以通过手机控制灯和风扇;实现一个在我不在家时通知我的系统,如果家中有人入侵,或者实现一个火灾报警系统,在我不在家时,它能通知我家中是否发生火灾。在这种情况下,我可以构建一个可以通过手机控制的控制器。我可以有一个火灾报警系统,但目前的系统无法将两者合并到单个互联网架构中。
许多设备可以与互联网通信。目前,我们可以通过互联网控制事物,但缺乏互联互通。
目标
主要目标是实现一个系统,该系统将自动控制家用电器,如灯和风扇。智能家居可以通过云端进行远程控制和监控。并且在用户不在家时提供安全保障。
研究范围
基本上,我们正在做一个物理世界系统,包括灯光,以及一个包含火灾和入侵者问题的安全系统。我们将通过手机界面控制它们。
所用方法总结
- 首先,将温度传感器、人体存在传感器、光控传感器等传感器连接到Intel Edison。该设备安装在Intel Arduino套件上。
- 设备会将所有传感器数据推送到云端。
- 该设备通过MQTT(消息队列遥测传输)协议连接到手机。
- 该设备将连接到驱动电器的继电器单元。
- 现在,通过手机界面,用户可以生成控制MCU设备的命令。根据控制信号,MCU设备将控制继电器单元。
- 通过手机界面实现灯/风扇等电器的自动化。如果有人在家,当用户不在时,MCU将生成通知并推送到云端。此通知可以通过Gmail/Twitter等公共渠道进行分发。
工具与技术
工具
- Node.js
- Intel Edison
- 传感器
Node.js
这是一个服务器端Web应用程序。其中,基本模块用JavaScript编写。它主要用于开发网络应用程序。它具有单线程和事件循环。请求可以无限处理。与其他服务器不同,它没有限制,可以服务大量请求。
Intel Edison
该设备是为了某些工业、医疗保健中心、业务流程等而开发的。这是一个基于Linux操作系统的Intel设备。它是一个用于物联网的小型模块化计算机。这是一个支持蓝牙和Wi-Fi的开源系统。该设备安装在Intel Arduino套件上,该套件又连接了各种传感器。该设备用于硬件和软件开发。
传感器
传感器是一个对象,它接收温度、气体、光照等输入,检测事件,然后生成相应的输出。它提供许多输出,但通常接收电信号。传感器如今几乎无处不在,例如在手机、计算器、机器人、医疗保健中心、汽车等。
技术
- Wi-Fi
- MqTT
- oAuth
- 社交和SMTP
IoT
物联网是多个设备通过互联网连接。物联网几乎被应用于各个领域,如医院、农业、家庭、商业等。在此,数据存储在云端。物联网是一项不断发展的技术,它允许将两个或多个设备连接到单个架构中。
在此,微控制器和微处理器与其他设备连接,以便它们可以相互通信。通过特定的协议,设备可以通过互联网相互通信。它还使用WebSocket、HTTP等协议。在物联网设备中,能够与物理设备通信的设备也可以相互通信。
Mqtt
它是Message Queuing Telemetry Transport Protocol(消息队列遥测传输协议)的缩写。它用于以命令的形式(如开/关、锁定/解锁等)向设备发送排队消息。它通过发布或订阅的方式用于消息传递。通过少量代码,它可以在网络内的远程位置与其他设备通信。当服务器建立连接时,连接就可以建立。当用户完成工作时,TCP/IP才会断开连接。
硬件和软件要求
硬件要求
- Intel Edison
- Intel Edison兼容Arduino板
- 传感器
- Android手机
- 9V外部电源或移动电源
- Intel处理器
软件要求
- 操作系统:Windows 7及以上版本
- 语言:JavaScript
- 物联网网关:ThingSpeak
- 物联网协议:MQTT, WebSocket
系统设计
智能家居系统的设计基于我们希望自动化的所有设备。智能家居包括灯、灯泡、风扇、冰箱、热水器的自动化,以及通过火灾通知、存在监测等实现的家庭安全。
一旦记录了用户的需求,设计系统就很容易了。基于此,可以计算出要使用的协议类型和所需的传感器。智能家居系统的基本要求是特定硬件和软件的组合。硬件和软件之间的接口和通信协议用于向用户发送通知。
系统视角
我们正在开发一个智能家居系统,在该系统中,我可以根据手机控制灯和风扇,我还想实现一个火灾报警系统,这样在我不在家时,它就能通知我家中是否发生火灾。在这种情况下,我可以构建一个可以通过手机控制的控制器。我可以有一个能够发出警报的火灾报警系统,但我无法将它们合并到现有系统的单个互联网架构中。
因此,我们提出了一种基于物联网的智能家居系统。我们首先将一盏灯和一个风扇连接到该设备。我们应该能够通过手机控制灯和风扇。所有这些都应该具有位置感知功能,这意味着当我们靠近家时,可以打开灯,当我们离开家时,灯可以关闭。
我们将建立一个安全系统,例如,我们将安装一个火灾报警系统,当家中发生火灾时,它将响应我们的手机。万一我们的手机号码处于静音模式,家中发生火灾时,我们不一定总能看到警报。通过物联网系统,我们将把相同的数据发送到我们的Gmail账户和Twitter账户,这样即使我们没有意识到家中发生火灾,我们的一些朋友或Twitter粉丝也会意识到家中发生了火灾,并可能采取适当的行动。
基本上,我们正在做一个包含火灾的安全系统,一个包含灯和灯泡控制的物理世界系统。如果家中有人入侵,一个安全系统。我们还将通过手机界面控制它们。我们还将通过位置感知来控制它们。
模块
-
LCD显示屏
该模块接收来自传感器的输入,并在屏幕上显示消息。
-
火灾通知器
它接收来自温度传感器的输入,并检查温度是否高于正常水平,如果高于正常水平,它会通过发送警报消息通知用户。
-
存在监测器
该模块检查家中是否有入侵者,它通过声音传感器检查麦克风的值。如果麦克风值高于正常水平,它就会生成警报消息给用户,并在LCD屏幕上显示。
-
灯/灯泡控制
该模块基于用户的命令。当用户给出ON命令时,灯会亮起;当给出OFF命令时,灯会熄灭。命令以消息的形式给出,使用MQTT协议。
-
传感器
传感器接收来自环境变化(如温度传感器、光传感器、声音传感器等)的输入。接收输入后,它将数据发送到LCD屏幕和Intel设备。
上下文图
级别:0
级别:1
级别:2
用例图
顺序图
协作图
活动图
实现
连接
安装Grove扩展板到Intel Edison,并使用外部适配器为开发板供电。
- 将温度传感器连接到A0
- 将光传感器连接到A1
- 将麦克风/声音传感器连接到A2
- 将LCD连接到I2C端口
- 将一个继电器连接到D3(用于控制灯泡)
- 将一个LED连接到D7(模拟家庭的锁定和解锁)
- 将一个蜂鸣器连接到D2
Node RED界面
您可以通过npm在Edison上安装Node-red。
npm install node-red
然后,只需从Edison shell进入node red目录并输入:
node red.js
这将启动一个Node-red服务器。您可以通过访问edison_ip:port_number
来访问编程环境。其中,port_number是在您启动Node-red服务器时屏幕上显示的端口号(默认为1880)。
显示了可视化基础界面。我们可以拖放模块。然后我们可以编写模块代码。第一个模块是传感器模块,我们使用了温度传感器、光传感器,并读取了麦克风值。传感器模块读取所有值并将其发送到其输出设备。
传感器处理模块
上图显示,与传感器模块连接的传感器处理模块也与MQTT模块连接。在Node.js中,一个节点通过数据包将消息发送到另一个节点。实际数据存储在名为payload
的字段中。
编码
此模块接收多个数据包、不同的主题和不同的有效载荷。它将主题提取到名为topic
的变量中。温度以temperature
主题发送,光以light
主题发送。有效载荷是实际值所在的位置。它将读数转换为string
。
var topic=msg.topic;
var payload=msg.payload;
var inHome=false;
// All the checking up
//console.log("Input="+msg.topic+"-"+msg.payload)
if(topic=='rupam/smarthome')
{
console.log(msg.topic+":"+msg.payload)
msg.topic="CONTROL";
if(payload=='ON')
{
msg.payload=1;
}
if(payload=='OFF')
{
msg.payload=2;
}
上面的代码指定了处理模块检查主题是否为rupam /smarthome
。这意味着数据来自MQTT。然后,消息是一个控制主题,因为我们实际上在控制风扇和灯。如果为开,则msg.payload= 1
;如果为关,则msg.payload=2
。
if(payload=='LOCK')
{
msg.payload=3;
inHome=false;
}
if(payload=='UNLOCK')
{
msg.payload=4;
inHome=true;
}
if(payload=='STOP')
{
msg.payload=6;
}
}
else
{
if(msg.topic=='Light')
{
// console.log(inHome);
var val=parseInt(msg.payload.trim());
val=(val*100/1023);
console.log("light Intensity="+val+" %");
msg.payload=""+val;
/*
if(val<300)
{
msg.payload='1';
console.log('Bulb on Based on Sensor');
}
else
{
msg.payload='2';
console.log('Bulb Off');
}
*/
上面的代码描绘了,如果topic= light
,那么我们将光照值计算为%
。最大光照强度值为1023
。它接收MQTT关于开(1)和关(2)的消息。
if(msg.topic=='Mic')
{
var val=parseInt(msg.payload.trim());
if(val>800)
{
msg.payload='5';
console.log('Person At Home');
}}
if(msg.topic=='Temperature')
{
var a=parseInt(msg.payload.trim());
var B=3975;
var temperature=1/(Math.log(resistance/10000.0)/B+1/298.15)
-273.15;//convert to temperature via datashee
temperature=Math.floor(temperature * 100) / 100;
//setTimeout(Loop,1000);
console.log("temparature="+temperature);
msg.payload=""+temperature;
}
// msg.topic="Sensors";
// msg.payload=topic+":"+payload;
return msg;
在这里,它解析光照强度值,如果是光照,如果是麦克风,则是麦克风值,如果家中有人在喊叫而我不在,如果值大于800,那么我们就得到一条消息“有人在家”。这里,我们还计算了温度值。这里的温度是模拟值,但我们想要摄氏度。所以使用公式,我们计算出了摄氏度温度。现在消息将被返回到其输出模块。
此图显示了硬件控制模块。它显示了灯泡和蜂鸣器连接到哪些引脚。
var mraa=require('mraa');
var bulbPin=new mraa.Gpio(3);
var lockPin=new mraa.Gpio(7);
var buzzPin=new mraa.Gpio(2);
lockPin.dir(mraa.DIR_OUT); bulbPin.dir(mraa.DIR_OUT);
buzzPin.dir(mraa.DIR_OUT);
var lockSensePin=new mraa.Aio(3);
node.on("input", function(msg)
{
在这里,提供了整个控制。它显示了灯泡连接到哪个引脚;蜂鸣器连接到哪个引脚,即引脚2。所有这些引脚都具有输出方向以控制它们。
if(msg.payload=='1')
{
var lv=parseInt(lockSensePin.read());
bulbPin.write(1);
console.log("Bulb on");
}
if(msg.payload=='2')
{
bulbPin.write(0);
console.log("Bulb Off");
}
if(msg.payload=='4')
{
lockPin.write(1);
console.log("Door Lock");
}
if(msg.payload=='3')
{
lockPin.write(0);
console.log("Door UnLock");
}
if(msg.payload=='5')
{
node.send({topic: "Tweet",
payload: "Intruder At Home[Sample Project]"+(new Date())})
buzzPin.write(1);
}
if(msg.payload=='6')
{
buzzPin.write(0);
}
if(msg.topic=="Temperature")
{
var val=Number(msg.payload);
}
每当麦克风值高时,即有人在家时,有效载荷设置为5。当有效载荷为5时,它应该发推特说“家中有人入侵”,并且蜂鸣器引脚将被激活。给出Stop命令来停止蜂鸣器。然后蜂鸣器引脚将被禁用。
MQTT模块
异步地,它会不断检查您是否正在释放任何数据。这就是我们如何打开和关闭灯。并且它与输出模块连接。MQTT模块持续读取数据。它接收有效载荷和不同的主题。
LCD模块
结果
用户登录后,可以在PuTTY中执行。上图显示温度值和光照强度值正在变化。当家中发生火灾时,温度会升高。
Intel Edison与Arduino板
上图描绘了Intel Edison安装在兼容Arduino的板上。有不同的传感器连接到板上。还有一个继电器也连接到板上。可以看到板上的绿色指示灯,这意味着设备已开启。
连接建立
执行后
此图描绘了灯已亮起,LED也已亮起。在LED上,我们可以看到“智能家居”。当从MQTT发出命令时,灯会亮起。通过Android手机发送ON消息,灯就亮了。
要执行代码,请使用本文提供的:
- 解压文件夹
- 上传到Intel Edison根目录
cd /home/root SmarHome
chmod 755 SmartHome.sh
./SmarHome.sh
shell脚本将自动在您的Intel Edison上部署代码并运行服务器。
(注意:如果LCD未连接,服务器将因I2C致命错误而崩溃。)
结论
智能家居系统一直是自动化和嵌入式电子领域的热门领域,在过去几十年里,我们使用了各种不同的技术来产生警报、安全和自动化家居设备。包括使用射频技术,如红外设备、RC设备等。
智能家居系统还包含许多其他组件,如安全和安防,过去曾提出过许多安全设备,如火灾报警器和自动灭火器。大多数现有的报警系统都基于GSM和GPRS技术,这些技术延迟高且成本高昂,因为短信和语音邮件不是免费的。在这项工作中,我们提出了一种新颖的架构,通过物联网架构提供家庭安全和自动化。
所提出的系统可以在用户不在家时,在家庭发生火灾或发生入侵者时提醒用户。该系统还允许用户完全通过手机操作家里的电器。整个控制和通知系统都基于物联网基础设施,MQTT以及Gmail和Twitter都是免费网站,并且可以运行在Wi-Fi数据上。这大大降低了成本,因为这里不使用SMS和GPRS。
结果表明,所提出的系统达到了目标,能够以最小的延迟响应火灾和入侵者,并能同时将警报分发到多个渠道。
这项工作可以通过整合其他家居自动化概念进一步改进,例如通过面部识别和其他先进的机器学习技术实现家庭安全。还可以通过整合其他家用电器(如空调、洗衣机等)的控制来改进框架。