Controllare Relè con NODE MCU

In questo tutorial vedremo come controllare un relè utilizzando la scheda Node MCU (ESP 8266),

Iniziamo da quel che ci serve (in fondo all’articolo troverete tutti i link per l’acquisto su Amazon):

– Node MCU (ESP 8266)

– Relè 1 Canale 5 V

– Alimentatore 5V 2A

Come base di partenza sono sufficienti questi due dispositivi, iniziamo dall’alimentazione del Node MCU e del Relè, ho saldato dei cavetti elettrici sui due dispositivi, come segue:

Sul NODE MCU il cavetto nero (per convenzione negativo) sul pin GND e il cavetto rosso (per convenzione positivo) sul pin VIN.

Sul Relè il cavetto nero sul pin contrassegnato con un – e il cavetto rosso sul pin contrassegnato con un +.

Ultimo collegamento necessario è dal PIN sul relè identificato con la lettera “S” va saldato sul PIN D1 del Node MCU.

A questo punto i collegamenti sono fatti, per comodità consiglio di utilizzare una basetta millefori per facilitare il lavoro di saldatura e per fare un lavoro più pulito.

Ora passiamo al codice, personalmente utilizzo l’ide di Arduino per programmare il NODE MCU.

Per questo progetto specifico ho fatto in modo che l’apparato, connesso in WiFi alla rete del cliente, provi a pingare google e in caso di mancata risposta proceda con il riavvio dell’antenna che da connessione alla struttura.

Ecco il codice:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266Ping.h>

const char* ssid = "WIFI_A_CUI_COLLEGARSI";
const char* password = "PASSWORD_WIFI";
const IPAddress remote_ip(8, 8, 8, 8); // Remote host da pingare, i dns di google
const int relayPin = D1;
const int d_limit = 50; //Numnero di ping persi raggiunto il quale l'apparato va spento
const int r_limit = 52; //Numero di ping persi raggiunto il quale l'apparato va alimentato nuovamente
int down_counter = 0;
String conn_status = "base";

ESP8266WebServer server(80);

void setup() {

pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); //Questo indica che di base il relè deve essere acceso
Serial.begin(9600);

connectToWiFi();

server.on("/", handleRoot);
server.begin();
Serial.println("HTTP server started");}

void loop() {
  server.handleClient();
  // Ping
  if (Ping.ping(remote_ip)) {
    Serial.println("Success!!");
    down_counter = 0;
    conn_status = "ONLINE"; //Il ping ha successo e non si fa alcuna variazione nello stato del relè
    Serial.println(down_counter);
    } else {
      Serial.println("Error :(");
      down_counter = down_counter +1;
      conn_status = "OFFLINE"; //Il ping è fallito, quindi si iniza ad incrementare il contatore dei ping falliti
      Serial.println(down_counter);
      }
  if (down_counter == d_limit){
    digitalWrite(relayPin, LOW); //Raggiunto il limite di ping falliti impostato nella variabile d_limit si apre il contatto del relè, levando alimentazione all'apparato
  }else if (down_counter > r_limit){
    digitalWrite(relayPin, HIGH); //Raggiunto il limite di ping falliti ad apparato spento, impostato nella variabile r_limit si chiude il contatto del relè, dando alimentazione all'apparato
    down_counter = 0; //Si azzera nuovamente il contatore, per dare tempo all'apparato di tornare online
  }
}

void connectToWiFi() {

Serial.print("\n\nConnecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);
//Di seguito si stampano, sulla seriale, informazioni riguardanti la connessione dell'apparato alla WiFi del cliente
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");}

Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());}

void handleRoot() {

Serial.println("Got a Request"); //Debug sulla seriale

if (server.arg(0)[0] == '1') {

Serial.print("Turn ON");}

else 
{
Serial.print("Turn OFF");}
String msg = "";

msg += "<html><body>\n";
msg += "<h1>Relay Remote</h1>";
msg += down_counter;
msg += "<br />";
msg += conn_status;
msg += "</body></html>";

server.send(200, "text/html", msg);} //Questo codice scrive sulla pagina locale dell'apparato, raggiungibile da browser andando sull'ip che l'apparato prende dal router a cui si connette
ping rebooter

Unica aggiunta che va fatta al codice (che dovrebbe essere comprensibile) sta nel fatto che le librerie <ESP8266WiFi.h>.  <WiFiClient.h>,  <ESP8266WebServer.h>, <ESP8266mDNS.h> e <ESP8266Ping.h> vanno aggiunge al progetto dall’editor.

Il codice sopra è commentato nelle singole parti, in caso di dubbi potete lasciarmi un commento qui sotto e cercherò di chiarire ogni dubbio.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *