Raspberry PI – Gennemføre en overkommelig hjem automatiseringssystem [Del III]

Efter flere måneder, har jeg besluttet at vende tilbage til Dette projekt med hvilket jeg agter at skabe en gratis hjem automatiseringssystem, og økonomisk overkommelige; Denne lave mikrocomputer-baserede forbrug, Men Cross-platform og bærbare til enhver enhed med OS GNU/Linux tilgængelig fra port GPIO.I Forrige indlæg Vi lærte at styre moduler af relæer optoacoplados med Hindbær PI af bash, PHP, og Python; ved denne lejlighed Jeg har optimeret automatiseringssystemet, og i øvrigt jeg har overført det til Raspberry PI 3 til at disponere over trådløs tilslutning, Men hvis du ønsker du kan bruge enhver tidligere model.

Den hardware Det består af to moduler af otte relæer hver, der udgør i alt Seksten outs til at styre apparater, Jacks elektrisk, belysning; og en uden ende af enheder at den kan konverteres til denne lille Raspberry PI 3, i alt hvad du behøver for domotic hus u office konventionelle.

Bygning automation ordning

Circuit breaker switch diagram domotic DIY.

Kontrolpanelet er programmeret i PHP, og er en optimering af koden for den tidligere version men beregnet til at håndtere den GPIO direkte gennem bash hvor høj grad fremskynder processen; et must, Da vi vil tjene dette via siden WiFi.

FremooticsPI

Automation system web Kontrolpanel.

Omstændighed uden yderligere filer at administrere port udgange GPIO af Hindbær af Python; Konverterer denne enkle webside, en enkelt fil, i det sande udgangspunkt af som er blevet en dag i en fuld hjem automatiseringssystem at jeg vil være at udvikle sammen.

<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

?>

Til at udføre forbindelser mellem hindbær og relæ, Du skal gå til foden af brevet følgende tabeller baseret på skemaet GPIO BCM; fordi ellers du bliver nødt til at ændre linjerne i filen PHP, og erstatte i den kode antallet af PIN medarbejdere.

Raspberry PI model 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 model 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

Når først sammenhængende alle de Pins af Hindbær til den respektive VCC, GND, e indgange af den Relæ; kun forbliver Kopier filen PHP til den Hindbær PI, til hvad brug SCP der vil tillade os at gøre det. fjernt.

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/

Også fjernt Vi vil flytte filen til mappen på webserveren, og vi vil tildele som ved ejere SSH til den bruger og gruppe www-data; vil føje den til den Gruppe gpio, og derefter Vi genstarte hen til andrage forandringer.

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

Endeligt Vi fodrer med 230V relæ som vi så i den tidligere artikler at gøre en bygge bro mellem indgangen og andre positive polakkerne, at bruge en enkelt Stik, eller skifte miniature circuit breaker; Men hvis vi ønsker at forbinde Seksten enheder højt forbrug er anbefalet for at bruge to, eller flere stik.

relespuenteados

Ordningen af broen mellem positive poler af relæ modul.

De resterende ledninger, som svarer til den negative pol og til den tager af Jorden, Vi vil forbinde dem direkte til enheden ønsker at kontrollere gennem den Relæ modul, i mit tilfælde en Stik domotic DIY; Vi bør også huske på, at for sikkerhed bør vores relæ har 1A exit, så for 16 udgange skal et relæ af 16TIL.

Relæ diagram plug

Diagram plug domotic DIY.

I følgende video Du kan se resultater af dette Seksten output system ved at kontrollere dem., gennem en demonstration med en lav energi lampe; Hvis du Glem ikke Følg mig på YouTube gå ikke glip af nogen af de ikke-offentliggjorte videoer Jeg har tænkt mig at udgive.

Hvis du som du kan følge mig på Twitter, Facebook, Google +, LinkedIn, Feedly, eller dele det med knapper under denne publikation, Hvis du har spørgsmål eller forslag så tøv ikke at kommentere.

Hjælp os med at nå flere læsere Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

