
Comment faire: Bricolage domotique avec NodeMCU et Amazon Alexa: 13 étapes – Bien choisir son serveur d impression
Je ne partagerai pas tous les fichiers nécessaires à la mise en place de NodeMCU avec Amazon Alexa ici, car ce serait beaucoup de code. S'il vous plaît visitez mon GitHub pour télécharger une archive zip de tous les fichiers nécessaires. Notez que le code ci-dessous ne compilera pas et ne téléchargera pas sans ces fichiers supplémentaires. Allez donc dans mon github pour les récupérer tous.
Je vais partager le croquis Arduino principal que j'ai utilisé afin que vous puissiez avoir une idée de la façon dont tout se lie. Je ne détaillerai pas tout le code, mais je ferai remarquer que je crée quatre rappels avec des noms uniques, quatre commutateurs portant des noms uniques et quatre entiers définissant les relais. Je définis également quatre noms d'appel uniques à comprendre pour Alexa, qui sont mappés sur des ports distincts sur le serveur Web et chaque nom d'appel unique comporte deux paramètres, Activé et Désactivé.
Enfin, j'ai défini le mode pin pour chacune des quatre broches du relais en tant que sortie. Il suffit ensuite de configurer huit fonctions différentes pour chaque relais. Avec le type de carte de relais que j'utilise, je dois également régler les quatre broches du relais sur HIGH dans le code de configuration. Cela est nécessaire en raison de la manière dont les bobines sont câblées à l'intérieur des relais utilisés sur la carte. Un signal HIGH éteint les relais et un signal faible les allume.
Par exemple, lorsque Alexa entend la commande «Turn on lightOne», l'ESP8266 sur le NodeMCU exécute la fonction lightOneOn. Le code qui gère l'émulation FauxMo Belkin WeMo est beaucoup plus complexe et, pour être tout à fait honnête, je ne suis pas tout à fait sûr de comprendre tous les aspects de celui-ci pour l'instant. Je sais que cela fonctionne et ajouter de nouveaux appareils (WeMo et Alexa prennent en charge jusqu'à 14) est aussi simple que de dupliquer les éléments que j'ai mentionnés ci-dessus et d'attribuer un nom unique à chaque nouvel appareil. Donc, sans plus tarder, voici le croquis Arduino qui exploite la magie que vous avez vue dans la vidéo ci-dessus. Rappelez-vous que ce code est inutile sans les cinq autres fichiers que vous pouvez trouver sur mon dépôt Github pour ce projet.
Le code LCD et le matériel LCD sont complètement optionnels et aucun n'est nécessaire pour que ce projet fonctionne. J'ai inclus un écran LCD dans le projet à des fins de débogage / d'aide visuelle uniquement. Si vous ne souhaitez pas utiliser d'écran LCD dans votre projet, commentez simplement le code associé à l'écran LCD ou supprimez-le complètement du fichier .ino. Remarque: si vous rencontrez des problèmes avec le code non compilé, assurez-vous que l'ensemble complet de fichiers, six au total, est ouvert dans l'EDI Arduino et que le dossier dans lequel ils sont stockés porte un nom identique à celui du fichier .ino principal. fichier. Certains utilisateurs ont rencontré des problèmes en raison du nom de dossier et du nom de fichier .ino différents.
Remarque: Ce code ne sera pas compilé ni téléchargé sur votre appareil sans télécharger les cinq fichiers supplémentaires nécessaires au fonctionnement du code FauxMos. Téléchargez ce code depuis mon GitHub en cliquant ici.
/ ****************************************** La version non modifiée de ce code est à l'origine par kakopappa et peut être trouvé à http://bit.ly/2kKQiRg. Cette version du code a été modifiée par Charles Gantt et nécessite cinq fichiers supplémentaires qui peuvent être trouvés à http://bit.ly/2kKQiRg. En savoir plus sur ce projet sur le site de Charles http://bit.ly/2kKQiRg. Suivez Charles et TheMakersWorkbench sur les sites suivants: YouTube: bit.ly/TMWB-on-YouTube TMWB sur Facebook: bit.ly/TMWB-on-Facebook CJGanttMakes sur Facebook: bit.ly/CJGanttMakes TMWB sur Twitter: bit.ly/TMWB-on-Twitter Charles Gantt sur Twitter: bit.ly/CJGanttOnTwitter Instructables: bit.ly/CJGanttOnInstructables Site Web de TMWB: bit.ly/TheMakersWorkbench Charles Gantt sur Element14: bit.ly/CJGantt-On-E14 Charles Gantt sur GitHub: bit.ly/CJGantt-on-Github * / #comprendre#comprendre #comprendre #comprendre #include "switch.h" #include "UpnpBroadcastResponder.h" #include "CallbackFunction.h" #comprendre #comprendre // prototypes booléen connectWifi (); // rappels on / off void lightOneOn (); void lightOneOff (); void lightTwoOn (); void lightTwoOff (); vide outletOneOn (); void outletOneOff (); vide outletTwoOn (); vide outletTwoOff (); // Change ceci avant de clignoter const char * ssid = "Skynet"; const char * password = "8039795700"; booléen wifiConnected = false; UpnpBroadcastResponder upnpBroadcastResponder; Commutateur * lightOne = NULL; Commutateur * lightTwo = NULL; Commutateur * outletOne = NULL; Commutateur * outletTwo = NULL; // Définir les broches de relais int relayOne = 14; int relayTwo = 15; int relayThree = 03; int relayFour = 01; // Addr: 0x3F, 20 caractères et 4 lignes. Parfois, les tableaux d'affichage utilisent l'adresse 0x27 LiquidCrystal_I2C LCD (0x3F, 4, 20); // Franchement afficher, utilisez 0x3F si ne fonctionne pas essayez 0x27 void setup() // Initalize LCD lcd.init (); lcd.noBacklight (); LCD rétro-éclairage(); lcd.begin (20, 4); //Serial.begin(115200); // Initialise la connexion wifi wifiConnected = connectWifi (); //Serial.print("WiFi Connected "); si (wificonnecté) upnpBroadcastResponder.beginUdpMulticast (); // Afficher l'état WiFi sur l'écran LCD avec le SSID du réseau lcd.setCursor (0, 0); lcd.print ("WiFi connecté"); lcd.print (ssid); // Définissez vos commutateurs ici. Max 14 // Format: nom de l'invocation Alexa, numéro de port local, rappel, rappel lightOne = nouveau commutateur ("Light One", 80, lightOneOn, lightOneOff); lightTwo = new Switch ("Lumière deux", 81, lightTwoOn, lightTwoOff); outletOne = nouveau commutateur ("Outlet One", 82, outletOneOn, outletOneOff); outletTwo = nouveau commutateur ("Outlet Two", 83, outletTwoOn, outletTwoOff); //Serial.println("Adding change de répondeur de diffusion upnp "); upnpBroadcastResponder.addDevice (* lightOne); upnpBroadcastResponder.addDevice (* lightTwo); upnpBroadcastResponder.addDevice (* outletOne); upnpBroadcastResponder.addDevice (* outletTwo); // Définir les broches de relais sur les sorties pinMode (14, OUTPUT); pinMode (15, OUTPUT); pinMode (03, OUTPUT); pinMode (01, OUTPUT); // Créer un message d'interrogation lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Polling Status"); lcd.setCursor (0, 2); lcd.print ("Of Smart Devices"); délai (2000); // Définissez chaque broche de relais sur HIGH ce message d'état d'affichage pour chaque relais digitalWrite (relayOne, HIGH); // active relayOne lcd.clear (); lcd.print ("Light One: Off"); retard (500); digitalWrite (relayTwo, HIGH); // active relayOne lcd.setCursor (0, 1); lcd.print ("Light Two: Off"); retard (500); digitalWrite (relayThree, HIGH); // active relayOne lcd.setCursor (0, 2); lcd.print ("Outlet One: Off"); retard (500); digitalWrite (relayFour, HIGH); // active relayOne retard (500); lcd.setCursor (0, 3); lcd.print ("Outlet Two: Off"); // Créer un message initialisé du système lcd.clear (); lcd.setCursor (0, 0); délai (1000); lcd.print ("Système initialisé"); délai (1000); lcd.setCursor (0, 2); lcd.print ("Prêt pour les commandes"); délai (2000); // Configurer le message d'état de l'appareil lcd.clear (); lcd.print ("Light One: Off"); retard (500); lcd.setCursor (0, 1); lcd.print ("Light Two: Off"); retard (500); lcd.setCursor (0, 2); lcd.print ("Outlet One: Off"); retard (500); lcd.setCursor (0, 3); lcd.print ("Outlet Two: Off"); boucle vide () si (wificonnecté) upnpBroadcastResponder.serverLoop (); lightOne-> serverLoop (); lightTwo-> serverLoop (); outletOne-> serverLoop (); outletTwo-> serverLoop (); void lightOneOn () // Serial.print ("Switch 1 turn on ..."); digitalWrite (relayOne, LOW); // active relayOne lcd.setCursor (0, 0); lcd.print ("Light One: On"); void lightOneOff () // Serial.print ("Switch 1 off off ..."); digitalWrite (relayOne, HIGH); // désactive relayOne lcd.setCursor (0, 0); lcd.print ("Light One: Off"); void lightTwoOn () // Serial.print ("Switch 2 turn on ..."); digitalWrite (relayThree, LOW); // active le relais deux lcd.setCursor (0, 1); lcd.print ("Light Two: On"); void lightTwoOff () // Serial.print ("Switch 2 off off ..."); digitalWrite (relayThree, HIGH); // met le relais à deux off lcd.setCursor (0, 1); lcd.print ("Light Two: Off"); // prises de courant void outletOneOn () // Serial.print ("Socket 1 turn on ..."); digitalWrite (relayFour, LOW); // active le relais trois lcd.setCursor (0, 2); lcd.print ("Prise 1: On"); void outletOneOff () // Serial.print ("Socket 1 off off ..."); digitalWrite (relayFour, HIGH); // désactive le relais Trois lcd.setCursor (0, 2); lcd.print ("Outlet One: Off"); void outletTwoOn () // Serial.print ("Socket 2 turn on ..."); digitalWrite (relayTwo, LOW); // met relayFour sur lcd.setCursor (0, 3); lcd.print ("Outlet Two: On"); void outletTwoOff () // Serial.print ("Socket 2 off off ..."); digitalWrite (relayTwo, HIGH); // met le relais à quatre lcd.setCursor (0, 3); lcd.print ("Outlet Two: Off"); // se connecter au wifi - retourne true en cas de succès ou false sinon booléen connectWifi () état booléen = vrai; int i = 0; WiFi.mode (WIFI_STA); WiFi.begin (ssid, mot de passe); Serial.println (""); Serial.println ("Connexion au WiFi"); // attendre la connexion // Serial.print ("Connecting ..."); while (WiFi.status ()! = WL_CONNECTED) retard (500); //Serial.print ("."); si (i> 10) state = false; Pause; i ++; si (indiquer) // Serial.println (""); // Serial.print ("Connecté à"); // Serial.println (ssid); // Serial.print ("adresse IP:"); // Serial.println (WiFi.localIP ()); autre // Serial.println (""); //Serial.println("Connection failed. "); état de retour;
Commentaires
Laisser un commentaire