Configurez Raspberry Pi Home-Automation

Configurez Raspberry Pi Home-Automation
L'une des choses les plus importantes pour la domotique est de contrôler la CA à haute tension à l'aide d'un CC basse tension. Pour contrôler le CA haute tension à partir de Raspberry Pi, vous aurez besoin d'un interrupteur de relais 5V. Vous pouvez contrôler l'interrupteur de relais à l'aide des broches GPIO de Raspberry Pi. L'interrupteur de relais peut ensuite contrôler les appareils électroménagers AC via Raspberry Pi.

Cet article vous montrera comment utiliser Raspberry Pi et le commutateur de relais 5V pour allumer et désactiver une ampoule de votre appareil mobile. L'article comprend une application Web à laquelle vous pouvez accéder à partir de n'importe quel appareil de votre réseau et contrôler tous les appareils électroménagers AC dans votre maison sans fil. Alors, commençons avec notre expérience à domicile simple Raspberry Pi.

Des choses dont vous aurez besoin

Si vous souhaitez utiliser votre Raspberry Pi Headless (via SSH ou VNC), vous aurez besoin des choses suivantes:

1) Raspberry Pi 3 ou Raspberry Pi 4.
2) Interrupteur de relais 5V.
3) Fils électriques.
4) 3 fils de connexion féminine à féminine.
5) ampoule AC.
6) support d'ampoule AC.
7) Plug.
8) outil de filtre et de décapant.
9) Cr-V 3 tournevis.
10) Micro-USB (Raspberry Pi 3) ou USB Type-C (Raspberry Pi 4) Adaptateur de puissance.
11) 16 Go ou 32 Go de carte microSD avec Raspberry Pi OS flashée.
12) Connectivité réseau sur Raspberry Pi.
13) ordinateur portable ou ordinateur de bureau pour l'accès à la télécommande VNC ou l'accès SSH à Raspberry Pi.

Si vous ne souhaitez pas accéder à Raspberry Pi à distance via SSH ou VNC, vous aurez également besoin de ce qui suit:

14) un moniteur.
15) Câble HDMI ou micro-HDMI.
16) un clavier.
17) Une souris.

Si vous avez besoin d'aide pour clignoter l'image Raspberry Pi OS à la carte microSD, consultez l'article comment installer et utiliser Raspberry Pi Imageer.

Si vous êtes un débutant Raspberry Pi et que vous avez besoin d'aide pour installer Raspberry Pi OS sur Raspberry Pi, consultez l'article comment installer Raspberry Pi OS sur Raspberry Pi 4.

De plus, si vous avez besoin d'aide pour la configuration sans tête de Raspberry Pi, consultez l'article comment installer et configurer Raspberry Pi OS sur Raspberry Pi 4 sans moniteur externe.

Des images de tous les outils requis sont donnés ci-dessous.

Alimentation sur Raspberry Pi

Ensuite, connectez le câble d'alimentation à Raspberry Pi et puissance sur Raspberry Pi.

Une fois que Raspberry Pi est allumé, vous pouvez vous connecter à Raspberry Pi via VNC ou SSH. Ou, vous pouvez connecter un clavier, une souris et un moniteur à Raspberry Pi pour y accéder directement.

Pinouts de relais 5V

Un relais est essentiellement un interrupteur. Mais, contrairement à un interrupteur traditionnel, un relais peut être contrôlé par une petite quantité de tension CC.

Le relais 5V est très facile à utiliser. Il a deux côtés: un côté est utilisé pour contrôler le relais via un DC basse tension (de Raspberry Pi), et l'autre côté est utilisé pour contrôler le CA haute tension (I.e., l'ampoule), selon l'état du relais.


D'un côté, le relais a deux LED (un rouge et un vert) et trois broches (Dans, GND, et VCC). Ces trois broches sont utilisées pour contrôler le relais à partir de Raspberry Pi.

Les deux premières broches de l'autre côté sont utilisées pour contrôler l'appareil à domicile AC.

Connexion du relais 5V à Raspberry Pi

Pour connecter le relais 5V à Raspberry Pi, vous aurez besoin de trois fils de connexion féminine à féminine.

