Bringebær PI – Implementering av et rimelig hjemme automasjonssystem [Del III]

Etter flere måneder, har jeg besluttet å gå tilbake til Dette prosjektet med som jeg har tenkt å opprette en Gratis hjem automatikksystem, og økonomisk overkommelig; Dette lavt microcomputer-baserte forbruk, men plattformer og bærbar til en enhet med OS GNU/Linux tilgjengelig fra port GPIO.I tidligere innlegg Vi lærte å kontrollere moduler releer optoacoplados med Bringebær PI ved bash, PHP, og Python; på denne anledning Jeg har optimalisert automatisering systemet, og forresten jeg har overført den til Bringebær PI 3 å avhende trådløs tilkobling, Men hvis du ønsker kan du bruke en tidligere modell.

Den maskinvare Det består av to moduler av åtte reléer hver, som utgjør totalt Seksten outs kontrollere apparater, Knekter elektrisk, belysning; og uten ende av enheter at det konverteres til denne lille Bringebær PI 3, alt du trenger for domotic hus u office konvensjonelle.

Skjemaet building automatisering

Strømbryter bryteren diagrammet domotic DIY.

Kontrollpanelet er programmert i PHP, og en optimalisering av koden for forrige versjon men skal behandle det GPIO direkte gjennom bash som stor grad akselererer prosessen; en må, Siden vi vil tjene dette via siden WiFi.

FremooticsPI

Den automasjon systemkontrollpanelet for web.

Faktum av uten ekstra filer administrere port-utganger GPIO av Bringebær ved Python; Konverterer denne enkle webside, en enkelt fil, i sanne utgangspunkt som har blitt en dag i en full hjem automatikksystem at jeg vil utvikle 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

?>

Utføre forbindelsene mellom bringebær og videresending, Du må gå til fots i brevet følgende tabeller basert på skjemaet GPIO BCM; fordi ellers må du endre linjene i filen PHP, og erstatte i den kode antall PIN ansatte.

Bringebær 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
1 6
GPIO 24
1 7
GPIO 25
1 8
GND GND
Bringebær 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
1 5
GPIO 16
1 6
GPIO 20
1 7
GPIO 21
1 8
GND GND

Når koblet til alle de pins av Bringebær til de respektive VCC, GND, e innganger av den Stafett; gjenstår Kopier filen PHP til den Bringebær PI, Hva bruk SCP som vil tillate oss å gjøre det. eksternt.

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å eksternt Vi vil flytte filen til mappen på webserveren, og tildele som eiere gjennom SSH til den bruker og gruppe www-data; vil legge den til i Gruppen gpio, og deretter Vi starte for å bruke endringene.

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

til slutt Vi mater med 230V-videresending som vi så i den tidligere artikler gjør en bro mellom inngangen og andre positive polakkene, bruke en enkelt Plugg, eller bytte miniatyr strømbryter; Men hvis vi ønsker å koble Seksten enheter høy forbruk er anbefalt for å bruke to, eller mer plugger.

relespuenteados

Ordningen av broen mellom positive polakkene av modulen relé.

Gjenværende ledninger, som tilsvarer den negative Polen og den tar av Jorden, Vi vil koble dem direkte til enheten vil kontrollere gjennom den Relé modul, i mitt tilfelle en Plugg domotic DIY; Vi bør også huske på at for sikkerhet bør vår stafett ha 1A avslutte, av hva for 16 utganger trenger et relé av 16TIL.

Relé diagrammet plug

Diagrammet plug domotic DIY.

I følgende video Du kan se resultatene av dette Seksten utganger system ved å sjekke dem, gjennom en demonstrasjon med lav energi lampe; Hvis du liker ikke glem Følg meg på YouTube Gå ikke glipp av noen av de upubliserte videoer Jeg skal publisere.

Hvis du liker du kan følge meg på Twitter, Facebook, Google +, LinkedIn, Feedly, eller dele det med knappene under denne publikasjonen, Hvis du har spørsmål eller forslag ikke nøl med å kommentere.

Hjelp oss å nå flere lesere Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

15 tanker om"Bringebær PI – Implementering av et rimelig hjemme automasjonssystem [Del III]

  1. Peatonet spørsmål, Jeg har kopiert koden som er og alt fungerer riktig, et unntak som van knappene til motsatt, slå på stengt ned og omvendt.

    Takk for alle en briljant blog.

    • Hei XuFLeS, Takk for din kommentar.

      Sannsynligvis har å gjøre med stafetten til strømnettet tilkoblingene; Det ville være nyttig å sjekk hvis du har koblet det normalt åpen (nei) i stedet for stengt normalt (NC).

      sees snart.

      • Jeg tester før du kobler kontaktene til 230 V og ledet rødt i relé er aktivert når puls igjen av. Jeg har endret litt koden for å reversere den og ser bra, men tviler sannheten hadde oppstått meg. Takk for ditt svar.

  2. Godt bidrag. Jeg trenger noe lignende for vanning kontroll, men på en betingelse: Hvis en av n utganger 1 da vil GPIOx være i 1. Ben GPIO = 0 hvis bare hvis alle utganger = 0. Alle begrep?? Hvor utganger er magnetventilene og GPIOx pumpe. Fra allerede takk.

    • Hei Edu,

      Hvor mange utganger siste, Bruk én eller flere bringebær PI; ville være enkel, med flere bør vurdering som er måten mest optimale av konsultere informasjonen mellom enheter.

      Takk for kommentar.

  3. hallo, Jeg er interessert i dette fordi jeg ønsker å kontrollere utendørs lys fra telefonen.
    Det ville være første gang du prøvde noe med bringebær.
    Men jeg oppstår tvil om samtalen er dette innlegget “del tre”.
    PHP-koden med bare det som ikke mangler vil bruke noe fra deler en og to?
    Jeg forstår at koden ville være index.php, hvor iria plassert?
    tusen takk!

    • Hola Pablo,

      Bare med denne koden PHP kan implementere versjonen mest ' gjeldende’ Systemet.

      I tidligere opplæring og vurderinger av dem forklare hvor er filen (index.php), som å gi riktige tillatelser, etc…

      Takk for kommentar.

      • Tusen takk for raskt svar.
        Jeg har allerede koblet med en enkelt plate av åtte reléer.
        Men en sjelden ting skjer meg som ikke finner en løsning.
        Gir web-knappene, er jeg aktivert GPIO perfekt, gi deres tilhørende spenning og holde det til at det nedleggelse, men derimot stafetten gjør sin “Klikk” kjører men ikke bryter. Lyden er som om relé er activase og er deaktivert, Det er så rask at måleren ikke oppdager endringer.
        Det kan være grunn?
        takk.

        Salu2!

        • Jeg fant feilen.
          I PHP koden, i kommandoen i slå av, du fjerner koden $a- exec(“ekko 18 > /sys / klassen / gpio / angre”); , som du har den første bryteren og nå fungerer det jeg.
          Hva gjør nå, første gang du slår på bringebær; er lyset åtte lysdioder til middels intensitet, du må slå på og slå en gang og deretter aktiverer led bra og nå fungerer riktig.

          Salu2!

          • Beklager å være så tung med så mange kommentarer, men dette er det første prosjektet som jeg gjør med min raspery og det er fantastisk og veldig veldig enkel! Er denne opplæringen.
            Og verden som åpnes med dette utstyret er inmeso!
            I web, uten å forlate PHP, Du kan se at er aktivert?
            Bryterne, kan nå håndteres med tidsplan og timing?
            virkelig,Jeg har åpnet en ny verden, svært underholdende og økonomisk.

            Salu2 og takk!

          • Hei Paul GC.

            Jeg tror at i en kommentar jeg forklarte som Sjekk at bryteren er aktive lest gjennom PHP delstaten i GPIO.

            For å kontrollere tid programmatisk er enkleste å bruke systemet CRON daemon kjøre hva du vil, ganger på hvilke Marquis le.

            Tusen takk for kommentering.

          • allerede ganske Fortelt prosjektet, lese gpio er nok til å bruke
            exec ( “GPIO lese 29”, $status21 );
            Hvis ($status21[0] == 0) {
            }
            og sette parentesene du vil vise hvis den er slått på eller == status til 1 for nedleggelse.

            Nummereringen av gpio lese ikke er i samsvar med nummereringen av port gpio, Hvis du vil du putter her tabellen som gjorde over equivalences til hver port med sin nummerering av lese.

            Det eneste som jeg fortsatt ikke forstår, fordi 1 Det er av og 0 Det er på.
            og hvorfor bringebær, alle utganger er statsløs, La til middels spenning og utganger ikke fungerer til du slår dem to ganger.

            Opprette en nettsted-reset, hva den gjør er avgir rekkefølgen til alle utganger, en “søvn” og igjen for å gi å slukke alle, Etter denne prosessen er allerede alle funksjonelle.

            Det kan være at de passerer disse to tingene?

            Salu2!

          • Hola Pablo, Beklager for forsinkelsen men jeg er i det siste veldig lite tid mellom arbeid og studier.

            Først vil jeg takke deg at du har delt din fremgang med andre lesere av bloggen, Når jeg har ledig tid jeg har ventende fortsette denne delen av tutorials på Home Automation enkelt og rimelig, men er det virkelig en stolthet for meg å se som du følger deg frem med prosjektet og gå gjøre dem i ditt eget egendefinerte system.

            Tilkobling på stafetten ved å tilordne en logisk lav verdi (0), og slå dem med en logisk høy verdi (1) Det er mulig at på grunn av som du har koblet stafetten til 230V som normalt åpen i stedet for normalt lukket krets, du kommentert til leseren XuFLes på den første kommentaren til denne artikkelen; Hvis du prøver den og problemet vedvarer, Føl deg fri til å kommentere og prøve å tenke på noen annen mulighet.

            For å unngå å gjøre utgangene restarte etter hver Raspbian tenning, Du kan opprette et enkelt skript som eksport og angi pinnene skal starte, og starte den for eksempel fra rc.local.

          • hallo!
            Ingenting i den ettermiddagen i svar!
            Det er logisk å ta deg tid og spesielt i disse datoene.
            Tenningen og avslutning, som kjører til opp, Jeg har reléer koblet.

            Og hva med rc.local, å ikke ha som går til siden for tilbakestilling, som.

            Salu2!

  4. Buenas peatones, llevo tiempo leyendo las 3 partes de tutoriales sobre domotica, pero en la parte programación vais muy rápido para mi, el tema me parece super interesante pero creo que nos falta un detalle para poder realizar un sistema domotico completo y es poder recibir input del exterior, ( pulsadores, sensores lumínicos, etc). Me gustaría colaborar y creo que en la parte eléctrica os puedo ayudar y a cambio os pido ayuda para comprender toda la parte programación. Mi correo es tecnico.antono.raya@gmail.com

    Un saludo y felicidades por la web

Legg inn en kommentar