智能家居传感器的成本非常可观。仅用于运动检测器或湿度传感器的$ 60- $ 100,对整个房屋进行布线就成为那些可支配收入可笑的人的领域。让我们自己构建一个。
幸运的是,MySensors.org背后的优秀人才已经完成了艰苦的工作。今天,我将向您展示如何使用MySensors框架来创建廉价的智能家居传感器阵列,这些传感器可用于OpenHAB安装(请参阅我们的Raspberry Pi上的OpenHAB入门指南)。
尽管我将专门处理使用MQTT将Arduinos网络中的MySensors数据转发到OpenHAB安装中的问题,但我应该指出MySensors框架可以馈入许多不同的家庭自动化控制器中。我在此处介绍了适用于我的完整解决方案,但是请访问MySensors网站,因为您可能会发现它也适合您的类似目的,但使用的硬件或通讯协议略有不同。
我的设置的硬件成本每个节点不到10美元(网关要多一些),但是可以添加很少的附加传感器和执行器(DHT11湿度和温度)例如,传感器每个大约1美元;一个高压继电器大约3美元。
我们在做什么
基本思想是,与其添加到我们现有的拥挤的本地网络中使用不可靠的Wi-Fi或昂贵的以太网屏蔽,我们仅为Arduino创建了一个完全独立的支持网格的网络;然后使用单个网关节点将其桥接到本地网络,该网关节点同时具有以太网连接和与其他Arduino的无线电连接。因此,我们要制作几个传感器节点,它们收集数据;又是一个网关节点,它将数据中继到OpenHAB服务器上。
同样,这对我来说是有效的,因为我的Wi-Fi接收是如此可怕,我不想在不必要的情况下使数据混乱数据。如果您对Wi-Fi感到满意,请考虑使用与内置Wi-Fi板兼容的低成本ESP8266 Arduino-MySensors也支持这些板。
重要说明El Capitan用户和Arduino Clones:由于新的安全措施,Apple在最新版本的El Capitan中成功打破了用于与许多Arduino clone板通信的串行驱动程序。要查看您是否受到影响,请查看您的主板和距离USB端口最近的芯片。如果显示CH340,则说明您对此有所影响。请按照此处的说明禁用驱动程序kext签名,再次安装CH340串行驱动程序。
所需的组件
对于网关,您需要:
对于每个传感器节点:
附加/可选:
使用NRF24L01模块
让我们从NRF24L01模块开始,因为它们是项目中最复杂的部分。我选择了价格更高,范围更广的版本:技术上称为 NRF24L01 + PA + LNA 。它们带有一个板载信号放大电路和天线连接,但是如果您有一个普通的,有规则墙的房屋,而不是像米那么厚的实心石墙,我建议您先尝试使用价格更便宜的非天线版本的模块。我做。声称的这些范围大约为一公里,对于我放入花园棚子里来说足够了。
但是,这些东西真的很难使用;如果您不先阅读这些提示而直接插入所有内容,将会感到失望。
我强烈建议您首先进行一些基本测试,只是为了确定您的收音机是工作。如MySensors页面上所示,连接两个无线电。它们的图显示Arduino Micro板无关紧要-使用相同的引脚号。请注意,该图从顶部示出了NRF24L01;您实际上是从下面插入的东西。进行相应的调整。忽略灰色的IRQ引脚,当前未使用。总结:
需要两个完全连接的节点进行测试。下载RF24库并加载最简单的入门示例。打开两个模块的电源,但保持一个模块通过USB连接并打开串行控制台。键入“ T"并发送,将其切换到传输模式,这时您将收到调试消息,表明它已成功将消息ping到另一个节点。
构建MySensors MQTT客户端网关
好吧,现在我们知道RF24无线电已连接并正常工作,请继续下载MySensors Arduino软件包的开发分支。本教程使用1.5版编写,但以后的版本也可以。我们之所以使用Development分支,是因为在编写本文时,MQTT client 网关尚未包含在主软件包中。
尽管在MQTTGateway中提供了master分支,它也充当服务器,我们不希望这样做,因为我们已经在Raspberry Pi上运行了稳定的MQTT服务器。我们只想将MySensors数据转发到该数据上。再说一次,如果这不是您想要的-如果您根本不想使用MQTT-那么请看一下EthernetGateway或SerialGateway,它们都与OpenHAB兼容。
值得注意的是下载软件包不仅包括基本的MySensors文件,还包括每种可能的传感器所需的兼容库。为避免冲突,我建议仅备份您当前的整个库文件夹,然后将其全部替换为下载包中的文件夹。
网关的接线稍有不同;一旦有了以太网屏蔽,就可以将以下模块用于无线电模块:
您还需要在中启用 #define SOFTSPI 行库/mySensors/MyConfig.h 文件。为此,请删除//,以取消注释,它位于我的第309行附近。
我们需要这样做,因为无线电模块和网络屏蔽均使用SPI,并且它们不兼容;因此我们只需要将无线电模块的SPI移至其他引脚上,然后通过软件(因此, soft SPI)执行SPI通信即可。
加载 MySensors / GatewayW5100MQTTClient 素描。如果在MySensors菜单下没有看到此消息,则说明您未安装开发分支。使用上面提供的链接来重新下载整个库。
您需要为控制器定义一个静态IP地址,网络路由器和子网的IP以及您的IP地址。现有的MQTT服务器。如果愿意,也可以随意修改主题前缀。上传,然后将其插入网络。简要检查串行控制台是否有任何明显的错误,例如无法连接到MQTT服务器,否则将其放在一边(但将其保留)。
构建传感器节点
首先,通过将//放回开始,再次注释 MyConfig.h 文件中的 #define SOFTSPI 行。网关只需要它-我们将标准的NRF24L01布线用于传感器节点,该节点使用硬件SPI。如果您需要提醒:
下一步,连接您选择的传感器;我使用DHT11湿度和温度传感器进行测试,但是如果您向下滚动至MySensors页面侧栏上的传感器和执行器列表,则会发现很多其他选项:门,雨量计,光线,运动,甚至RFID –并加载更多。您可以看到我还向下面的节点添加了一个中继,但稍后会对此进行更多介绍。
最后,从MySensors菜单加载 HumiditySensor 示例并添加以下内容
#define MY_NODE_ID 2
由于我们使用的是控制器的特殊版本,该控制器仅将事物转发到我们自己的MQTT服务器上,因此它不具有可自动分配节点ID的标准控制器功能到每个新节点。相反,我们只是每次都要手动定义它。记下该数字以备您自己记录,并为每个节点更改它。
也启用调试输出:
#define MY_DEBUG
最后,检查DHT11传感器的数据引脚是否正确。
#define HUMIDITY_SENSOR_DIGITAL_PIN 7
然后,上传!
值得打开串行控制台来看看。要查看的关键位是 st = ,它是消息的状态。 st =失败表示未发送邮件。您可能尚未定义唯一的节点ID,或者网关处于脱机状态。我只是通过拔掉网关来伪造了这些故障:
如果一切正常,您应该开始看到一些数据读数进入MQTT服务器。将它们放入OpenHAB超出了本教程的范围,但在OpenHAB指南的第2部分中进行了介绍,因此您可以在此处进行参考。
组合传感器代码
传感器节点的启动和运行相对简单,当您要向每个节点添加多个传感器时,它会变得有些棘手。本质上,您将要混合来自两个不同示例的代码片段。向您展示这一点的最简单方法是通过视频作为示例!在这里,我将基本的湿度传感器与继电器结合在一起。
您可以在此处找到湿度传感器和继电器的完整代码,正如我在视频中提到的那样,该代码已被修改为无阻塞循环。要了解有关激活中继所需的MQTT命令结构的更多信息,请检查串行API-但足以说明以下通道控制了我给出的代码(消息主体为0或1)中的第一个中继:
mysensors-in/9/1/1/0/2
您现在唯一的限制是Arduino上的内存量,我会说这–我的智能家居中最可靠的传感器不是价格为80美元的商业Z-Wave模块,而是MySensors定制
今天结束,但是如果您有问题,可以在MySensors的评论或非常活跃的用户论坛中提问。 您是否将自己的廉价传感器节点组合在一起?您的智能家居将如何发展?