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:

[pastacode lang=”cpp” manual=”%23include%20%3CESP8266WiFi.h%3E%0A%23include%20%3CWiFiClient.h%3E%0A%23include%20%3CESP8266WebServer.h%3E%0A%23include%20%3CESP8266mDNS.h%3E%0A%23include%20%3CESP8266Ping.h%3E%0A%0Aconst%20char*%20ssid%20%3D%20%22WIFI_A_CUI_COLLEGARSI%22%3B%0Aconst%20char*%20password%20%3D%20%22PASSWORD_WIFI%22%3B%0Aconst%20IPAddress%20remote_ip(8%2C%208%2C%208%2C%208)%3B%20%2F%2F%20Remote%20host%20da%20pingare%2C%20i%20dns%20di%20google%0Aconst%20int%20relayPin%20%3D%20D1%3B%0Aconst%20int%20d_limit%20%3D%2050%3B%20%2F%2FNumnero%20di%20ping%20persi%20raggiunto%20il%20quale%20l’apparato%20va%20spento%0Aconst%20int%20r_limit%20%3D%2052%3B%20%2F%2FNumero%20di%20ping%20persi%20raggiunto%20il%20quale%20l’apparato%20va%20alimentato%20nuovamente%0Aint%20down_counter%20%3D%200%3B%0AString%20conn_status%20%3D%20%22base%22%3B%0A%0AESP8266WebServer%20server(80)%3B%0A%0Avoid%20setup()%20%7B%0A%0ApinMode(relayPin%2C%20OUTPUT)%3B%0AdigitalWrite(relayPin%2C%20HIGH)%3B%20%2F%2FQuesto%20indica%20che%20di%20base%20il%20rel%C3%A8%20deve%20essere%20acceso%0ASerial.begin(9600)%3B%0A%0AconnectToWiFi()%3B%0A%0Aserver.on(%22%2F%22%2C%20handleRoot)%3B%0Aserver.begin()%3B%0ASerial.println(%22HTTP%20server%20started%22)%3B%7D%0A%0Avoid%20loop()%20%7B%0A%20%20server.handleClient()%3B%0A%20%20%2F%2F%20Ping%0A%20%20if%20(Ping.ping(remote_ip))%20%7B%0A%20%20%20%20Serial.println(%22Success!!%22)%3B%0A%20%20%20%20down_counter%20%3D%200%3B%0A%20%20%20%20conn_status%20%3D%20%22ONLINE%22%3B%20%2F%2FIl%20ping%20ha%20successo%20e%20non%20si%20fa%20alcuna%20variazione%20nello%20stato%20del%20rel%C3%A8%0A%20%20%20%20Serial.println(down_counter)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20Serial.println(%22Error%20%3A(%22)%3B%0A%20%20%20%20%20%20down_counter%20%3D%20down_counter%20%2B1%3B%0A%20%20%20%20%20%20conn_status%20%3D%20%22OFFLINE%22%3B%20%2F%2FIl%20ping%20%C3%A8%20fallito%2C%20quindi%20si%20iniza%20ad%20incrementare%20il%20contatore%20dei%20ping%20falliti%0A%20%20%20%20%20%20Serial.println(down_counter)%3B%0A%20%20%20%20%20%20%7D%0A%20%20if%20(down_counter%20%3D%3D%20d_limit)%7B%0A%20%20%20%20digitalWrite(relayPin%2C%20LOW)%3B%20%2F%2FRaggiunto%20il%20limite%20di%20ping%20falliti%20impostato%20nella%20variabile%20d_limit%20si%20apre%20il%20contatto%20del%20rel%C3%A8%2C%20levando%20alimentazione%20all’apparato%0A%20%20%7Delse%20if%20(down_counter%20%3E%20r_limit)%7B%0A%20%20%20%20digitalWrite(relayPin%2C%20HIGH)%3B%20%2F%2FRaggiunto%20il%20limite%20di%20ping%20falliti%20ad%20apparato%20spento%2C%20impostato%20nella%20variabile%20r_limit%20si%20chiude%20il%20contatto%20del%20rel%C3%A8%2C%20dando%20alimentazione%20all’apparato%0A%20%20%20%20down_counter%20%3D%200%3B%20%2F%2FSi%20azzera%20nuovamente%20il%20contatore%2C%20per%20dare%20tempo%20all’apparato%20di%20tornare%20online%0A%20%20%7D%0A%7D%0A%0Avoid%20connectToWiFi()%20%7B%0A%0ASerial.print(%22%5Cn%5CnConnecting%20to%20%22)%3B%0ASerial.println(ssid)%3B%0A%0AWiFi.begin(ssid%2C%20password)%3B%0A%2F%2FDi%20seguito%20si%20stampano%2C%20sulla%20seriale%2C%20informazioni%20riguardanti%20la%20connessione%20dell’apparato%20alla%20WiFi%20del%20cliente%0Awhile%20(WiFi.status()%20!%3D%20WL_CONNECTED)%20%7B%0Adelay(500)%3B%0ASerial.print(%22.%22)%3B%7D%0A%0ASerial.println(%22%5CnWiFi%20connected%22)%3B%0ASerial.print(%22IP%20address%3A%20%22)%3B%0ASerial.println(WiFi.localIP())%3B%7D%0A%0Avoid%20handleRoot()%20%7B%0A%0ASerial.println(%22Got%20a%20Request%22)%3B%20%2F%2FDebug%20sulla%20seriale%0A%0Aif%20(server.arg(0)%5B0%5D%20%3D%3D%20’1′)%20%7B%0A%0ASerial.print(%22Turn%20ON%22)%3B%7D%0A%0Aelse%20%0A%7B%0ASerial.print(%22Turn%20OFF%22)%3B%7D%0AString%20msg%20%3D%20%22%22%3B%0A%0Amsg%20%2B%3D%20%22%3Chtml%3E%3Cbody%3E%5Cn%22%3B%0Amsg%20%2B%3D%20%22%3Ch1%3ERelay%20Remote%3C%2Fh1%3E%22%3B%0Amsg%20%2B%3D%20down_counter%3B%0Amsg%20%2B%3D%20%22%3Cbr%20%2F%3E%22%3B%0Amsg%20%2B%3D%20conn_status%3B%0Amsg%20%2B%3D%20%22%3C%2Fbody%3E%3C%2Fhtml%3E%22%3B%0A%0Aserver.send(200%2C%20%22text%2Fhtml%22%2C%20msg)%3B%7D%20%2F%2FQuesto%20codice%20scrive%20sulla%20pagina%20locale%20dell’apparato%2C%20raggiungibile%20da%20browser%20andando%20sull’ip%20che%20l’apparato%20prende%20dal%20router%20a%20cui%20si%20connette” message=”ping rebooter” highlight=”” provider=”manual”/]

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.

Potrebbe interessarti...

Leave a Comment