15 tanker om"Raspberry PI – Gennemføre en overkommelig hjem automatiseringssystem [Del III]

  1. Peatonet et spørgsmål, Jeg har kopieret koden som er og alt fungerer korrekt, bortset fra at gå tilbage knapperne, Tænd lukket ned og vice versa.

    Tak for alle en brilliant blog.

    • Hej XuFLeS, Tak for din kommentar.

      Sandsynligvis har at gøre med relæ til lysnettet-forbindelser; Det ville være nyttigt at tjekke hvis du har tilsluttet det i normalt åben (Nej) i stedet for lukket normalt (NC).

      Vi ses snart.

      • Jeg tester før du tilslutter kontakter til 230 V og den røde led af relæet er aktiveret på Hvornår slukke puls. Jeg har ændret lidt kode til at vende det og se godt ud, men tvivler på sandheden var kommet mig. Tak for dit svar.

  2. Gode bidrag. Jeg har brug for noget lignende for kunstvanding kontrol, men på én betingelse: Hvis en af n udgange er i 1 så vil GPIOx være i 1. Knogle GPIO = 0, hvis kun hvis alle udgange = 0. Enhver idé?? Hvor udgange er hurtigtvirkende ventiler og GPIOx pumpe. Fra allerede tak.

    • Hej Edu,

      Afhængigt af antallet af output endelige, Brug en eller flere raspberry PI; man ville være enkel, med flere bør rating, som er den måde mest optimal information mellem enheder.

      Tak for kommentar.

  3. Hej, Jeg er interesseret i dette, fordi jeg gerne vil kontrollere udendørs lys fra telefonen.
    Det ville være første gang du prøvet noget med hindbær.
    Men opstår tvivl mig når du kalder dette indlæg “tredje del”.
    PHP kode med kun det som ikke mangler ville bruge noget fra del et og to?
    Jeg forstår, at denne kode vil være index.php, hvor placeres iria?
    Mange tak!

    • Hej Paul,

      Kun med denne kode PHP kan gennemføre versionen mest ' nuværende’ System.

      I de tidligere tutorials og anmeldelser af dem forklare hvor er fil (index.php), som at give de korrekte tilladelser, osv…

      Tak for kommentaren.

      • Mange tak for dit hurtige svar.
        Jeg har allerede tilsluttet med en enkelt plade af otte relæer.
        Men en sjælden ting sker for mig, der ikke kan finde en løsning.
        At give web-knapper, GPIO er aktiveret mig perfekt, giver sin tilsvarende spænding og holde det till at slukke den, men på den anden side relæet gør dens “Klik på” kører, men ikke skifte. Lyden er som om relæet er aktivase og er deaktiveret, Det er så hurtigt, at måleren ikke registrere nogen ændring.
        Der kunne være grund?
        Tak.

        Salu2!

        • Jeg fandt fejlen.
          I PHP-koden, i turn off kommando, fjerne $a kode- exec(“ECHO 18 > /sys/class/gpio/tilbagekalde”); , som du har det på den første switch og nu det virker jeg.
          Nu hvad gør, første gang du tænder hindbær; de otte lysdioder til medium intensitet lys, du er nødt til at tænde og lukke én gang og derefter du tænder på den led godt og nu virker korrekt.

          Salu2!

          • Ked af at være så tungt med så mange kommentarer, men dette er det første projekt, at jeg med min raspery og det er fantastisk og meget meget simpel! Er denne tutorial.
            Og den verden, der åbnes med dette udstyr er inmeso!
            På nettet, uden at forlade PHP, du kunne se, at knappen er aktiv?
            Skifter, kunne nå håndteret med tidsplan og timing?
            Virkelig,Jeg har åbnet en ny verden, meget underholdende og økonomisk.

            Salu2 og tak!

          • Hej Paul GC.

            Jeg tror, at i en kommentar jeg forklarede switchen er aktiv læsning gennem PHP tilstand af GPIO.

            For at styre tid programmatisk er enkleste ting at bruge system CRON dæmonen til at køre, hvad du vil, gange på hvilke Marquis le.

            Mange tak for at kommentere.

          • allerede helt fortelt projekt, at læse gpio tilstand er nok til at bruge
            exec ( “GPIO læse 29”, $status21 );
            Hvis ($status21[0] == 0) {
            }
            og sætte de parenteser, du vil vise, hvis den er tændt eller == status til 1 for lukning.

            Nummerering af gpio læse stemmer ikke overens med den gpio port nummerering, Hvis du vil sætte jeg her tabellen i ækvivalenser for hver havn med dens nummerering af Læs jeg gjorde.

            Det eneste, jeg ikke forstår stadig, er fordi 1 Det er slukket og 0 Det er på.
            og hvorfor på hindbær, alle udgange er statsløse, overlades til mellem- og udgange ikke arbejde indtil du tænder dem to gange.

            Opret et websted reset, hvad det gør, er at giver ordren til alle udgange, en “søvn” og igen at give ordre til at slukke dem alle, Efter denne proces er allerede alle funktionelle.

            Det kan være, at de passerer disse to ting?

            Salu2!

          • Hej Paul, Sorry for forsinkelsen men jeg er sidst meget lidt tid mellem arbejde og studier.

            For det første vil jeg takke dig, du har delt dine fremskridt med de andre læsere af bloggen, Når jeg har ledig tid jeg har ventende fortsætte denne del af tutorials på Home Automation nemt og billig, men er det virkelig en ære for mig at se som du følger dig fremad med projektet og vil gøre hver enkelt i din egen brugerdefinerede system.

            Forbindelse på relæ ved at tildele en logisk lav værdi (0), og slå dem med en logisk værdi, der er høje (1) Det er muligt, på grund af at du har tilsluttet relæet 230V som normalt åbne i stedet for normalt lukket kredsløb, som jeg fortalte læser XuFLes den første kommentar til denne artikel; Hvis du prøver det, og problemet fortsætter, Velkommen til at kommentere og forsøge at tænke på nogen anden mulighed.

            For at undgå at skulle gøre udgangene nulstilles efter hver Raspbian tænding, Du kan oprette et simpelt script, der eksporterer og sætte benene du ønsker at genstarte, og starte den for eksempel fra rc.local.

          • Hej!
            Intet i denne eftermiddag i svar!
            Det er logisk at tage dig tid og især i disse datoer.
            Tænding og lukning, Det virker anden vej rundt, Jeg har de relæer, forbundet.

            Og hvad med rc.local, undgå at gå til siden nulstille, som du ønsker.

            Salu2!

  4. God fodgænger, Jeg har læst den 3 tutorials på home automation dele, men i sin programmering går meget hurtigt for min, emnet synes super interessant, men jeg tror, at vi har brug for en detalje til et komplet home automatiseringssystem og er at modtage input udefra, ( knapper, lyssensorer, osv). Jeg ønsker at samarbejde og tænke på den elektriske del kan jeg hjælpe og til gengæld jeg bede om hjælp til at forstå hele programmeringen. Min email er tecnico.Antono.Raya@gmail.com

    En hilsen og tillykke på nettet

Skriv et svar