Raspberry PI – Genomförande av en prisvärd hemautomation [Del III]

Efter flera månader, har jag beslutat att återvända till Detta projekt med som jag avser att skapa en gratis hem automationssystem, och ekonomiskt överkomliga; Här låg mikrodator-baserade förbrukning, Men korsa-plattform och bärbar till en enhet med OS GNU/Linux tillgänglig från Port GPIO.I tidigare inlägg Vi lärde oss att styra moduler av reläer optoacoplados med Hallon PI genom bash, PHP, och Python; vid detta tillfälle Jag har optimerat automationssystemet, och förresten jag har flyttat den till Raspberry PI 3 att avyttra trådlös anslutning, Men om du vill kan du använda någon tidigare modell.

Den hårdvara Det består av två moduler av åtta reläer varje, som gör upp totalt Sexton outs att styra vitvaror, Jacks elektriska, belysning; och en utan slut enheter att det ska konverteras till denna lilla Raspberry PI 3, allt behöver du för att Domotic hus u office konventionella.

Schemat fastighetsautomation

Kretsbrytaren switch diagram domotic DIY.

Kontrollpanelen är programmerad i PHP, och är en optimering av koden för den tidigare versionen men avsett att hantera den GPIO direkt genom bash som kraftigt påskyndar processen; ett måste, Eftersom vi kommer att servera detta via sidan WiFi.

FremooticsPI

Automation system web på Kontrollpanelen.

Faktumet att utan ytterligare filer att hantera port utgångarna GPIO för Hallon genom Python; Konverterar denna enkla webbsida, en enda fil, i den sanna utgångspunkten för som har blivit en dag i en full hem automationssystem att jag kommer att utveckla tillsammans.

<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

?>

Att utföra anslutningarna mellan hallon och relä, Du måste gå till foten av bokstaven tabellerna nedan baserat på schemat GPIO BCM; eftersom annars har du ändra raderna i filen PHP, och ersätta i den koden antalet PIN-KOD anställda.

Raspberry PI modell B + / 2/3 Relä modul 1
+ 5V + 5V
GPIO 4
I 1
GPIO 17
I 2
GPIO 27 I 3
GPIO 22
I 4
GPIO 18 I 15
GPIO 23
IN1 6
GPIO 24
IN1 7
GPIO 25
IN1 8
GND GND
Raspberry PI modell B + / 2/3 Relä modul 2
+ 5V + 5V
GPIO 5
I 1
GPIO 6
I 2
GPIO 13
I 3
GPIO 12
I 4
GPIO 19
IN1 5
GPIO 16
IN1 6
GPIO 20
IN1 7
GPIO 21
IN1 8
GND GND

Samband med att alla de Pins för Hallon till respektive VCC, GND, e ingångar av den Relay; återstår bara Kopiera filen PHP till den Hallon PI, till vilken nytta SCP som ger oss möjlighet att göra det. distans.

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/

Även distans Vi kommer att flytta filen till katalogen på webbservern, och vi kommer att tilldela som av ägare SSH till den användare och grupp www-data; kommer att lägga till den i den Grupp gpio, och sedan Vi starta om för att tillämpa ändringarna.

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

Till sist Vi matar med 230V relay som vi såg i den tidigare artiklar att göra en överbrygga mellan entrén och andra positiva polerna, att använda en enda Plug, eller växla Dvärgbrytare; Men om vi vill ansluta Sexton enheter hög konsumtion är Vi rekommenderar för att använda två, eller mer pluggar.

relespuenteados

Ordning med bron mellan positiva polerna av modulen relay.

De återstående ledningarna, som motsvarar den negativa Polen och till den tar av Jorden, Vi kommer att ansluta dem. direkt till enheten vill styra genom den Relä modul, i mitt fall en Plug domotic DIY; Vi bör också komma ihåg att av säkerhet bör vår relä förfoga över 1A av utgång, av vad för 16 utgångar behöver ett relä av 16TILL.

Relay diagram plug

Diagram plug domotic DIY.

I följande video Du kan se resultatet av detta Sexton utgångar system genom att jämföra dem, genom en demonstration med en lågenergilampa; Om du gillar Glöm inte Följ mig på YouTube att inte missa någon av de opublicerade videor Jag kommer att publicera.

Om du som du kan följa mig på Twitter, Facebook, Google +, LinkedIn, Feedly, eller dela den med knapparna under denna publikation, Om du har några frågor eller förslag tveka inte att kommentera.

Hjälp oss att nå fler läsare Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

