El objectiu de aquesta practica es crear un servidor WiFi de àrea local, configurat com un punt d'accés per software.
1.- Placa NodeMCU.
2.- Led.
3.- Resistència de 330 Ω
4.- IDE de Arduino.
El processador ESP8266 instal·lat en el NodeMCU disposa de tres formes de connexió WiFi:
1.- Connexió en mode Station(STA).
2.- Connexió en mode Access Point, al igual que un router(AP).
3.- Suma de les dos connexions anteriors AP+Station (AP+STA).
El servidor servirà per controlar un led, que els clients que es connectin al AP, podran encendre o apagar-lo.

Per desenvolupar aquesta practica ens hem basat en la pàgina de ESPloradores
En el mode Access Point el NodeMCU difon un SSID que es el nom de la xarxa, que els dispositius clients poden veure. Si el client es acceptat comença la connexió.
Per defecte la IP del NodeMCU com AP es 192.168.4.1 i les IP's que assigna als clients son 192.168.4.2, 192.168.4.3, ...Com a màxim accepta 5 dispositius clients connectats.
La llibreria que utilitza el NodeMCU es ESP8266WiFi.h
WiFi.softAP(ssid, password, channel, hidden)
Es el software que permet a un dispositiu que no es un router poder convertir-lo en un router virtual.
Paràmetres:
- ssid: el nom que posem a la xarxa que creem, per exemple NodeMcuAP, te que tenir mes de 7 caràcters.
- password: es opcional, però si es vol seguretat WPA2-PSK, té que tenir com a mínim 8 caràcters.
- channel: opcional per defecte utilitza el 1, pot ser del 1 al 13.
- hidden: opcional, 1 permet veure el SSID, 0 la amaga.
Wifi.softAPdisconnect()
Per finalitzar les connexions dels dispositius amb el AP.
WiFi.softAPConfig(local_ip, gateway, subnet)
Per defecte la IP del Access Point es 192.168.4.1,però es pot configurar:
- local_ip: direcció IP del Access Point.
- gateway: es la direcció IP de la pasarela o porta d'enllaç (pot ser la mateixa que la local_ip).
- subnet:direcció IP de la sub xarxa, normalmente 255.255.255.0.
WIFi.softAPIP()
Retorna la IP del AccessPoint.
WiFi.softAPgetStationNum()
Per saber el nombre de dispositius connectats al AP, màxim poden ser 5.
Comencem per el codi HTML, que es la interfície gràfica que fa servir el client per interactuar amb el servidor i poder encendre o apagar el led.
// Envía la página HTML de resposta al client
client.println("HTTP/1.1 200 OK");
client.println(""); //No olvidar la línia de separació
client.println("<!DOCTYPE HTML>");
client.println("<meta charset='UTF-8'>");
client.println("<html>");
//Mostra el estat del led
client.print("<h1>El LED està en el estat de: ");
if(estat == HIGH) {
client.print("ENCÈS</h1>");
} else {
client.print("APAGAT</h1>");
}
//Se crean botones con estilos para modificar el estado del LED
client.println("<button type='button' onClick=location.href='/LED=ON' style='margin:10px; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:400;'><h2> ENCENDRE</h2> </button>");
client.println("<button type='button' onClick=location.href='/LED=OFF' style='margin:10px; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:400;'><h2> APAGAR</h2> </button><br><br>");
client.println("</html>");
delay(1);
El client realitza la petició al servidor NodeMCU, amb el navegador amb les URL's següents:
https://192.168.4.1/LED=ON
https://192.168.4.1/LED=OFF
El NodeMCU, rep la petició:
"/LED=ON" o "/LED=OFF"
i la analiza utilizan la funció peticion.indexOf(), per determinar les accions a realitzar.
NodeMcuAccessPoint.ino
/* NodeMCU Access Point. Servidor Web en mode Access Point que permet encendre i apagar un LED connectat a la sortida D2 del módul NodeMCU. */ ////// llibreria //////// #include <ESP8266WiFi.h> const char ssid[] = "NodeMcuAP"; //Definim la SSDI del nostre servidor WiFi const char password[] = "12345678"; //Definim la contrasenya del servidor WiFiServer server(80); //Definim el port de comunicacions #define PinLED D2 //Definim el pin de sortida D2 int estat = LOW; //Definim la variable estat del LED //////////////////////// setup() //////////////////////////// void setup() { Serial.begin(115200); pinMode(PinLED, OUTPUT); digitalWrite(PinLED, LOW); //Inicialment el pin D2 en estat apagat server.begin(); //inicialitzem el servidor WiFi.mode(WIFI_AP); WiFi.softAP(ssid, password); //Xarxa amb password, en el canal 1 i visible //WiFi.softAP(ssid, password,3,1); //Xarxa amb password, en el canal 3 i visible //WiFi.softAP(ssid); //Xarxa oberta Serial.println(""); Serial.print("Adressa IP AccessPoint - per defecte: "); Serial.println(WiFi.softAPIP()); Serial.print("Adressa MAC del AccessPoint: "); Serial.println(WiFi.softAPmacAddress()); ///// Per modificar la Adressa IP per defecte: /////// //IPAddress local_ip(192, 168, 2, 1); //IPAddress gateway(192, 168, 2, 1); //IPAddress subnet(255, 255, 255, 0); //WiFi.softAPConfig(local_ip, gateway, subnet); //Serial.println(); //Serial.print("AccessPoint - Nova Adressa IP: "); //Serial.println(WiFi.softAPIP()); } //////////////////////// loop() /////////////////////////// void loop() { // Si no hi ha cliente connectat torna a comenzar WiFiClient client = server.available(); if (!client) { return; } // Ja tenim un client // Espera fins que el cliente envía una petició Serial.println("Nou client"); while(!client.available()){ delay(1); } // Mostra el número de clients connectats Serial.printf("Clients connectats al AccessPoint: %d\n", WiFi.softAPgetStationNum()); // Legeix la petició String peticio = client.readStringUntil('r'); Serial.print("Petició del client: "); Serial.println(peticio); client.flush(); // Comproba la petició if (peticio.indexOf('/LED=ON') != -1) { estat = HIGH; } if (peticio.indexOf('/LED=OFF') != -1){ estat = LOW; } //Encen o apaga el LED en funció de la petició digitalWrite(PinLED, estat); // Envía la página HTML de resposta al client client.println("HTTP/1.1 200 OK"); client.println(""); //No olvidar la línia de separació client.println("<!DOCTYPE HTML>"); client.println("<meta charset='UTF-8'>"); client.println("<html>"); //Mostra el estat del led client.print("<h1>El LED està en el estat de: "); if(estat == HIGH) { client.print("ENCÈS</h1>"); } else { client.print("APAGAT</h1>"); } //Se crean botones con estilos para modificar el estado del LED client.println("<button type='button' onClick=location.href='/LED=ON' style='margin:10px; background-color:green; color:#A9F5A9; padding:5px; border:2px solid black; width:400;'><h2> ENCENDRE</h2> </button>"); client.println("<button type='button' onClick=location.href='/LED=OFF' style='margin:10px; background-color:red; color:#F6D8CE; padding:5px; border:2px solid black; width:400;'><h2> APAGAR</h2> </button><br><br>"); client.println("</html>"); delay(1); //Desconexió dels clientes //WiFi.softAPdisconnect(); }
Des de el nostre dispositiu que volem connectar al AccessPoint, busquem les xarxes WiFi disponibles. Connectem amb la xarxa NodeMcuAp amb la contrasenya 12345678.
Obrim el navegador i anem a la adreça:
https://192.168.4.1
La pàgina que es mostra es com la següent:

Al clicar en el botó ENCENDRE, la pàgina es com la següent:

Al clicar en el botó APAGAR, la pagina canvia, l'adreça a https://192.168.4.1/LED=OFF i el estat del led a APAGAT.
El monitor sèrie mostra la següent informació:



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