Малина PI – Прилагането на система за достъпни домашна автоматизация [Част III]

След няколко месеца са решили да се върнете към Този проект с която възнамерявам да се създаде Свободен домашно огнище автоматичен система, and икономически достъпни; Тази ниска консумация на микрокомпютър базирани, Но кръст-платформа and Преносим за всяко устройство с операционна система ГНУ/Линукс налични от порт GPIO.В предишни постове Ние научихме да контролират модули на релета optoacoplados с Малина PI от Баш, PHP, and питон; по този повод Аз имам оптимизирана система за автоматизация, и между другото аз съм да мигрират Малина PI 3 да се разпорежда с безжична връзка, Но ако желаете, можете да използвате предишния модел.

The хардуер Тя се състои от два модула от осем релета всеки, които съставляват общо Шестнадесет аут за контрол на уреди, Тали електрически, осветление; и без край на устройства че тя се превръща в този малък Малина PI 3, във всичко, което ви трябва за domotic къща u офис конвенционални.

Сграда автоматизация схема

Прекъсвач switch диаграма domotic DIY.

Контролният панел е програмиран в PHP, и е оптимизиране на кода на предишната версия но да се управляват GPIO директно чрез Баш която значително ускорява процеса; трябва да, Тъй като ние ще послужи това чрез страницата WiFi.

FremooticsPI

Автоматизация система уеб контролен панел.

Фактът, че без допълнителни файлове за управление на пристанището резултати GPIO на Малина от Питон; Преобразува този прост уеб страница, един файл, в истинска начална точка на която е станал някой ден в система за пълно домашна автоматизация че аз ще бъде разработването заедно.

<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, и да се замени в код номерата на ПИН служители.

Малина 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
GND GND
Малина 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
GND GND

След като всички свързани щифтове на Малина към съответните VCC, GND, 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/

Също така дистанционно Ние ще преместите файла в директорията на уеб сървъра, и ние ще определям както от собствениците 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; Ние също трябва да имат предвид че за безопасността на нашите реле трябва да имат 1а излизане, така че за 16 резултатите ще трябва реле на 16ЗА ДА.

Щепсел реле диаграма

Диаграма plug domotic DIY.

В следните видео Можете да видите изпълнението на това Шестнадесет изходи система от тях контрол, чрез демонстрация с ниска енергия лампа; Ако ви харесва, не забравяйте Следвайте ме на YouTube да не пропуснете някоя от непубликувани видео Аз отивам да публикувате.

Ако ви харесва можете да следвате ме на Twitter, Facebook, Google +, LinkedIn, Feedly, или я споделете с бутоните под тази публикация, Ако имате някакви въпроси или предложения, моля не се колебайте да коментират.

Помогнете ни да достигнат до повече читатели Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

14 мисли за"Малина PI – Прилагането на система за достъпни домашна автоматизация [Част III]

  1. Peatonet въпрос, Аз сте копирали кода както си е и всичко работи правилно, Освен това отидете назад бутони, включване на shut надолу и обратно.

    Благодаря ви за всички от брилянтна блог.

    • Здравейте XuFLeS, Gracias por ТУ comentario.

      Вероятно е да се направи с реле на захранващи връзки; Би било полезно да се провери дали сте свързани в нормално отворен (НЕ) вместо нормално затворен (NC).

      До скоро виждане.

      • Аз съм тестване преди да свържете контактите към 230 V и led червено на релето е включено при пулс на свой ред разстояние. Аз съм промяна малко код, за да промени това и изглежда добре, но истината се очертава ми се съмнявам. Благодаря ви х вашия отговор.

  2. Добър принос. Аз съм in нужда на нещо подобно на контрола на напояване, но с условие: Ако един от n изходи са в 1 тогава GPIOx ще бъде в 1. Костни GPIO = 0, ако само ако всички изходи = 0. Всяка идея?? Където n изходи са Електромагнитни вентили и GPIOx помпата. От вече ви благодаря.

  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?
    Благодаря много!

    • Здравей Павел,

      Ú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.

      • Muchas gracias por tu pronta respuesta.
        Ya he conectado todo con una sola placa de ocho relés.
        Pero me está pasando una cosa rara a la que no encuentro una solución.
        Dándole a los botones de la web, se me activan los GPIO perfectamente, dando su correspondiente voltaje y manteniéndolo asta que lo apago, pero en cambio el relé hace su “Щракнете върху” de funcionamiento pero no conmuta. El sonido es como si el relé se activase y se desactivase, es tan rápido que el polímetro no detecta ningún cambio.
        ¿A que podría ser debido?
        Благодаря.

        Salu2!

        • Ya encontré el fallo.
          En el código PHP, en el comando de apagar, le quite el código $a- Exec(“ехо 18 > /sys/клас/gpio/отмяна на експортирането”); , como lo tienes en el primer interruptor y ahora ya me funciona.
          Ahora lo que hace, la primera vez que enciendes la raspberry; se encienden los ocho leds a media intensidad, tienes que encender y apagalos una vez y después ya enciende el led bien y ya funciona correcto.

          Salu2!

          • Siento ser tan pesado con tantos comentarios pero este es el primer proyecto que hago con mi raspery y es una pasada y muy muy simple! Es una pasada este tutorial.
            Y el mundo que se abre con este equipo es inmeso!
            В web, sin salirse del php, se podria ver que interruptor esta activo?
            Los interuptores, podrian llegar a manejarse con programacion horaria y temporizacion?
            De verdad,me habeis abierto un mundo nuevo, muy entretenido y economico.

            Salu2 y gracias!

          • Hola Pablo GC.

            Creo que en algún comentario expliqué como ver que interruptor está activo leyendo mediante PHP el estado de los GPIO.

            Para el control mediante programación horaria lo más sencillo es usar el demonio del sistema CRON para que ejecute lo que desees, a las horas que le marques.

            Благодаря ви много за коментиране.

          • ya avancé bastante en el proyecto, para leer el estado de los gpio basta con usar
            Exec ( “gpio read 29”, $status21 );
            Ако ($status21[0] == 0) {
            }
            y meter entre los corchetes lo que quieres que se muestre si está encendido o estatus == a 1 para apagado.

            La numeración del gpio read no concuerda con la numeración del puerto gpio, si queréis os pongo aquí la tabla que hice de equivalencias de cada puerto con su numeración de read.

            Lo único que sigo sin entender, es porque 1 es apagado y 0 es encendido.
            y por que al encender la raspberry, todas las salidas salen sin estado, dejando las salidas a medio voltage y sin funcionar asta que las apagas dos veces.

            Cree una pagina reset, que lo que hace es darle la orden de apagar a todas las salidas, a “сън” y otra vez vuelve a dar la orden de apagarlas todas, después de este proceso ya quedan todas funcionales.

            Por que puede ser que pasen estas dos cosas?

            Salu2!

          • Здравей Павел, disculpa la demora pero últimamente ando muy escaso de tiempo entre el trabajo y los estudios.

            En primer lugar quiero agradecerte que hayas compartido tus avances con los demás lectores del blog, en cuanto tenga tiempo libre tengo pendiente continuar esta sección de tutoriales sobre domótica fácil y asequible, pero es realmente un orgullo para mi ver como seguís vosotros mismos adelante con el proyecto y lo vais convirtiendo cada uno en vuestro propio sistema personalizado.

            Respecto a encender los relés asignando un valor lógico bajo (0), y apagarlos con un valor lógico alto (1) es posible que se deba a que tengas conectado el relé al circuito de 230V como normalmente abierto en lugar de normalmente cerrado, como le comenté al lector XuFLes en el primer comentario de este artículo; si lo pruebas y el problema persiste, no dudes en comentar e intentaremos pensar en alguna otra posibilidad.

            Para no tener que hacer el reset de las salidas después de cada encendido de Raspbian, puedes crear un simple script que exporte y configure los pins que desees al iniciar el sistema, y lanzarlo por ejemplo desde rc.local.

          • Здравейте!
            No pasa nada en que tardes en contestar!
            Es lógico que te lleve tiempo y sobre todo en estas fechas.
            Lo de encendido y apagado, que funcione al revés, los relés los tengo bien conectados.

            Y lo del rc.local, para no tener que entrar a la pagina de reset, como lo haría.

            Salu2!

Вашият коментар