具有Arduino,MySensors和OpenHAB的DIY智能家居传感器

智能家居传感器的成本非常可观。仅用于运动检测器或湿度传感器的$ 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串行驱动程序。

所需的组件

对于网关,您需要:

  • Arduino Uno
  • 以太网屏蔽(基于W5100)
  • NRF24L01模块–我在整个版本中都使用了 + PA + LNA 版本,射程可达1公里。接线方式与您选择的相同。
  • 对于每个传感器节点:

  • Arduino Uno
  • NRF24L01模块
  • 传感器(开始,我建议您使用温度和湿度的DHT11或DHT22模块)
  • 附加/可选:

  • 10uF电容器,每个RF模块一个(链接为一包)数量为50!)
  • 具有5v和3.3v输出的电源(YwRobot MB102可以很好地工作,每个价格为1美元)–如果使用克隆的Arduino,则需要您还需要9-12v直流电源。
  • 原型屏蔽或短短的公母跳线。
  • 使用NRF24L01模块

    让我们从NRF24L01模块开始,因为它们是项目中最复杂的部分。我选择了价格更高,范围更广的版本:技术上称为 NRF24L01 + PA + LNA 。它们带有一个板载信号放大电路和天线连接,但是如果您有一个普通的,有规则墙的房屋,而不是像米那么厚的实心石墙,我建议您先尝试使用价格更便宜的非天线版本的模块。我做。声称的这些范围大约为一公里,对于我放入花园棚子里来说足够了。

    但是,这些东西真的很难使用;如果您不先阅读这些提示而直接插入所有内容,将会感到失望。

  • 该模块需要VCC引脚的3.3v输入电源– 不是5v 。如果输入5v,则将其油炸。
  • 在VCC / GND端子两端焊接一个10uF电容器。电容器上的实心灰线表示负极/ GND端。
  • 使用短而高质量的跳线;或者更好的方法是,将它们直接焊接到原型屏蔽层上,以使电缆长度最小并保持牢固连接。
  • 如果您使用的是Arduino克隆,则电压调节器无法为它们提供足够的电压3.3v引脚-您需要使用外部电源板(上面已链接),每块价格约1美元。这些提供了稳定的3.3v。如果您使用的是原始 Arduino品牌的Uno,这似乎不是问题。
  • 我强烈建议您首先进行一些基本测试,只是为了确定您的收音机是工作。如MySensors页面上所示,连接两个无线电。它们的图显示Arduino Micro板无关紧要-使用相同的引脚号。请注意,该图从顶部示出了NRF24L01;您实际上是从下面插入的东西。进行相应的调整。忽略灰色的IRQ引脚,当前未使用。总结:

  • 外部电源上的VCC达到3.3v
  • GND到达公共接地轨
  • CE到引脚9
  • MOSI到引脚11
  • MISO到引脚12
  • SCK到引脚13
  • 需要两个完全连接的节点进行测试。下载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文件,还包括每种可能的传感器所需的兼容库。为避免冲突,我建议仅备份您当前的整个库文件夹,然后将其全部替换为下载包中的文件夹。

    网关的接线稍有不同;一旦有了以太网屏蔽,就可以将以下模块用于无线电模块:

  • CE到引脚5
  • CSN到引脚6
  • SCK到引脚A0
  • MOSI引脚A1
  • MISO引脚A2
  • 您还需要在中启用 #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。如果您需要提醒:

  • VCC在外部电源上为3.3v(或者在Arduino本身(如果它是原始版本而不是克隆版本)上)
  • CE到引脚9
  • CSN / CS到引脚10
  • MOSI到引脚11
  • MISO将引脚12
  • SCK固定到引脚13
  • 下一步,连接您选择的传感器;我使用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的评论或非常活跃的用户论坛中提问。 您是否将自己的廉价传感器节点组合在一起?您的智能家居将如何发展?

    标签: Arduino 智能传感器