Raspberry Pi和Arduino的家庭自动化指南

我们之前已经讨论过Arduino和Raspberry Pi的相对优点–它们各有千秋。但是,它们不一定是一个选择,而是将它们组合在一起,以充分利用两者的优势。家庭自动化是此的理想选择。家庭自动化市场上充斥着昂贵的用户系统,它们彼此不兼容且安装成本很高。如果您有Raspberry Pi和Arduino,只要愿意花时间和精力,就可以以一小部分的价格实现相同的事情。

更新:自从撰写本文以来,我发现了OpenHAB,这是一个在Raspberry Pi上运行的免费开源家庭自动化平台,可以与大量现成的智能家居套件以及Arduino集成。观看下面的视频,了解更多信息,然后转到Raspberry Pi上的《 OpenHAB入门指南》以了解更多信息。

Heimcontrol.js是一个可在Raspberry Pi上运行的Node.js应用。与Arduino和一些现成的远程控制插座结合使用,可以轻松控制AC设备。您可以添加温度传感器,甚至可以控制电视,但今天我们将保持基本状态,并在以后的教程中扩展该项目。

以下是该项目的细目:

  • Arduino,
  • 为此,您需要具备以下功能:

  • Arduino和Raspberry Pi
  • 一些远程控制的插座和控制器(我使用了它们)
  • 有源USB集线器
  • 在开始之前,这是项目创建者本人的演示视频。

    重新开始

    我们将在该项目中使用Raspian,如果您以前曾进行过其他黑客活动,我强烈建议从全新安装开始。下载最新的Raspian映像,将其复制到SD卡,并确保扩展文件系统并启用SSH。本指南的其余部分将假定您已完成此操作,并且正在使用默认用户通过SSH连接。

    如果您以前未进行过此操作,则此视频介绍了在其中准备SD卡的过程OS X:

    这是Windows用户的操作系统:

    准备工作

    安装过程非常繁琐,并且从此处的说明中得出。不幸的是,它们已经过时或不是为Raspian设计的,因此我在下面进行了很大的调整。以下代码大部分都可以粘贴在块中,而无需一一粘贴。由于我们在Pi本身上进行了一些编译,因此请注意,整个过程将花费很长时间。我会说自己去喝杯茶-但是当我说“很长时间"时,我的意思是一天中最好的时间-所以178杯会更合适。

    所有命令都应该键入进入终端,您可能需要在某些时候按Enter键。这些前几个命令将更新系统并安装必备组件:

    sudo apt-get update sudo apt-get upgradesudo apt-get install git-core git scons build-essential scons libpcre++-dev xulrunner-dev libboost-dev libboost-program-options-dev libboost-thread-dev libboost-filesystem-dev

    下一步,我们需要安装Node:

    sudo mkdir /opt/nodewget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gztar xvzf node-v0.10.2-linux-arm-pi.tar.gzsudo cp -r node-v0.10.2-linux-arm-pi/* /opt/nodesudo ln -s /opt/node/bin/node /usr/local/bin/nodesudo ln -s /opt/node/bin/npm /usr/local/bin/npm

    将PATH变量添加到您的配置文件中,以便操作系统知道在哪里节点位于。使用nano文本编辑器,如下所示:

    sudo nano /etc/profile

    找到显示 export PATH 的行,并将其替换为:

    NODE_JS_HOME="/opt/node"PATH="$PATH:$NODE_JS_HOME/bin"export PATH

    按Ctrl-X退出,和Y保存。

    您可能需要注销然后再次登录才能使路径更改生效,但是可以使用以下命令进行测试:

    which node

    获取指向Node二进制文件的任何输出,出了点问题。

    Mongo

    下一个工作是安装Mongo。 Mongo是基于文档的No-SQL数据库,越来越多的Web应用程序使用它。不幸的是,这将永远需要安装,因为我们必须对其进行编译。运行以下命令时,您会遇到很多错误,例如:

    {standard input}:13085: Warning: swp{b} use is deprecated for this architecture

    不用担心这些。因此,运行以下命令以安装Mongo:

    git clone git://github.com/RickP/mongopi.gitcd mongopisconssudo scons --prefix=/opt/mongo install scons -c

    完成后,我们首先需要进行一些设置以解决权限问题并确保其在启动时运行。

    sudo useradd mongodbsudo mkdir /data/dbbsudo chown $USER /data/dbcd /etc/init.dsudo wget -O mongodb https://gist.github.com/ni-c/fd4df404bda6e87fb718/raw/36d45897cd943fbd6d071c096eb4b71b37d0fcbb/mongodb.shsudo chmod +x mongodbsudo update-rc.d mongodb defaultsmongod

    最后命令将启动Mongo服务器,您需要打开一个新的终端才能继续执行其他命令。我对这一步骤并不完全有把握,因此,如果有人可以在有关如何使mongod在启动时自动启动的注释中更正此错误,将不胜感激。

    sudo shutdown -r now

    最后,是时候安装Heimcontrol.js Node应用程序了。

    cd ~pigit clone git://github.com/ni-c/heimcontrol.js.gitcd heimcontrol.jsnpm install

    您可以通过键入以下内容开始运行该应用程序

    node heimcontrol.js

    这时,您应该能够从Pi上使用 http:// localhost:8080 访问控制界面,或者如果要访问localhost,则将其替换为IP地址从另一台计算机(并且您还可以设置端口转发以从世界上任何地方访问它),所以我鼓励您在连接Arduino之前先四处看看并检查所有数据库是否正常工作。

    最终我想要一个硬接线继电器,但是现在我将使用无线电控制开关的更安全选项。

    我使用了一些相当便宜的产品来自Maplin的20英镑套装,带有3个插座,并打开了遥控器,因此我可以直接与内部的433 MHz芯片接口。我在这里找到了相关说明。

    您也可以购买单独的433 MHz发射机,准备在eBay上或从业余电子供应商处使用。您需要做的就是将VCC连接到Arduino上的5 V,GND和一个控制引脚–记住您使用了哪个。 (Willi Thiel的示意图)

    该插件通过发送“三态代码"来工作,但这些代码因制造商而异。请参考RCSwitch文档以找到您的确切代码。该Wiki指南也可能会有所帮助。

    与Arduino的通信是通过称为duino的Node库完成的。如果Heimcontrol应用程序正在运行,请停止它,并使用以下命令安装Arduino桥。

    npm install duino

    Arduino必须上传此代码-建议您复制并粘贴以从另一台计算机安装此代码。本质上,它是一个侦听器程序,可响应Pi的串行命令,但没有阻止您使用自己的功能对其进行扩展的方法。

    启动网络应用程序后,转到设置 strong>菜单> Arduino

    从那里您可以添加一个新项目,选择RCSwitch方法,发送器的引脚和三态地址代码。记住要保存,然后回到主屏幕屏幕查找新按钮。

    错误:

    在对代码进行了许多小时的调试之后,我发现单位数的引脚号不是不能正常工作–确保将发射器放在 10 引脚上。

    我还发现Arduino插件的接收器所需的三态代码的最终状态不正确,而硬编码的最终位不正确。首先进行一些解释:三态代码由3个字节的信息组成。第一个确定我们的网络号(1-4),第二个确定我们的收发器地址(同样为1-4,最多产生16个可寻址套接字)。最后一个字节包含两位填充位,外加2位用于开/关。不幸的是,最后一个字节被硬编码到Arduino插件中–在我的情况下,开/关代码不正确。

    我不得不手动编辑 plugins / arduino / index.js 使用正确的代码。如果您使用的遥控器插槽与我相同,则将第80行向前更改为:

    // Send RC codeif (item.value) {  return that.pins[item.pin].triState(item.code + "FFFF");//change from FF0F} else {  return that.pins[item.pin].triState(item.code + "FFF0");//change from FF00}

    以下是所有工作示例视频:

    我将保留它至此,但是还支持传感器读数和红外遥控器。稍后我可能会通过一些其他增强功能来复习这些内容。如果这一切对您来说都太复杂了,也许看看这些对初学者友好的Arduino项目。

    标签: Arduino Raspberry Pi