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

几个月后,我决定返回到 此项目 与我打算创建的 免费的家庭自动化系统, 和 经适房; 此微机为基础的低消费, 但 跨平台 便携式 到任何设备与操作系统 GNU/Linux 可从 端口 GPIO.前面的帖子 我们学会了如何控制模块 继电器 optoacoplados覆盆子 PI 通过 bash, PHP, 和 Python; 在这个场合 我已经优化自动化系统, 顺便说一句我已经迁移到 覆盆子 PI 3 处置 无线连接, 但是,如果你希望你可以使用任何以前的模型.

硬件 它是由两个模块的八个继电器 每个, 这使总数的 十六出局 控制 电器, 电动千斤顶, 照明; 并没有结束 设备 将它转换成这小 覆盆子 PI 3, 在你需要的一切 domotic 的房子 u 办公室 常规.

Esquema edificio domotica

断路开关图 domotic DIY.

控制面板被编程中 PHP, 和是一种优化的代码 以前的版本 但用于进行管理 GPIO 直接通过 bash 大大加快这一进程; 一定要来, 因为我们将为此服务通过页 Wifi 上网.

FremooticsPI

自动化系统 web 控制面板.

事实 没有附加文件 管理端口输出 GPIO覆盆子 通过 Python; 将转换这个简单 web 页, 单个文件, 在真正的起始点的已成为某一天在 全套家居自动化系统 我将开发 在一起.

<html>
<head>
<title>Panel de control - Sistema domotico libre</title>
</head>

<body>
<div align="center">
<br></br>

 <!--GPIO4/IN1-->
 <form action="" method="post">
 Interruptor 01 &nbsp;<input type="submit" name="encender4" value="Encender">
 <input type="submit" name="apagar4" value="Apagar">

 <!--GPIO17/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 02 &nbsp;<input type="submit" name="encender17" value="Encender">
 <input type="submit" name="apagar17" value="Apagar">

<br></br>

 <!--GPIO27/IN3-->
 <form action="" method="post">
 Interruptor 03 &nbsp;<input type="submit" name="encender27" value="Encender">
 <input type="submit" name="apagar27" value="Apagar">

 <!--GPIO22/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 04 &nbsp;<input type="submit" name="encender22" value="Encender">
 <input type="submit" name="apagar22" value="Apagar">

<br></br>

 <!--GPIO18/IN5-->
 <form action="" method="post">
 Interruptor 05 &nbsp;<input type="submit" name="encender18" value="Encender">
 <input type="submit" name="apagar18" value="Apagar">

 <!--GPIO23/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 06 &nbsp;<input type="submit" name="encender23" value="Encender">
 <input type="submit" name="apagar23" value="Apagar">

<br></br>

 <!--GPIO24/IN7-->
 <form action="" method="post">
 Interruptor 07 &nbsp;<input type="submit" name="encender24" value="Encender">
 <input type="submit" name="apagar24" value="Apagar">

 <!--GPIO25/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 08 &nbsp;<input type="submit" name="encender25" value="Encender">
 <input type="submit" name="apagar25" value="Apagar">

<br></br>

 <!--GPIO5/IN1-->
 <form action="" method="post">
 Interruptor 09 &nbsp;<input type="submit" name="encender5" value="Encender">
 <input type="submit" name="apagar5" value="Apagar">

 <!--GPIO6/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 10 &nbsp;<input type="submit" name="encender6" value="Encender">
 <input type="submit" name="apagar6" value="Apagar">

<br></br>

 <!--GPIO13/IN3-->
 <form action="" method="post">
 Interruptor 11&nbsp;<input type="submit" name="encender13" value="Encender">
 <input type="submit" name="apagar13" value="Apagar">

 <!--GPIO12/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 12 &nbsp;<input type="submit" name="encender12" value="Encender">
 <input type="submit" name="apagar12" value="Apagar">

<br></br>

 <!--GPIO19/IN5-->
 <form action="" method="post">
 Interruptor 13 &nbsp;<input type="submit" name="encender19" value="Encender">
 <input type="submit" name="apagar19" value="Apagar">

 <!--GPIO16/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 14 &nbsp;<input type="submit" name="encender16" value="Encender">
 <input type="submit" name="apagar16" value="Apagar">