15 tankar om"Raspberry PI – Genomförande av en prisvärd hemautomation [Del III]

  1. Peatonet tvekan, Jag har kopierat koden som är och allt fungerar korrekt, ett undantag som van de knapparna på baksidan, slå på shut down och vice versa.

    Stort tack för alla en blogg som är bra.

    • Hej XuFLeS, Tack för din kommentar.

      Förmodligen har att göra med reläet till elnätet anslutningarna; Det skulle vara bra att kontrollera om du har anslutit det i normalt öppen (INTE) i stället för stängd normalt (NC).

      Vi ses snart.

      • Jag testar innan du ansluter kontakterna till 230 V och den röda led av relä slås på när stänger av puls. Jag har ändrat något koden för att vända på det och ser bra ut, men tvivlar sanningen hade framkommit mig. Tack för ditt svar.

  2. Bra bidrag. Jag är i behov av något som liknar en kontroll av bevattning men med ett villkor: Om en av n utgångar är 1 då blir GPIOx i 1. Bone GPIO = 0 om endast om alla utgångarna = 0. Någon aning?? Där utgångar är magnetventiler och GPIOx pump. Från redan tack.

    • Hej Edu,

      Beroende på antalet utgångar slutliga, använda en eller flera raspberry PI; med en skulle vara enkelt, med flera bör rating som är vägen mest optimala information mellan enheter.

      Tack för att kommentera.

  3. Hej, Jag är intresserad av detta eftersom jag vill styra utomhus lampor från telefonen.
    Det skulle vara första gången du försökte något med hallon.
    Men I uppstår tvekan att samtalet är detta inlägg “del tre”.
    PHP-kod med bara det som saknas inte skulle använda något från delar ett och två?
    Jag förstår att koden skulle vara index.php, där placeras iria?
    Tack så mycket!

    • Hola Pablo,

      Endast med denna kod PHP kan implementera versionen mer ' nuvarande’ Systemet.

      I tidigare handledning och recensioner av dem förklara där är fil (index.php), som att ge rätt behörigheter, etc…

      Tack för kommentaren.

      • Tack så mycket för ditt snabba svar.
        Redan har jag anslutit allt med en enda platta av åtta reläer.
        Men en sällsynt sak händer mig som inte kan hitta en lösning.
        Ge det till knapparna på webben, GPIO är aktiverat mig perfekt, att ge dess motsvarande spänning och hålla den tills att stänga av, men å andra sidan reläet gör dess “Klicka på” av operation men inte bytte. Ljudet är som om reläet är activase och avaktiveras, Det är så snabbt att mätaren inte upptäcker någon förändring.
        Som kan bero på?
        Tack.

        Salu2!

        • Jag hittade felet.
          I PHP-koden, i inaktivera kommandot, ta bort $a kod- exec(“ECHO 18 > /sys/klass/gpio/unexport”); , som du har det på första växeln och nu fungerar det jag.
          Vad gör nu, första gången som slår på hallon; är ljuset åtta lysdioderna till medelintensiv, Du måste slå på och stänga en gång och sedan du slå på led väl och nu fungerar korrekt.

          Salu2!

          • Ledsen att vara så tung med så många kommentarer, men detta är det första projektet som jag gör med min raspery och det är fantastiska och mycket mycket enkel! Är denna handledning.
            Och världen som öppnar med denna utrustning är inmeso!
            På webben, utan att lämna PHP, man kunde se att växeln är aktiv?
            Växlarna, kunde nå hanteras med tidsplan och timing?
            Sanningens,Jag har öppnat upp en ny värld, mycket underhållande och ekonomiskt.

            Salu2 och tack!

          • Hej Pablo GC.

            Jag tror att i en kommentar jag förklarade som kontrollera att växeln är aktiv läsning genom PHP delstaten GPIO.

            För att styra tid programmässigt är enklaste att använda systemet CRON daemon för att köra vad du vill, gånger på som Marquis le.

            Många tack för kommentar.

          • redan ganska markis projekt, att läsa gpio är nog att använda
            exec ( “GPIO Läs 29”, $status21 );
            Om ($status21[0] == 0) {
            }
            och sätta de parentes som du vill visa om den är påslagen eller == status till 1 för off.

            Numreringen av de gpio Läs matchar inte gpio port numreringen, Om du vill du sätta här tabellen som gjorde jämförelsetabeller av varje port med dess numrering av läsa.

            Det enda som jag fortfarande inte förstår, eftersom 1 Den är avstängd och 0 Det är på.
            och varför på hallon, Alla utgångar är statslösa, lämnar till medelhög spänning och utgångar inte arbete tills du förvandla dem två gånger.

            Skapa en platsåterställning, vad den gör är att ge beställning alla utgångar, en “sömn” och en annan gång igen för att ge order av Stäng av dem alla, Efter denna process är redan alla funktionella.

            Det kan vara att de passerar dessa två saker?

            Salu2!

          • Hola Pablo, Ledsen för förseningen men jag är nyligen väldigt lite tid mellan arbete och studier.

            För det första vill jag tacka dig att du har delat din framsteg med andra läsare av bloggen, När jag har ledig tid jag har väntande fortsätta detta avsnitt av tutorials på Home Automation enkelt och prisvärt, men är verkligen en stolthet för min uppfattning följer du sig framåt med projektet och det kommer slå var och en i ditt eget system anpassade.

            Anslutning på reläet genom att tilldela ett logiskt lågt värde (0), och slå dem med ett logiskt värde hög (1) möjligt som är behöver har anslutit reläet till krets 230V så normalt öppen istället för normalt stängd, som jag sa läsaren XuFLes den första kommentaren i denna artikel; Om du prova det och problemet kvarstår, Kommentera gärna och försök att tänka på någon annan möjlighet.

            För att slippa göra utgångarna återställs efter varje Raspbian tändning, Du kan skapa ett enkelt skript som exportera och ange de pins som du vill starta om, och starta den till exempel från rc.local.

          • Hej!
            Ingenting i denna eftermiddag i svar!
            Det är logiskt att ta dig tid och särskilt i dessa datum.
            Tändning och avstängning, Det fungerar tvärtom, Jag har reläer ansluten.

            Och vad av rc.local, att slippa gå till sidan Återställ, som du skulle.

            Salu2!

  4. Bra fotgängare, Jag har läst den 3 tutorials på hemautomation delar, men i dess programmering kommer mycket snabbt för min, ämnet verkar super intressant men jag tror att vi behöver en detalj till en komplett hemautomationssystem och är att få input från utsidan, ( knappar, ljussensorer, etc). Jag skulle vilja samarbeta och tror på den elektriska delen jag kan hjälpa och i gengäld jag be om hjälp att förstå hela programutbud. Min email är Tecnico.Antono.Raya@gmail.com

    En hälsning och Grattis för webben

Lämna svar