Raspberry PI – Mise en œuvre d'un système domotique abordable [Partie III]

Après plusieurs mois, j'ai décidé de retourner à Ce projet avec qui j'ai l'intention de créer un système domotique gratuit, et économiquement abordable; Cette faible consommation micro-informatiques, mais multi-plateforme et portable à n'importe quel appareil avec système d'exploitation GNU/Linux disponible à partir port GPIO.Dans messages précédents Nous avons appris à contrôler les modules de Relais optoacoplados avec Framboise PI par bash, PHP, et Python; à cette occasion J'ai optimisé le système d'automatisation, et soit dit en passant, j'ai migré à Raspberry PI 3 de disposer de connectivité sans fil, Mais si vous le souhaitez, vous pouvez utiliser n'importe quel modèle précédent.

Le matériel Il se compose de deux modules de huit relais chaque, qui forment un total de Seize sorties pour contrôler appareils électroménagers, Prises électriques, éclairage; et un sans fin de dispositifs de que ce soit converti en ce petit Raspberry PI 3, dans tout ce que vous avez besoin pour maison de la domotique Bureau de u conventionnel.

Secuencia edificio domotica

Disjoncteur interrupteur schéma domotique bricolage.

Le panneau de contrôle est programmé en PHP, et est une optimisation du code de la version précédente mais uniquement à gérer les GPIO directement à travers bash qui accélère grandement le processus; un must, Étant donné que nous servirons cela via la page WiFi.

FremooticsPI

Le panneau de contrôle web système d'automatisation.

Le fait de sans fichiers supplémentaires pour gérer les sorties de port GPIO de Framboise par Python; Convertit ce simple page Web, un seul fichier, dans le véritable point de départ qui est devenu un jour dans un système complet de domotique que j'ai développera ensemble.

<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

?>

Pour effectuer les connexions entre framboise et relais, Vous devez aller à pied de la lettre, les tableaux suivants basé sur le schéma GPIO BCM; parce que dans le cas contraire, vous devrez modifier les lignes dans le fichier PHP, et remplacer dans la code le nombre de BROCHE employés.

Framboise modèle PI B + / 2/3 Module de relais 1
+ 5V + 5V
GPIO 4
EN 1
GPIO 17
EN 2
GPIO 27 EN 3
GPIO 22
EN 4
GPIO 18 EN 15
GPIO 23
IN1 6
GPIO 24
IN1 7
GPIO 25
IN1 8
GND GND
Framboise modèle PI B + / 2/3 Module de relais 2
+ 5V + 5V
GPIO 5
EN 1
GPIO 6
EN 2
GPIO 13
EN 3
GPIO 12
EN 4
GPIO 19
IN1 5
GPIO 16
IN1 6
GPIO 20
IN1 7
GPIO 21
IN1 8
GND GND

Une fois connecté à tous les broches de Framboise aux SCR, GND, e entrées de la Relais; ne reste plus Copiez le fichier PHP à la Framboise PI, à quel usage SCP Cela nous permettra de le faire à distance.

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/

Aussi à distance Nous allons passer le fichier dans le répertoire du serveur web, et nous allons assigner comme par les propriétaires SSH à la utilisateur et groupe www-data; l'ajoutera à la Groupe gpio, et puis Nous avons redémarrer pour appliquer les modifications.

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

Enfin Nous alimentons avec relais 230V comme nous l'avons vu dans le articles précédents faire un pont entre l'entrée et les autres pôles positifs, d'utiliser un seul Fiche, ou commutateur disjoncteur miniature; Mais si l'on veut se connecter Seize appareils une consommation élevée est recommandé d'utiliser deux, ou plus de bouchons.

relespuenteados

Schéma du pont reliant les pôles positifs du module relais.

Les fils restants, qui correspondent à la pôle négatif et à la prend des Terre, Nous reliera les directement sur le dispositif à commander à travers le Module de relais, dans mon cas un Fiche domotique bricolage; Nous devons également garder à l'esprit que pour la sécurité, notre relais devrait avoir 1 a sortie, donc, pour 16 sorties auront besoin d'un relais de 16À.

Relé Secuencia enchufe

Schéma prise domotique bricolage.

Par la suite vidéo Vous pouvez voir les performances de cette Système de seize sorties en les archivant, Grâce à une démonstration avec une lampe à faible consommation d'énergie; Si vous aimez n'oubliez pas Suivez-moi sur YouTube pour ne rater aucun de la vidéos inédites Je vais publier.

Si vous le souhaitez vous pouvez me suivre sur Twitter, Facebook, Google +, LinkedIn, Feedly, ou partagez-les avec les boutons situés sous cette publication, Si vous avez des questions ou suggestions n'hésitent pas à commenter.

Aidez-nous à atteindre plus de lecteurs Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

7 Thoughts on"Raspberry PI – Mise en œuvre d'un système domotique abordable [Partie III]

  1. Peatonet une question, J’ai copié le code tel qu’et travaille correctement, une exception qui van ces boutons au verso, tourner le robinet en bas et vice versa.

    Je vous remercie pour tous un blog génial.

    • Bonjour XuFLeS, Merci pour votre commentaire.

      A probablement à voir avec le relais pour les connexions réseau; devrait être de vérifier si elle est connectée en normalement ouvert (PAS) au lieu de normalement fermé (CAROLINE DU NORD).

      A bientôt.

      • Je teste avant de raccorder les contacts à 230 V et la led rouge du relais est activé quand à son tour hors d’impulsion. J’ai légèrement modifié le code pour inverser la tendance et bien paraître, mais la vérité m’apparus en doute. Je vous remercie pour votre réponse.

  2. Bonne contribution. J’ai besoin de quelque chose de similaire pour le contrôle de l’irrigation, mais à une condition: Si l’un des n sorties sont en 1 puis GPIOx sera dans 1. Osseuse GPIO = 0 si seulement si toutes les sorties = 0. Toute idée?? Où les sorties sont électrovannes et pompe GPIOx. De déjà vous remercier.

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

      Merci de commenter.

  3. Salut, 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?
    Merci beaucoup!

    • Salut Paul,

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

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

      Gracias por el comentario.

Laisser une réponse