<br></br>

 <!--GPIO20/IN7-->
 <form action="" method="post">
 Interruptor 15 &nbsp;<input type="submit" name="encender20" value="Encender">
 <input type="submit" name="apagar20" value="Apagar">

 <!--GPIO21/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 16 &nbsp;<input type="submit" name="encender21" value="Encender">
 <input type="submit" name="apagar21" value="Apagar">

</div>
</body>
</html>

<?php

// Funciones PHP del pin GPIO 4

 if ($_POST[encender4]) {
 $a- exec("echo 4 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio4/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

 if ($_POST[apagar4]) {
 $a- exec("echo 0 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 17

 if ($_POST[encender17]) {
 $a- exec("echo 17 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio17/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio17/value");
 echo $a;
 }

 if ($_POST[apagar17]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio17/value");
 $a- exec("echo 17 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 27

 if ($_POST[encender27]) {
 $a- exec("echo 27 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio27/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio27/value");
 echo $a;
 }

 if ($_POST[apagar27]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio27/value");
 $a- exec("echo 27 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 22

 if ($_POST[encender22]) {
 $a- exec("echo 22 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio22/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio22/value");
 echo $a;
 }

 if ($_POST[apagar22]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio22/value");
 $a- exec("echo 22 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 18

 if ($_POST[encender18]) {
 $a- exec("echo 18 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio18/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio18/value");
 echo $a;
 }

 if ($_POST[apagar18]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio18/value");
 $a- exec("echo 18 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 23

 if ($_POST[encender23]) {
 $a- exec("echo 23 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio23/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio23/value");
 echo $a;
 }

 if ($_POST[apagar23]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio23/value");
 $a- exec("echo 23 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 24

 if ($_POST[encender24]) {
 $a- exec("echo 24 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio24/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio24/value");
 echo $a;
 }

 if ($_POST[apagar24]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio24/value");
 $a- exec("echo 24 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 25

 if ($_POST[encender25]) {
 $a- exec("echo 25 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio25/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio25/value");
 echo $a;
 }

 if ($_POST[apagar25]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio25/value");
 $a- exec("echo 25 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 5

 if ($_POST[encender5]) {
 $a- exec("echo 5 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio5/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio5/value");
 echo $a;
 }

 if ($_POST[apagar5]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio5/value");
 $a- exec("echo 5 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 6

 if ($_POST[encender6]) {
 $a- exec("echo 6 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio6/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio6/value");
 echo $a;
 }

 if ($_POST[apagar6]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio6/value");
 $a- exec("echo 6 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 13

 if ($_POST[encender13]) {
 $a- exec("echo 13 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio13/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio13/value");
 echo $a;
 }

 if ($_POST[apagar13]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio13/value");
 $a- exec("echo 13 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 12

 if ($_POST[encender12]) {
 $a- exec("echo 12 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio12/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio12/value");
 echo $a;
 }

 if ($_POST[apagar12]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio12/value");
 $a- exec("echo 12 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 19

 if ($_POST[encender19]) {
 $a- exec("echo 19 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio19/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio19/value");
 echo $a;
 }

 if ($_POST[apagar19]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio19/value");
 $a- exec("echo 19 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 16

 if ($_POST[encender16]) {
 $a- exec("echo 16 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio16/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio16/value");
 echo $a;
 }

 if ($_POST[apagar16]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio16/value");
 $a- exec("echo 16 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 20

 if ($_POST[encender20]) {
 $a- exec("echo 20 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio20/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio20/value");
 echo $a;
 }

 if ($_POST[apagar20]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio20/value");
 $a- exec("echo 20 > /sys/class/gpio/unexport");
 echo $a;
 }

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

// Funciones PHP del pin GPIO 21

 if ($_POST[encender21]) {
 $a- exec("echo 21 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio21/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio21/value");
 echo $a;
 }

 if ($_POST[apagar21]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio21/value");
 $a- exec("echo 21 > /sys/class/gpio/unexport");
 echo $a;
 }

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

?>

若要执行 覆盆子和继电器之间的连接, 你必须 以下各表去山脚下这封信 基于架构 GPIO BCM; 因为否则你就不得不修改文件中的行 PHP, 在中和替换 代码 数目 PIN 雇员.

覆盆子 PI 模型 B + / 2/3 继电器模块 1
+ 5V + 5V
GPIO 4
在 1
GPIO 17
在 2
GPIO 27 在 3
GPIO 22
在 4
GPIO 18 在 15
GPIO 23
IN1 6
GPIO 24
IN1 7
GPIO 25
IN1 8
吉安达 吉安达
覆盆子 PI 模型 B + / 2/3 继电器模块 2
+ 5V + 5V
GPIO 5
在 1
GPIO 6
在 2
GPIO 13
在 3
GPIO 12
在 4
GPIO 19
IN1 5
GPIO 16
IN1 6
GPIO 20
IN1 7
GPIO 21
IN1 8
吉安达 吉安达

一旦连接了所有 针脚覆盆子 对各自 VCC, 吉安达, e 投入 的的 继电器; 剩下的只是 将 PHP 文件复制 覆盆子 PI, 什么用 SCP 这将使我们能够这样做 远程.

usuario@maquina:~ $ scp index.php pi@192.168.1.*:/home/pi/
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo mv /home/pi/index.php /var/www/html/

远程 我们将该文件移到 web 服务器的目录, y asignaremos como propietarios mediante SSH用户和组 www 数据; 会将其添加到 组 gpio, 然后 我们重新启动以应用所做的更改.

usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo chown www-data:www-data /var/www/html/index.php
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo usermod -a -G gpio www-data
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo reboot

最后 我们用 230V 继电器喂 正如我们看到的 以前的文章 制作 入口处和其他阳性两极之间的桥梁,, 若要使用单个 插头, 或切换 小型断路器; 但是,如果我们想要连接 十六个设备 高消费是 建议使用两个, 或更多插头.

relespuenteados

积极的两极之间的中继模块桥方案.

其余的电线, 对应于 负极 及至 需要的 地球, 我们会将它们连接 直接到设备 想要通过控制 继电器模块, 在我的例子 插头 domotic DIY; también debemos tener en cuenta que por seguridad nuestro relé debería disponer de 1A por salida, por lo que para 16 salidas necesitaremos un relé de 16自.

Relé esquema enchufe

图插头 domotic DIY.

在以下 视频 你可以看到这性能 十六个输出系统 通过检查他们, 通过演示 用低能量灯; 如果你喜欢不要忘记 按照我上 YouTube 为了不错过任何的 未发布的视频 我要发布.

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

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

7 思考"覆盆子 PI – 实施可负担得起的家庭自动化系统 [第三部分]

  1. Peatonet una duda, he copiado el codigo tal cual y funciona todo correctamente, a excepción que van los botones al revés, encender apaga y viceversa.

    Muchas gracias por todo un blog genial.

    • Hola XuFLeS, 谢谢你的评论.

      Seguramente tenga que ver con las conexiones del relé a la red eléctrica; convendría que revises si lo has conectado en normalmente abierto (NO) en lugar de normalmente cerrado (NC).

      一会见.

      • Estoy probando antes de conectar los contactos a 230 V y el led rojo del relé se enciende cuando pulso en apagar. He modificado algo el codigo para invertirlo y quede bien, pero me había surgido la duda la verdad. Gracias x tu respuesta.

  2. Buen aporte. Estoy necesitando algo similar para un control de riego pero con una condición: si una de las n salidas están en 1 entonces GPIOx estará en 1. Osea GPIO=0 si solo si todas las salidas = 0. 任何想法?? Donde n salidas son electrovalvulas y GPIOx la bomba. Desde ya muchas gracias.

    • Hola Edu,

      Dependiendo del numero final de salidas, usarás una o varias raspberry PI; con una sería sencillo, con varias deberías valorar cual es la forma mas óptima de consultar la información entre dispositivos.

      谢谢你的评论.

  3. 你好, estoy interesado en esto ya que me gustaria controlar unas luces exteriores desde el movil.
    Seria la primera vez que intentase algo con la raspberry.
    Pero me surge una duda al llamarse este postparte tres”.
    Con solo ese codigo PHP ya no haria falta usar nada de la parte uno y dos?
    Entiendo que ese codigo seria index.php, donde iria colocado?
    多谢!

    • 你好 Paul,

      Únicamente con este código PHP puedes implementar la versión más ‘actual’ 系统.

      En los anteriores tutoriales y los comentarios de los mismos explico donde va el archivo (index.php), como darle los permisos adecuados, 等…

      Gracias por el comentario.

留言