Table des matières:

Contrôleur de relais Alexa Raspberry Pi : 6 étapes
Contrôleur de relais Alexa Raspberry Pi : 6 étapes

Vidéo: Contrôleur de relais Alexa Raspberry Pi : 6 étapes

Vidéo: Contrôleur de relais Alexa Raspberry Pi : 6 étapes
Vidéo: ARRÊTEZ LES RÉPÉTEURS WIFI ET PASSEZ À MA SOLUTION ! 2024, Novembre
Anonim
Contrôleur de relais Alexa Raspberry Pi
Contrôleur de relais Alexa Raspberry Pi
Contrôleur de relais Alexa Raspberry Pi
Contrôleur de relais Alexa Raspberry Pi
Contrôleur de relais Alexa Raspberry Pi
Contrôleur de relais Alexa Raspberry Pi

J'ai créé ce Instructable pour partager mes expériences avec l'intégration d'appareils IOT avec Alexa d'Amazon.

Ce projet permet de contrôler une carte relais connectée à un raspberry pi à partir du contrôleur smarthome.

Il a été testé avec Alexa mais semble également fonctionner correctement avec Samsung Smartthings et d'autres interfaces de contrôle car il émule une série de prises Belkin Wemo.

Il y a BEAUCOUP d'exemples basés sur l'excellent code FAUXMO, mais cela signifiait apprendre python et ne m'a pas donné le contrôle détaillé dont j'avais besoin pour mes appareils et j'ai donc décidé d'en recréer un à partir de zéro en utilisant C comme langage de codage de base.

Je ne voulais pas non plus avoir à aller dans les profondeurs du code lambda sur Amazon.com, donc j'ai gardé les choses très simples.

J'ai posté la source et les notes sur Github:

github.com/Switchdoctorstu/StuPiMo

Le tutoriel est vraiment destiné à expliquer comment le faire fonctionner et à publier mes notes au cas où cela aiderait les autres.

Étape 1: Fournitures et connexions

Fournitures et connexions
Fournitures et connexions
Fournitures et connexions
Fournitures et connexions
Fournitures et connexions
Fournitures et connexions

Les choses dont vous avez besoin sont facilement disponibles sur Amazon/EBay:

  • Tarte aux framboises *
  • Alimentation Pi
  • Connecteurs Dupont
  • Carte relais
  • Ancien cordon micro USB (à couper en deux pour l'alimentation de la carte relais)

N'importe quel Raspberry Pi fonctionnera, je l'ai testé sur un modèle B et Zero.

* Si vous utilisez Pi Zero, vous aurez besoin d'un adaptateur réseau OTG (sauf si vous achetez la version 'W' avec une connexion WiFi)

Vous devrez connecter le Pi au réseau.

Utilisez les connecteurs dupont pour connecter la carte relais au Pi.

Notez que la carte relais doit utiliser une alimentation externe (retirez le lien et connectez-vous au 5v externe). Il fonctionnera à partir du PI mais ce n'est pas conseillé pour le fonctionnement en production.

Pour ma configuration, j'ai utilisé un HUB USB alimenté en externe. Cela fournit la puissance au PI.

J'ai également coupé l'extrémité d'un ancien câble USB et alimenté les relais d'une 2e connexion USB au concentrateur pour rester en sécurité. Ma version "production" utilise une petite alimentation à découpage 5V 5A. Encore une fois, je viens de couper un câble USB en deux pour alimenter le Pi via Micro-USB et de couper deux des connecteurs dupont pour alimenter la carte relais. Il y a 4 fils dans le câble USB, la plupart utilisent du rouge/noir pour indiquer l'alimentation 5v, mais en cas de doute, utilisez un compteur pour vous assurer d'obtenir les bons fils.

Les broches de relais sur la carte sont connectées aux broches GPIO pertinentes sur l'en-tête PI.

Le code vous permet de choisir les broches GPIO mais la valeur par défaut que j'ai utilisée était:

  1. Relais Broche 1 - Masse
  2. Relais Broche 2 - Relais 1 - GPIO 0
  3. Relais Broche 3 - Relais 2 - GPIO 1
  4. Relais Broche 4 - Relais 3 - GPIO 2
  5. Relais Broche 5 - Relais 4 - GPIO 3
  6. Relais Broche 6 - Relais 5 - GPIO 4
  7. Relais Broche 7 - Relais 6 - GPIO 5
  8. Relais Broche 8 - Relais 7 - GPIO 6
  9. Relais Broche 9 - Relais 8 - GPIO 7
  10. Relais Pin 10 - +5v pour logique

Étape 2: configuration de PI

Je ne vais pas recréer un didacticiel sur la façon de faire fonctionner votre PI et de le connecter au réseau.

Il existe de nombreux guides dont un excellent instructable à:

www.instructables.com/id/Ultimate-Raspberr…

Vous devrez vous rendre au point où le PI est visible sur le réseau et vous pouvez vous y connecter.

Peu importe que ce soit via Ethernet ou sans fil.

Ce projet peut être complété uniquement avec le Raspberry PI à l'aide de l'éditeur de programmeurs Geany, mais je trouve personnellement qu'il est plus facile de préparer mon code sur un PC à l'aide de Visual Studio ou d'Eclipse (ou même de Notepad ++), puis de le télécharger sur le PI pour le débogage à l'aide d'un Connexion VNC. Encore une fois, je ne vais pas couvrir cela ici car il existe de nombreuses excellentes instructions sur la configuration de VNC sur un RPi.

Tout ce dont vous avez besoin est d'arriver au point où vous pouvez télécharger et compiler le code.

Une note importante est que puisque le gestionnaire UPNP requiert la multidiffusion UDP, les interfaces utilisées doivent être définies en mode « Promiscuous ».

Cela peut être fait sur la ligne de commande:

pi@raspberrypi:~ $ ifconfig eth0 promisc

et/ou

pi@raspberrypi:~ $ ifconfig wlan0 promisc

Cela doit être rendu permanent, j'ai donc édité le fichier /etc/rc.local

sudo nano \etc\rc.local

pour inclure la ligne:

sudo ifconfig eth0 promisc

après le premier ensemble de lignes # de bannière pour s'assurer que les interfaces ont été définies au démarrage.

Étape 3: Téléchargement et compilation du code

Le code lui-même se trouve dans mon répertoire Github;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

alors qu'il existe des moyens "corrects" de cloner le référentiel. J'ai trouvé plus simple d'ouvrir l'éditeur Geany sur le bureau Pi et de coller le code.

De même, si vous utilisez la ligne de commande;

Créer un nouveau répertoire

mkdir Stu

Changez-le

cd

Créer un nouveau fichier texte

nano StuPiMo.c

Copiez le code du Github raw et collez-le dans le nouveau fichier

Sauvegarder et quitter.

Une fois que vous avez le fichier en tant qu'objet de code source C, vous pouvez le compiler en utilisant

gcc -o StuPiMo StuPiMo.c -l câblagePi

notez que le "-l câblagePi" est nécessaire pour s'assurer que le compilateur se connecte à la bibliothèque câblagePi requise.

Le code peut alors être exécuté en utilisant

./StuPiMo

Encore une fois, si vous voulez que cela s'exécute au démarrage, utilisez la commande:

sudo nano /etc/rc.local

ajouter la ligne suivante

sudo /home/pi/Stu/StuPiMo &

dans votre fichier /etc/rc.local. N'oubliez pas de sauvegarder votre fichier en quittant.

Notez que le '&' est essentiel pour s'assurer qu'un sous-processus est généré pour s'assurer que le script n'est pas bloqué à ce stade.

Étape 4: l'utiliser

Une fois que vous avez exécuté le code, demandez à Alexa de « Découvrir les appareils » et elle devrait trouver les 8 appareils Wemo virtuels.

Ensuite, il suffit de dire: « Alexa allume la prise 1 » ou « Alexa éteint la prise 6 », etc. et le relais correspondant sera modifié.

Étape 5: Comment fonctionne le code

Le code fonctionne en émulant une série de dispositifs de socket Belkin Wemo.

Pour y parvenir, il doit gérer 2 fonctions principales

  • un gestionnaire de diffusion de découverte UPNP
  • un « device handler » (un par périphérique virtuel) pour gérer les commandes envoyées au périphérique et les réponses requises.

Une fonctionnalité « bonus » est qu'il publie également une page Web pour permettre le contrôle des appareils.

Gestionnaire UPNP

Le gestionnaire UPNP ouvre un socket pour surveiller les paquets de protocole SSDP sur le port 1900 239.255.255.250.

Il répond à toutes les requêtes « M-SEARCH » entrantes avec un paquet de réponse de découverte qui annonce les émulateurs wemo individuels à quiconque le demande.

Gestionnaire de périphérique

Les gestionnaires de périphériques (un par périphérique virtuel) surveillent une série de ports IP et répondent aux demandes.

Il servira une réponse setup.xml lorsque demandé

Il servira un fichier de description d'événement lorsque demandé

Il répondra à une requête GETBINARYSTATE

Il traitera et répondra à une demande SETBINARYSTATE

Serveur Web

Le serveur Web est une routine simple qui construit un formulaire HTML contenant un bouton par relais.

Il répondra aux boutons enfoncés et changera l'état du relais en conséquence.

Étape 6: personnalisation et noms conviviaux

Personnalisation et noms conviviaux
Personnalisation et noms conviviaux

Je ne suis pas devenu fou avec le code pour le garder simple et modifiable.

Les bases peuvent être personnalisées par des définitions en début de code:

// définitions globales#define WEBPORT 5353 // port sur lequel exécuter le serveur Web

#define NUMDEVICES 8 // Nombre d'appareils virtuels à créer

#define PORTBASE 43450 // port IP de base à incrémenter à partir de

WEBPORT est le numéro de port sur lequel s'exécute le serveur Web intégré. Cela pourrait être fait pour s'asseoir à 80 pour rendre les choses faciles, mais j'ai trouvé que cela était en conflit avec Tomcat ou d'autres services exécutés localement.

NUMDEVICES définit le nombre d'émulateurs WEMO individuels à lancer. Si vous avez une carte relais à 2 ports, réglez-la sur 2, 4 ports = 4, etc.

Les noms conviviaux des périphériques sont définis dans une routine appelée setup_names:

int setup_names(char friendly[NUMDEVICES][NAMELEN]) { int i = 0;

// utilise cette boucle

pour (i = 0; i < NUMDEVICES; i++) {

sprintf(friendly, "Socket %d", i + 1);

}

// ou le tableau manuel suivant pour renseigner les noms de périphériques

/*

strcpy(friendly[0], "Chambre TV");

strcpy(friendly[1], "Couverture électrique");

strcpy(friendly[2], "Lampe de chambre");

strcpy(friendly[3], "Socket 4");

strcpy(friendly[4], "Socket 5");

strcpy(friendly[5], "Socket 6");

strcpy(friendly[6], "Socket 7");

strcpy(friendly[7], "Socket 8");

*/

retourner je;

}

J'ai utilisé une boucle pour appeler chacun des appareils 'Socket n' mais vous pouvez supprimer cette boucle et ajouter vos propres noms conviviaux à la place (assurez-vous simplement d'ajouter le même numéro que NUMDEVICES) si vous supprimez le /* */

N'oubliez pas de recompiler le code si vous apportez des modifications.

Conseillé: