Serveur d'impression

Comment faire: Bricolage domotique avec NodeMCU et Amazon Alexa: 13 étapes – Bien choisir son serveur d impression

Le 3 mai 2019 - 8 minutes de lecture

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

Votre commentaire sera révisé par les administrateurs si besoin.