覆盆子 PI-实施负担得起的家庭自动化系统 [第二部分]

在前一篇有关 负担得起的家庭自动化基于树莓派, 我们学会了检查房子水管连接从面板的八个继电器连接到我们 覆盆子 PI.

屏幕截图 2015-02-01 20:20:47今天我们将看到如何控制共十六个电器 感谢我们执行上面的电路, 使板给了我 Jordi@electronics.cat 和你你已经可以看到的摘要 硬件自由日; 由相同设计, 和百分百 免费的硬件.

对于此练习,我要去使用 PI 的三个分支, 这就是负责适应所有的引脚 GPIO覆盆子 PI3.3V5V 双向和将允许我们对 第二为 PiCam I2C 总线保留工作; 我也会用我用的板继电器 optoacoplados 在上一篇文章中关于家庭自动化.

Pi3Ramas

在由 @JordiBinefa 设计的三个范围中的 IP.

所有这些都使得在我们的处置 总共有十六个套接字 domotic 两个之间划分 覆盆子, 和与 可扩展性的达 128 情况下 PI 的 3 分支机构, 因为它能让我们利用两辆巴士 I2C 牺牲使用连接到 PiCam 的连接器的可能性.

连接 pi 的三个分支, 我们必须焊接对应第二总线引脚的六 I2C 这并不是工厂的士兵, 那一刻 Jordi 它正在积极推动其板新版本为覆盆子 PI B + 和树莓派模型 2.

奥林巴斯数码相机我们可以帮助焊针持有两个条状的三 跳线, 但 我们必须确保他们更加吻合我们尽可能在所有的时间 在焊锡他们之前.

我们现在可以连接 PI 的三个分支覆盆子 我以前编辑过 隔离两个板块, 为什么 Jordi 这种塑料使用分隔符.

Pi 为三个分支和塑性指数分频器连接器 P3.

set05_08_v02_P2P3P4

由 @JordiBinefa P3 连接器的方案.

开展与的连接 中继转接板, 我们必须弯板继电器的针脚 我想要连接到 pi 的三个分支, 帮助我们用一些钳子; 在下一张图片,你可以看到最后的结果.

取决于针脚的位置 VCC吉安达 在我们的接力, 我们将会把这 跳线 一个模块中的继电器, 或另一个位置,投资这些资金; 始终铭记介意, 必须由 USB 供电继电器板.

IN1 IN2 第 3 IN4 VCC GND

IN1 IN2 第 3 IN4 GND VCC

现在我们将连接我们 继电器的八个输出继电器的适配器板, 是在 PI 的三个分支; 应当指出, 本模块是兼容与四个和八个输出继电器.

然后我们可以看到的表之间的连接 继电器模块, 的 PI 的三个分支, 和 覆盆子 PI.

模块继电器 optoacoplados 连接器 P3 覆盆子 PI 模型 B
VCC + 5V + 5V
在 7 位 0 GPIO 29
在 6 位 1 GPIO 28
在 5 位 2 GPIO 18
在 4 位 3 GPIO 7
在 3 位 4 GPIO 8
在 2 位 5 GPIO 10
在 1 位 6 GPIO 9
在 0 位 7 GPIO 11
吉安达 吉安达 吉安达

现在开始连接 继电器 optoacoplados 板 直接向 GPIO 其他 覆盆子, 在下面的图片你可以看到最终结果.

之间的连接 GPIO 我们 覆盆子 他们将同样 前一篇文章, 然而在这种情况下我添加了所有连接表.

模块继电器 optoacoplados 覆盆子 PI 模型 B
VCC + 5V
在 1 GPIO 3
在 2 GPIO 2
在 3 GPIO 24
在 4 GPIO 25
在 5 GPIO 23
在 6 GPIO 27
在 7 GPIO 22
在 8 GPIO 4
吉安达 吉安达

要运行 在 python 中的脚本 我们将在下面看到的网站, 首先,我们要向用户授予权限 www 数据 它是分配给 web 服务器的用户; 为什么 首先,我们将安装 apache web 服务器,正如我们已看到在以前的文章 我们会写 sudo visudo 在终端中和在文件的末尾 我们会将作为 sudoer 添加到 www 数据, 如下图所示的最终结果.

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL

为每个十六个 GPIO 引脚 在本练习中的员工, 我们需要创建一个子目录, 和 在 Python 中的两个脚本; 一个人若要打开, 和其他打开中继, 这里有一个例子与 PIN 11.

#!usr/bin/env/ python
#enciende.py
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11, GPIO.IN)
#!usr/bin/env/ python
#apaga.py
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(11, GPIO.OUT)

在每个 覆盆子 PI 我们将会把你 十六个脚本 若要打开连接继电器或到 针脚 在每个员工, 你可以参考前面的表中; 的 脚本 对应于 覆盆子 直接从连接 GPIO 中继板会将它们放在目录中 /首页/pi/继电器/gpio.

若要创建目录和子目录的层次结构, 与复制中的程序性的文件 Python 我们将使用这些其他两个 脚本 Bash; 第一次会执行在 PI 连接到 PI 的三个分支.

#!/bin/bash
#Raspberry PI con la pi de 3 ramales.

#Creamos la jerarquía de directorios.
mkdir /home/pi/reles/gpio
mkdir /home/pi/reles/gpio/11
mkdir /home/pi/reles/gpio/9
mkdir /home/pi/reles/gpio/10
mkdir /home/pi/reles/gpio/8
mkdir /home/pi/reles/gpio/7
mkdir /home/pi/reles/gpio/18
mkdir /home/pi/reles/gpio/28
mkdir /home/pi/reles/gpio/29
ls /home/pi/reles/gpio

#Y copiamos los scripts
cp enciende.py apaga.py /home/pi/reles/gpio/11
cp enciende.py apaga.py /home/pi/reles/gpio/9
cp enciende.py apaga.py /home/pi/reles/gpio/10
cp enciende.py apaga.py /home/pi/reles/gpio/8
cp enciende.py apaga.py /home/pi/reles/gpio/7
cp enciende.py apaga.py /home/pi/reles/gpio/18
cp enciende.py apaga.py /home/pi/reles/gpio/28
cp enciende.py apaga.py /home/pi/reles/gpio/29
ls /home/pi/reles/gpio/*

其他 十六个脚本 对应的控制 覆盆子 连接到 PI 的三个分支 我们将保持它们在目录中 /var/www/继电器/gpio /.

#!/bin/bash
#Raspberry pi con relé compatible con GPIO.

#Creamos la jerarquía de directorios.
mkdir /var/www/rele/gpio
mkdir /var/www/rele/gpio/4
mkdir /var/www/rele/gpio/22
mkdir /var/www/rele/gpio/27
mkdir /var/www/rele/gpio/23
mkdir /var/www/rele/gpio/25
mkdir /var/www/rele/gpio/24
mkdir /var/www/rele/gpio/2
mkdir /var/www/rele/gpio/3
ls /var/www/rele/gpio

#Y copiamos los scripts.
cp enciende.py apaga.py /var/www/rele/gpio/4
cp enciende.py apaga.py /var/www/rele/gpio/22
cp enciende.py apaga.py /var/www/rele/gpio/27
cp enciende.py apaga.py /var/www/rele/gpio/23
cp enciende.py apaga.py /var/www/rele/gpio/25
cp enciende.py apaga.py /var/www/rele/gpio/24
cp enciende.py apaga.py /var/www/rele/gpio/2
cp enciende.py apaga.py /var/www/rele/gpio/3
ls /var/www/rele/gpio/*

在这个时候,我们必须创建 密钥对 所以, 覆盆子 PI 它是页后,可以运行 脚本 连接到 PI 的三个分支 远程, 正如用户将做它 www 数据必须指定一个密码 为了登录并代表您创建密钥对.

#Asignamos un password al usuario www-data
usuario@maquina:~$ passwd www-data

Introduzca la nueva contraseña de UNIX: 
Vuelva a escribir la nueva contraseña de UNIX: 
passwd: contraseña actualizada correctamente

#Creamos el par de claves RSA de 4096 bits
www-data@maquina:~$ ssh-keygen -b 4096 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/www/.ssh/id_rsa.
Your public key has been saved in /var/www/.ssh/id_rsa.pub.
The key fingerprint is:
5a:dc:bd:af:0d:ae:9d:9f:bb:c2:d4:5b:dd:67:8d:18 tmo@tmo-K55A
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
|                 |
|                 |
|       . . .E    |
|        S . .+ .+|
|       o    o.o B|
|      .    oo  +.|
|           oo=.. |
|          ..=+Bo |
+-----------------+

#Copiamos la clave pública a la otra raspberry
www-data@maquina:~$ ssh-copy-id pi@192.168.*.***                 
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'pi@192.168.*.***'"
and check to make sure that only the key(s) you wanted were added.

一旦创建 公共和私有密钥对, 我们会检查我们可以 通过访问 SSH 而无需输入密码; 为 由同一网站的不同覆盆子继电器 同一本地网络上, 在这种情况下 我已经连接他们由于小免费路由器 WRTNode.

WRTNode_ETH然后我们将创建我们将包含的主页 按钮输入的类型 你将不得不按执行 脚本Python 从 web 界面使用 post 方法; 对于本例中我将显示只有四个开始与 web,这篇文章不是太长.

<html>
 <head>
                 <!--/var/www/rele/index.php-->
 </head>
 <body>

 <!--GPIO11--> 
 <form action="" method="post">
 Enchufe 0 [GPIO 11 - P3 Bit 7 - IN1]&nbsp;<input type="submit" name="encender11" value="Encender">
 <input type="submit" name="apagar11" value="Apagar">
 </form>
 &nbsp;&nbsp;

 <!--GPIO04--> 
 <form action="" method="post">
 Electrodomestico 0 [GPIO 04 - P4 Bit 7 - IN1]&nbsp;<input type="submit" name="encender4" value="Encender">
 <input type="submit" name="apagar4" value="Apagar">
 </form>
 <br></br>

 <!--GPIO09--> 
 <form action="" method="post">
 Enchufe 1 [GPIO 09 - P3 Bit 6 - IN2]&nbsp;<input type="submit" name="encender9" value="Encender">
 <input type="submit" name="apagar9" value="Apagar">
 </form>
 &nbsp;&nbsp;

 <!--GPIO22--> 
 <form action="" method="post">
 Electrodomestico 1 [GPIO 22 - P4 Bit 6 - IN2]&nbsp;<input type="submit" name="encender22" value="Encender">
 <input type="submit" name="apagar22" value="Apagar">
 </form>
 </body>
</html>

<?php

// Funciones PHP del pin GPIO 11
 if ($_POST[encender11]) { 
 $a- exec("sudo python /var/www/rele/gpio/11/enciende.py");
 echo $a;
 }

 if ($_POST[apagar11]) { 
 $a- exec("sudo python /var/www/rele/gpio/11/apaga.py");
 echo $a;
 }
// Fin de las funciónes del pin GPIO 11

// Funciones PHP del pin GPIO 9
 if ($_POST[encender9]) { 
 $a- exec("sudo python /var/www/rele/gpio/9/enciende.py");
 echo $a;
 }

 if ($_POST[apagar9]) { 
 $a- exec("sudo python /var/www/rele/gpio/9/apaga.py");
 echo $a;
 }
// Fin de las funciónes del pin GPIO 9

// Funciones PHP del pin GPIO 04

  if ($_POST[encender4]) { 
   $a- exec("ssh root@192.168.*.*** python /home/pi/reles/gpio/4/enciende.py");
   echo $a;
  }

  if ($_POST[apagar4]) { 
   $a- exec("ssh root@192.168.*.*** python /home/pi/reles/gpio/4/apaga.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 04

// Funciones PHP del pin GPIO 22

  if ($_POST[encender22]) { 
   $a- exec("ssh root@192.168.*.*** python /home/pi/reles/gpio/22/enciende.py");
   echo $a;
  }

  if ($_POST[apagar22]) { 
   $a- exec("ssh root@192.168.*.*** python /home/pi/reles/gpio/22/apaga.py");
   echo $a;
  }

// Fin de las funciónes del pin GPIO 22
?>

如果我想要喂他一切从单一的插座, 必须 旁路所有负输出 220V 继电器.

与电源的连接 我们要让他们的最后一项与相同的方式, 括之间的插头和开关方案 小型断路器 便于跟踪的实践.

插头差动继电器

在下一篇文章中对 负担得起的家庭自动化 我们将学会利用两辆巴士 I2C 由于对 PI 的三个分支, 我们会 概念检查证明 128 可互换的电器指示灯.

如果你愿意,你可以跟着我 推特, Facebook, 谷歌 +, LinkedIn, 或它分享这份出版物下方的按钮, 如果您有任何疑问或建议,请不要犹豫,置评.

帮助我们达成更多的读者 Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

4 思考"覆盆子 PI-实施负担得起的家庭自动化系统 [第二部分]

  1. 很好的帖子, 继续!!
    一个问题, 我想要也容易覆盆子系统安装家庭自动化, 但不是如何例如知道光的现状,盲或一些设备, 如果它已被手动激活.
    我说这为例, 如果我想要打开一盏灯从手机而不是在那状态是在那个时候.

    Salu2

    • 你好,伊戈尔 ·, 谢谢你的评论.

      我突然想起,你可以使用某种类型的验证达到你想要控制的照明的张力传感器, 并通知它是您在实时的 web 服务器,要知道在任何时候,如果它是对或不.

留言