Es un projecte de domotica per encendre o apagar la llum de la casa remotament per web. Es pot accedir per la xarxa local o per Internet, escribin en el navagador la IP local del servidor si estem en la mateixa xarxa o la IP publica desde Internet.
Placa NodeMCU.
Relay.
Ide de Arduino.
La placa NodeMCU es connecta a la nostre WiFi i es configura com a un servidor web, aquest servidor escolta les peticions get dels clients:

La imatge del esquema eléctrictre està feta gracies a l'aplicació de la plataforma circuito.io

//Per mitjansant la web, es vol encendre i apagar
//una bombilla conectada a 220V.
//components: NodeMCU, Relay i bombilla a 220V
//llibreries
#include <ESP8266WiFi.h>
//la nostre wifi
const char* ssid = "mirablau";
const char* password = "Cla1DeCasa";
//el nostre servidor utilitza el port 80
WiFiServer server(80);
//definim el pin del relay
#define pinRelay D1
//estat en que es troba la bombilla
int estat = LOW;
///////////////////// setup() ////////////////////////////////
void setup() {
//inicialitze el port serie a 115200 baudis
Serial.begin(115200);
// el pinRelay es de sortida i low
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, LOW);
//iniciatitzem la WiFi
WiFi.begin(ssid, password);
Serial.printf("\n\nConnectat a la xarxa: %s\n", WiFi.SSID().c_str());
//mentres no es connecta a la WiFi escriu punts.
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connectada");
//inicialitzem el servidor
server.begin();
Serial.println("Servidor inicialitzat");
Serial.printf("\n\nURL obtinguda per el servidor: http://%s/\n", WiFi.localIP().toString().c_str());
}
//////////////////////////////// loop() //////////////////////////////////////
void loop() {
// el servidor espera un client
//si no hi ha client, torna ha començar el bucle
WiFiClient client = server.available();
if (!client) {
return;
}
//hi ha client
Serial.println("nou client");
while(!client.available()){
delay(1);
}
//llegim la peticio del client
String peticio = client.readStringUntil('\r');
Serial.println(peticio);
client.flush();
//analitzem la peticio
// si la peticio conté al subcadena '/LED=ON'
if (peticio.indexOf('/LED=ON') != -1) {
estat = LOW;
}
// si la peticio conté la subcadena '/LED=OFF'
if (peticio.indexOf('/LED=OFF') != -1){
estat = HIGH;
}
//encenem o apagem depanent del estat
digitalWrite(pinRelay, estat);
//construim la web, codi HTML
client.println("HTTP/1.1 200 OK");
client.println("");
client.println("");
client.println("");
client.println("");
client.print("<h1 align=center>CONTROL LLUM DE CASA ");
//si està encesa, el butó mostra la imatge OFF i al clicar-lo envia ON
//el servidor al rebre la petició ON possa el estat en HIGH
//altrament lo contrari
if(estat == HIGH) {
client.print("<input type='image' src='https://i.imgur.com/00i0BdB.jpg'" );
client.print("style='display:block; margin:auto' width='30%' onClick=location.href='/LED=ON'>");
}else{
client.print("<input type='image' src='https://i.imgur.com/uQxhFE5.jpg'");
client.print("style='display:block; margin:auto' width='30%' onClick=location.href='/LED=OFF'>");
}
client.println("</html>");
delay(1);
Serial.println("Petició finalitzada");
//es queda a espera de una nova petició.
Serial.println("");
}
La palca NodeMCU que dispossa de WiFi, es connecta a la xarxa local obtinguen una IP que li dona el router. Configurem el NodeMCU per que sigui un servidor WEB. Cuan el client en el navegador escriu la IP del servidor WEB, aquest envia una imatge de un butó que té dues posicions ON i OFF, depenent de la comanda get que precedeix a la IP, en el nostre cas la IP es 192.168.0.25. Les URLs que entén el servidor son:

La imatge del esquema eléctrictre està feta gracies a l'aplicació de la plataforma circuito.io

En el següent tros de codi, el servidor llegeix la petició del client i encén o apaga la bombilla. El servidor llegeix la petició del client, si la petició conté la subcadena LED=ON, possa el estat en LOW i el relay en estat LOW, bombilla apagada. Altrament el contrari.

Fa servir dues imatges de Internet, dos butons, un mostra la imatge ON i l'altre OFF. Inicialment el estat es LOW, apagada. Pasem al else del codi anterior, imatge ON i al clicar-la envia LED=OFF. En el següent loop, la petició es LED=OFF, possa l'estat en HIGH, encen la bombilla. La següent interacció estat es HIGH, encesa, en el if del codi anterior, presenta la imatge de OFF que al clicar-la envia LED=ON. En el següent loop, la petició es LED=ON, possa l'estat en LOW, apaga la bombilla.

Si volem accedir al nostre servidor WEB, des d'Internet, tenim que redireccionar els ports del router. El monitor serie del ide d'Arduino ens mostra la url que tenim que fer servir per connectar amb la placa NodeMCU:

Accedim al router en mode expert, mirem el nom i la IP del nostre dispositiu. El nom es ESP i la IP 192.168.0.25

Afegim un nou redireccionament de ports, especifiquem el dispositiu i assignem el port 80, tan el public com també el de la LAN. Guardem i apliquem els canvis. En altres routers la configuració pot variar.


Mirem la IP publica que tenim assignada per el nostre proveedor d'Internet amb la cual i el navegador podrem accedir des de qualselvol lloc al nostre dispositiu.
El mar.
Havaneres.
Lloret antic.
Lloret avui.
De cala Morisca a Sa Carabera.
De Sa Carabera a Treumal.
Lloret en kayak.
Vígilancia remota.
Caixa-tpv.
Cambrer-app.
Client webApp.
Relats del banc del si no fos
Històries d'ahir
Vídeos antics de Lloret
El caiac
Contes de l'avi.
Control d’accés amb contrasenya.
Orgue de llums.
Comparativa de editors Arduino.
Projecte bon Nadal.
Control de la qualitat del aire interior (CO2) amb semàfor LED.
NodeMCU-ThingSpeak
ThingSpeak.
NodeMCU com AccessPoint.
Control de la llum de casa per web.
Control de un led per el mòbil.
Sistema de fitxers en ESP8266.
Altura del nivell d'aigua.
Avis d’alarma a Telegram.
Control de la intensitat de llum de un LED per Internet.
Magatzematge de temperatura i humitat en Thinger.
Publicar temperatura i humitat en Google Sheets.
ESP8266 i Firebase.
La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega.
ESP32-CAM
ESP32-CAM captura fotos per ser vistes en la WEB.
Pujar fotos a un servidor FTP amb ESP32-CAM.
MicroPython en ESP8266.
Visual Estudio Code per Arduino.
Classificador d’imatges.
Instal·lar i configurar Apache en Ubuntu.
Accés a un servidor Linux remotament.
Client i Servidor FTP.
Màquina virtual UBUNTU.
WindowsXP en Virtualbox.
Multisim, simulador de circuits electrònics.
Proteus, simulador de circuits electrònics.
MySQL. Instal·lació.
MySQL. Aplicacions.
Netbeans Maven MySQL.
Java+Netbeans+Maven+EclipseLink+Mysql
Aplicació d’escriptori JavaFX
App JavaFX amb SceneBuilder
App Java-Swing











Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client