Branchez un côté des fils de connexion au DANS (fil jaune), GND (fil noir), et VCC (fil rouge) broches dans le relais 5V, comme indiqué ci-dessous.


L'autre côté des fils va dans les broches d'en-tête GPIO de Raspberry Pi, comme indiqué dans l'image ci-dessous.

Le fil rouge doit entrer dans le PIN 2 (VCC) de Raspberry Pi.
Le fil noir doit entrer dans le PIN 6 (GND) de Raspberry Pi.
Le fil jaune doit entrer dans le PIN 7 (GPIO 4) de Raspberry Pi.


Une fois que le relais 5V est connecté à Raspberry Pi, il doit ressembler comme indiqué dans l'image ci-dessous.

Autoriser l'accès GPIO à l'utilisateur de connexion

Pour permettre l'accès aux broches GPIO, l'utilisateur de connexion par défaut de Raspberry Pi OS pi doit être ajouté au GPIO groupe.

Vous pouvez ajouter le pi Utilisateur au GPIO groupe avec la commande suivante:

$ sudo usermod -ag gpio $ (whoami)


Pour que les modifications prennent effet, redémarrez Raspberry Pi avec la commande suivante:

$ sudo redémarrer

Création d'un répertoire de projet

C'est aussi une bonne idée de garder tous les fichiers de projet organisés.

Pour garder les fichiers de projet organisés, créez le répertoire du projet ~ / www et les sous-répertoires requis avec la commande suivante:

$ mkdir -pv ~ / www / modèles, statique


Une fois le répertoire du projet créé, accédez au répertoire du projet comme suit:

$ CD ~ / www

Commutation du relais 5V de Raspberry Pi

Maintenant que vous avez connecté le relais 5V à Raspberry Pi, vous allez passer le relais du Raspberry Pi à l'aide du langage de programmation Python.

Remarque: commutation est un terme utilisé en électronique. La commutation signifie contrôler (i.e. PLUS D'OBTENIR / OFF) Un certain dispositif électronique.

Pour expérimenter la commutation du relais à l'aide du langage de programmation Python, créez le nouveau test de script Python.py dans le répertoire du projet comme suit:

$ test nano.py


Tapez les lignes de codes suivantes dans le test.script py python.

à partir de la LED d'importation gpiozero
à partir de temps pour sommeil
Bien que vrai:
relais = LED (4)
imprimer ("relais: on")
sommeil (5)
relais.fermer()
imprimer ("relais: off")
sommeil (5)

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le test.py Script python.


Ici, la ligne 1 importations DIRIGÉ du gpiozero bibliothèque et ligne 2 importe le dormir fonction du temps bibliothèque.


Les lignes 6-14 sont dans une boucle infinie.


La ligne 6 initialise une LED dans le GPIO 4 de Raspberry Pi, qui est connecté au DANS Pin du relais.


La ligne 8 allume le relais en utilisant le sur() méthode.

La ligne 9 imprime un message dans la console en utilisant le imprimer() fonction.

La ligne 10 retarde l'exécution de la ligne de code suivante pendant cinq secondes en utilisant le dormir() fonction.


La ligne 12 éteint le relais en utilisant le fermer() méthode.

De la même manière, la ligne 9 imprime un message sur la console en utilisant le imprimer() La fonction et la ligne 10 dérange l'exécution de la ligne de code suivante pendant 5 secondes en utilisant le dormir() fonction.


Ensuite, exécutez le test.py Script python comme suit:

$ Python3 Test.py


Le test.py Le script Python devrait commencer à changer le relais 5V. Vous devriez entendre un son cliqueté toutes les cinq secondes. Lorsque le relais passe à l'état (de ON vers Off ou From Off to ON), il fait un bruit de clic. Cela signifie que le relais fonctionne correctement.


Lorsque le relais est dans l'état hors État (fonctionnement normal - la charge AC est déconnectée), seuls le rouge LED doit s'allumer, comme vous pouvez le voir dans l'image ci-dessous.


Lorsque le relais est dans l'état (la charge AC est connectée), les deux vert Conduit et le rouge LED doit s'allumer, comme vous pouvez le voir dans l'image ci-dessous.


Une fois le test terminé, appuyez sur + C Pour résilier le test.py scénario.

Connexion de l'ampoule AC au relais 5V

Le relais 5V devrait maintenant fonctionner correctement. Maintenant, vous connecrez votre appliance AC Home (une ampoule, dans ce cas) au relais 5V.

Tout d'abord, coupez le fil électrique noir connecté à l'ampoule avec un filtre.


Une fois que le fil électrique noir connecté à l'ampoule a été coupé avec un filtre, il doit ressembler comme indiqué dans l'image ci-dessous.


Ensuite, déposez la couche extérieure pour exposer environ ½ pouce du fil électrique, comme indiqué dans l'image ci-dessous.


Ensuite, pliez les fils exposés, comme indiqué dans l'image ci-dessous.


Desserrer les vis marquées du relais avec un tournevis CV-3.


Insérez les fils exposés que vous avez dépouillés et repliés plus tôt dans les deux bornes à vis et serrez les vis avec un tournevis CV-3.

Test de commutation de relais après avoir connecté la charge de courant alternatif

Une fois la charge AC connectée au relais 5V, connectez la fiche d'ampoule à la prise murale.


Courir le test.py Script Python du répertoire du projet comme suit:

$ Python3 Test.py


Le test.py Le script Python devrait commencer à changer le relais 5V, qui, à son tour, changera l'ampoule à haute tension AC à des intervalles de cinq secondes. L'ampoule AC devrait rester allumée pendant cinq secondes, puis rester à l'écart pendant cinq secondes, et ainsi de suite.

L'ampoule est éteinte dans l'image ci-dessous.


La FMILB est allumée dans l'image ci-dessous.


Comme vous pouvez le voir, nous pouvons changer le relais et contrôler l'ampoule à haute tension AC en utilisant le langage de programmation Python. Alors, presse + C Pour résilier le test.py scénario.

Passons maintenant à la section suivante.

Écriture de l'application Web domestique

Dans cette section, je vais vous montrer comment rédiger une application Web basée sur l'API en utilisant le langage de programmation Python. Vous pouvez utiliser l'application Web pour contrôler le relais et le ou les appareils électroménagers AC ou les appareils électriques connectés au relais à partir d'un navigateur Web.

NOTE: Tous les codes illustrés dans cette section sont disponibles dans mon référentiel GitHub Shovon8 / Raspberry-Pi-Home-Automation. Si vous le souhaitez, vous pouvez cloner mon référentiel GitHub et sauter tous les codes.

Créer le serveur.script py python dans le répertoire du projet comme suit:

$ Nano Server.py


Tapez les lignes de codes suivantes dans le serveur.py Script python.

De Flask Import Flask, JSonify, URL_FOR, Render_Template
à partir de la LED d'importation gpiozero
à partir de l'importation uuid uuid4
chambres =
chambres ['salle 1'] = [
'id': uuid4 (),
«Nom»: «Light 1»,
«icône»: «fa fa-lightbulb»,
«Statut»: faux,
'relaypin': 4,
'relayinstance': faux
,
'id': uuid4 (),
'nom': 'fan 1',
«icône»: «fa fa-fan»,
«Statut»: faux,
'relaypin': 6,
'relayinstance': faux
]
chambres ['salle de bain 1'] = [
'id': uuid4 (),
«Nom»: «Light 1»,
«icône»: «fa fa-lightbulb»,
«Statut»: faux,
'relaypin': 5,
'relayinstance': faux
]
app = flacon (__ name__)
appliquer.config ['send_file_max_age_agelault'] = 0
@app.itinéraire('/')
def home ():
return render_template ('./indice.html ', chambres = chambres)
def toggle_appliance_status (id):
Pour la chambre dans les chambres:
pour l'appareil dans les chambres [salle]:
Si str (appliance ['id']) == id:
Si l'appareil [«relayinstance»]:
Appliance [«relayinstance»].fermer()
appliance ['relayinstance'] = false
autre:
Appliance ['relayInstance'] = LED (Appliance ['relaypin'])
Appliance [«relayinstance»].sur()
Appliance ['Status'] = Not Appliance ['Status']
Retour vrai
retourner faux
@app.Route ('/ Appliance / Toggle /')
Def Appliance_Toggle (ID):
return jSonify ('status': toggle_appliance_status (id))

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le serveur.py Script python.


Ici, les lignes 1 à 3 importent tous les composants nécessaires de leurs bibliothèques respectives.


La ligne 5 crée un vide pièces dictionnaire. Dans ce dictionnaire, nous stockons tous les détails de l'appareil AC que nous souhaitons contrôler à partir de l'application Web.


Le pièces Les détails sont stockés dans les lignes 7-29.


Discutons de la structure de données de l'une des pièces.

Ici, le nom de la pièce sera Salle 1. Donc, Salle 1 est la clé du pièces dictionnaire.


Le Salle 1 Key détient un tableau comme valeur. Le nombre d'éléments de table. Dans ce cas, nous avons deux appareils électroménagers AC que nous voulons contrôler: Lumière 1 et Ventilateur 1.


Chaque définition de l'appareil domestique a un identifiant. Le identifiant est un UUID généré au hasard. Ceci est utilisé pour identifier la pièce que nous voulons contrôler en utilisant l'API.

Un appareil domestique a également tout ce qui suit:

  • Nom (Light 1 dans ce cas)
  • icône (Font Awesome Icon Class, car nous utiliserons Font Awesome pour les icônes)
  • statut (vrai si sur et FAUX si désactivé)
  • relaypin (Le numéro de broche GPIO utilisé pour contrôler le relais connecté à l'appareil domestique AC)
  • relaisir (Le initialisé DIRIGÉ objet gpiozero Bibliothèque responsable du contrôle de la broche GPIO respective - relaypin)


Ligne 31 Initialise un serveur Web Flask Python.

La ligne 32 configure le serveur Web Flask.


Lignes 34-36 Envoyez le indice.html fichier à partir du modèles / Répertoire lorsque vous visitez l'application Web à domicile.

Utilisation du flacon Jinja2 Templage du langage pour rendre le indice.html déposer. Donc, j'ai passé le pièces dictionnaire au indice.html déposer. Jinja2 rendra la page d'accueil en utilisant le pièces données.


La fonction toggle_appliance_status () Dans les lignes 39-52, est utilisée pour allumer l'appareil domestique s'il est éteint et éteindre l'appareil domestique s'il est sur l'utilisation de l'appareil identifiant.

Il revient Vrai Si l'opération de bascule est réussie. S'il y a une erreur, il reviendra FAUX.


Les lignes 55-57 sont utilisées pour basculer un appareil domestique en utilisant le / Appliance / Toggle / Point de terminaison API du serveur Web. Ici, identifiant est l'ID de l'appareil domestique.


Créer le indice.html fichier dans le modèles / Répertoire de votre projet comme suit:

$ modèles Nano / Index.html

Tapez les lignes de codes suivantes dans le indice.html scénario.








Home-Automation avec Raspberry Pi



Raspberry Pi Home-Automation


% pour la chambre dans les chambres%

chambre



% pour l'appareil dans les chambres [salle]%


appliance ['name']

% end pour%


% end pour%



Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le indice.html déposer.


Créer un style.CSS fichier dans le statique/ Répertoire de votre projet comme suit:

$ nano statique / style.CSS


Tapez les lignes de codes suivantes dans le style.CSS déposer.

@Import URL ('https: // polices.googleapis.com / css2?famille = benchnine: wght @ 300; 400; 700 & affiche = swap ');
*
marge: 0;
rembourrage: 0;
Font-Family: «Benchnine», Sans-Serif;

#Content> H1
CONTEXTE: Gradient linéaire (à droite, RVB (112, 24, 163), RVB (86, 127, 240));
Couleur: #FFF;
Texte-aligne: Centre;
rembourrage: .5EM 0;

div.chambre
marge: .5EM;
Border: 2px RVB solide (112, 24, 163);
Border-Radius: 5px;

div.chambre h2
/ * Contexte: RGB (9, 76, 121); * /
CONTEXTE: Gradient linéaire (à droite, RVB (112, 24, 163), RVB (86, 127, 240));
rembourrage: 0 0 0 .5EM;
Couleur: #FFF;

div.appareils électroménagers
marge: .5EM .5EM 0 0;
Affichage: flex;
wrap flex: enveloppement;

div.Appliance
Border: 2px RVB solide (112, 24, 163);
Border-Radius: 5px;
Largeur: 110px;
hauteur: 120px;
Texte-aligne: Centre;
marge: 0 0 .5EM .5EM;
Affichage: flex;
Flex-Direction: colonne;

div.Appareil I.FA
taille de police: 4EM;
Flex-Crow: 1;
tampon de rembourrage: 0.3em;
Couleur: RVB (204, 50, 50);

div.Appliance [data-active = "active"] i.FA
Couleur: RVB (32, 177, 51);

div.Appliance Span
bloc de visualisation;
Police-poids: Bold;
Contexte: RVB (112, 24, 163);
Couleur: #FFF;

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le style.CSS déposer.


Créé un appliquer.js fichier dans le statique/ Répertoire de votre projet comme suit:

$ nano statique / application.js


Tapez les lignes de codes suivantes dans le appliquer.js déposer.

fenêtre.addEventListener («charge», main);
fonction main ()
fonction toggleAppLianCestate (e)
var id = e.Chemin [1].identifiant;
var http = new xmlhttprequest ();
http.onReadyStateChange = function ()
si ce.ReadyState === 4 && ceci.status === 200)
if (json.Parse (ceci.ResponseText).status === true)
si (e.Chemin [1].HasAttribute ('Data-activy'))
e.Chemin [1].RemoveAttribute («Data-activ»)
autre
e.Chemin [1].setAttribute («data-active», «actif»)




http.open ("get", '/ appliance / toggle / $ id', true);
http.envoyer();

Var Appliances = Document.getElementsByClassName («Appliance»);
pour (i = 0; i < appliances.length; i++)
Appareils [i].AddeventListener ('click', toggleAppliCeState);

Une fois que vous avez terminé, appuyez sur + X suivie par Y Et pour sauver le appliquer.js déposer.


Ici, la ligne 1 exécute le principal() fonction lorsque la page Web termine le chargement.

Dans le indice.html fichier, chaque appliance domestique est enfermée dans un appareil classe. Les lignes 26-29 sont utilisées pour sélectionner chaque appareil domestique dans la page Web et joindre le Cliquez sur événement à l'appareil. Lorsque quelqu'un clique sur un appareil domestique sur la page Web, le toggleAppLianCestate () La fonction fonctionnera.


Dans les lignes 4-23, le toggleAppLianCestate () La fonction est utilisée pour demander le / Appliance / Toggle / Point de terminaison du serveur Web pour modifier l'état de l'appareil à domicile cliqué. La demande est faite en arrière-plan via Ajax. Une fois la réponse reçue, la page Web est mise à jour en conséquence.


Accédez à la statique/ Répertoire dans votre répertoire de projet comme suit:

$ cd statique /


Téléchargez la police géniale avec la commande suivante:

$ wget https: // use.Fontawesome.com / sorties / v5.15.1 / Fontawesome-Free-5.15.1 web.zipper


Une fois la police géniale téléchargée, vous devriez trouver le nouveau fichier zip Fontawesome-Free-5.15.1 web.zipper dans le statique/ annuaire.

$ ls -lh


Décompresser le Fontawesome-Free-5.15.1 web.zipper fichier avec la commande suivante:

$ Unzip Fontawesome-Free-5.15.1 web.zipper


Le Fontawesome-Free-5.15.1 web.zipper Le fichier doit maintenant être dézippé.


Le nouveau répertoire Fontawesome-Free-5.15.1-web / devrait être créé dans le répertoire statique /, comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ ls -lh

Renommer le répertoire Fontawesome-Free-5.15.1-web / pour Fontawesome / avec la commande suivante:

$ mv -v Fontawesome-libre-5.15.1-web Fontawesome


Maintenant, vous n'avez plus besoin du Fontawesome-Free-5.15.1 web.zipper déposer. Alors, supprimez le Fontawesome-Free-5.15.1 web.zipper fichier avec la commande suivante:

$ rm -v Fontawesome-Free-5.15.1 web.zipper


Le statique/ La structure du répertoire doit ressembler comme indiqué dans la capture d'écran ci-dessous.

$ ls -lh


Revenez au répertoire du projet ~ / www comme suit:

$ cd…

Test de l'application Web de base

Pour tester l'application Web domestique, exécutez la commande suivante dans votre répertoire de projet:

$ Flask_app = serveur.Py Flask Run


L'application Web doit être disponible sur le port 5000 de votre Raspberry Pi.


Depuis le navigateur Web Chromium, visitez http: // localhost: 5000. L'application Web sur la domotique devrait se charger.

Cliquez sur l'icône Lightbulb, indiquée dans l'image ci-dessous.


L'ampoule AC devrait maintenant être activée. La couleur de l'icône doit également passer au vert, indiquant que l'ampoule est activée.


Ainsi, l'application Web domestique fonctionne. Presse + C Pour résilier le serveur Web.

Création d'un service Systemd pour l'application Web domestique

Dans cette section, je vais vous montrer comment créer un fichier de service SystemD pour l'application Web domestique afin qu'elle commence automatiquement sur le démarrage.

Tout d'abord, créez le raspi-home-automation.service Fichier dans votre répertoire de projet comme suit:

$ nano raspi-home-automation.service

Tapez les lignes suivantes dans l'automation Raspi-Home.fichier de service.

[Unité]
Description = Service Web Raspberry Pi Home-Automation
After = réseau.cible
[Service]
WorkingDirectory = / home / pi / www
Environnement = flask_app = serveur.py
Environnement = flask_env = production
Execstart = / usr / bin / flask run - host = 0.0.0.0
StandardOutput = héritage
StandardError = héritage
Redémarrer = toujours
Utilisateur = pi
[Installer]
Recherché = multi-utilisateurs.cible

Une fois que vous avez terminé, appuyez sur + X suivie par Y Et pour sauver le raspi-home-automation.service déposer.


Copier le raspi-home-automation.service fichier à la / etc / systemd / system / Répertoire avec la commande suivante:

$ sudo cp -v raspi-home-automation.Service / etc / Systemd / System /


Recharger les démons Systemd pour que les changements prennent effet comme suit:

$ sudo Systemctl Daemon-Reload


Ajouter le raspi-home-automation Service au démarrage du système de Raspberry Pi OS avec la commande suivante:

$ sudo systemctl activer raspi-home-automation.service


Redémarrez Raspberry Pi avec la commande suivante:

$ sudo redémarrer


Une fois les bottes Raspberry Pi, le raspi-home-automation Le service doit être actif / en cours d'exécution, comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ sudo systemctl status raspi-home-automation.service

Accéder à l'application Web domestique à partir d'autres appareils

Pour accéder à l'application Web domestique à partir d'autres appareils de votre réseau domestique, vous devrez connaître l'adresse IP de votre appareil Raspberry Pi.

Vous pouvez trouver l'adresse IP de votre appareil Raspberry Pi 4 à partir de l'interface de gestion Web de votre routeur domestique. Dans mon cas, l'adresse IP est 192.168.0.103. Ce sera différent pour vous. Alors, assurez-vous de remplacer mon IP par la vôtre à partir de maintenant.


Si vous avez accès à la console Raspberry Pi, vous pouvez également exécuter la commande suivante pour trouver l'adresse IP,.

$ hostname -i


Une fois que vous connaissez l'adresse IP de votre appareil Raspberry Pi, vous pouvez y accéder à partir de n'importe quel appareil de votre réseau domestique.

Comme vous pouvez le voir dans la capture d'écran ci-dessous, j'ai accédé à l'application Web domestique à partir de mon smartphone Android.


Assurez-vous de brancher le bouchon d'ampoule LIMBULB sur la prise de courant murale.


L'ampoule doit être éteinte par défaut.


Si vous appuyez sur l'icône des ampoules de l'application Web sur la domotique, la couleur de l'icône Lightbulb devrait changer en vert, indiquant que l'ampoule est allumée.


Comme vous pouvez le voir dans l'image ci-dessous, l'ampoule est allumée.

Conclusion

Cet article vous a montré comment utiliser un relais 5V pour contrôler un dispositif électrique AC à haute tension de Raspberry Pi en utilisant le langage de programmation Python. L'article vous a également montré comment écrire une application Web Python Flask basée sur l'API pour contrôler le relais à partir du navigateur Web. Cet article devrait vous aider à démarrer avec la domotique à l'aide de Raspberry Pi.