|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

NodeMCU en español
NodeMCU - Juan Antonio Villalpando

-- Tutorial de NodeMCU en español --

Volver al índice del tutorial NodeMCU

____________________________

75.- NodeMcu como Punto de Acceso. SoftAP.

- Puedes consultar esta información en inglés:

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html

_____________________________________________________
1.- El NodeMcu como cliente de red.

- En los tutoriales anterior hemos visto que NodeMcu se conecta a nuestro Router como Cliente.

- Es decir, los dispositivos: ordenador, móvil, NodeMcu están conectado al Router (Acces Point). Si nuestro móvil quiere comunicarse con el NodeMcu, la información llega al Router y de éste al NodeMcu. El Router es como un intermediario.

- El Router establece una red local: 192.168.1.X, los dispositivos de su red están conectados a: 192.168.1.1 (que es la dirección del Router).

- En el caso de la figura el Router está conectado a Internet mediante la IP pública 83.59.132.122. Pero si solo queremos actuar en red local no es necesario que esté conectado a Internet, es decir podemos tener un Router sin estar conectado a Internet, pero que crea una red local. El ordenador, el móvil y el NodeMcu se pueden conectar y enviar información entre ellos. No tienen acceso a Internet, pero entre ellos sí hay comunicación.

- Así que puedo comprar un Router sin conectarlo a Internet, e interconectar con él muchos dispositivos, móviles, ordenadores, NodeMcus,...

_____________________________________________________
2.- El NodeMcu como Punto de Acceso (SoftAP).

- Aquí tenemos otra forma de trabajo.

- Tenemos a nuestro Router (que puede o no estar conectado a Internet, según queramos) y resulta que el móvil está muy lejos del Router y no le llega señal.

- Ponemos al NodeMcu de intermediario, como Punto de Acceso, de esta manera el móvil enviará la señal al NodeMcu y éste al Mi_Router.

- Ahora conectamos al NodeMcu a nuestra red 192.168.1.1 actuando como Punto de Acceso.

-

 

- A veces nos puede ocurrir los siguiente. Tenemos Internet en nuestro móvil y funciona perfectamente. Nuestro amigo no tiene Internet y no dispone de conexión WiFi cercana.

- Habilitamos nuestro móvil como Punto de Acceso, Hotpot. Nuestro amigo se conecta a nuestro móvil y ya se puede conectar a Internet a través de nuestro móvil.

- Nuestro móvil consumirá nuestros "megas" y los que vaya gastando nuestro amigo mientras esté conectado.

- Consulta este tutorial: 105D.- Android hotspot. El teléfono móvil como si fuera un router.

_____________________________________________________
3.- El NodeMcu como Punto de Acceso (SoftAP) sin otro Router.

- Fíjate en el dibujo, ahora el NodeMcu está actuando como Router, en realidad se denomina Punto de Acceso, en este caso SoftAP.

- El NodeMcu crea la red 192.168.4.9 y los demás dispositivos están conectados a esa red. Debemos ir a la configuración de red de cada dispositivo y conectarlo a esa red, se suele denominar ESPsoftAP_01

- Aquí no tenemos Internet, esto se suele denominar Intranet o red local.

_____________________________________________________
4.- Vamos a crear un Punto de Acceso, SotfAP con el NodeMcu.

- Simplemente cargamos este código en el NodeMcu.

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/soft-access-point-class.html

- La red se denomina ESPsoftAP_01

- Vamos a nuestro móvil, entramos en la configuración de red WiFi y observaremos esta red.

- También entramos en el Monitor Serie de Arduino para ver la información mostrada. Lo configuramos a 115200.

- Cada 3 segundos irá mostrando el número de estaciones conectadas.

NodeMcu_AP.ino

// Juan A. Villalpando
// Agosto 2018
// NodeMcu como Punto de Acceso.

#include <ESP8266WiFi.h>

IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);

void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");

  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum());
  delay(3000);
  
  }

- Si quisiéramos poner contraseña:

WiFi.softAP(ssid, password);

_____________________________________________________
5.- NodeMcu como punto de acceso y como servidor web.

Muy importante. Normalmente cuando trabajas para emular las aplicaciones de App Inventor, utilizas el Companión y éste se conecta a tu red, normalmente 192.168.1.X. Tu ordenador también está conectado a esa red.

Pero ahora si estableces el NodeMcu como Punto de Acceso, éste creará otra red: 192.168.4.X, de tal manera que una red no es compatible con la otra.

Cuando vayas a realizar las pruebas con el NodeMCU, debes entrar en la configuración de red del móvil y cambiar la red a ESPsoftAP_01.

Lo mejor sería Crear la aplicación e instalarla en el móvil y luego cambiar configuración de red del móvil, porque si dejas la del móvil en 192.168.1.X y la del NodeMcu en 192.168.4.X no funcionará.

- En el tutorial:

62B.- NodeMCU web server. Servidor web simple muestra página web HTM. IP estática.

- Vimos como configurar al NodeMcu como Servidor web, servía una página web simple con botones (aunque los botones no realizaban ninguna opción.)

- Ahora vamos a insertar el código correspondiente al Servidor web, dentro del NodeMcu como Punto de Acceso.

NodeMcu_AP_ServidorWeb.ino

// Juan A. Villalpando
// Agosto 2018
// NodeMcu como Punto de Acceso y Servidor Web.

#include <ESP8266WiFi.h>

IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);
WiFiServer server(80);

void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");

  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
  server.begin();
}

void loop() {
 WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envíe datos.
  Serial.println("Nuevo cliente.");
  while(!client.available()){
    delay(1);
  }
 
  // Página WEB. ///////////////////////////////
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  Comillas importantes.
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head><meta charset=utf-8></head>");
  client.println("<body><font face='Arial'><center><h1>Servidor web con NodeMCU.</h1>");
  client.println("<h2><font color='#009900'>KIO4.COM - Juan A. Villalpando</font></h2>");
  client.println("<h3>Página web.</h3>");
  client.println("<br><br>");

  client.println("<button>Juan Antonio </button>");
  client.println("<button>KIO4.COM </button>"); 
  client.println("<button>Buen tiempo. </button>");
  client.println("<a href=\"/mensaje=4\"\"><button>Puerto Real </button></a>"); 
  client.println("</font></center></body></html>");
 
  Serial.println("Cliente desconectado.");
  
  }

- He quitado la parte de la imagen, que estaba en el código del tutorial 62B:

client.println("<img src='http://kio4.esy.es/kio42.png'><br>");

ya que ahora no puede conectar con Internet, pues estamos en una red local Intranet.

- Vamos a nuestro móvil, entramos en la Configuracion de red. Establecemos la red ESPsoftAP_01

- En nuestro móvil, ejecutamos un navegador web y escribimos la dirección: 192.168.4.22

- Veremos la página web que nos ha suministrado este punto de acceso funcionado como servidor web. Los botones no realizan ninguna acción.

_____________________________________________________
6.- NodeMcu como punto de acceso y como servidor web. Pulsamos Botones en App Inventor y enviamos un mensaje al NodeMcu SoftAP-ServidorWeb que lo mostrará en pantalla LCD.

- Esto ya lo vimos en este tutorial:

74.- Desde App Inventor enviamos un mensaje al NodeMCU mediante WiFi.

- En este caso los mensajes de los Botones y el CampoDeTexto están en una aplicación de App Inventor.

- Cuando pulsemos un botón se enviará el mensaje indicado sobre él. Si escribimos un mensaje en el casillero y pulsamos "Enviar mensaje" se enviará el que hemos escrito.

- Además cuando enviemos información nos retornará el mensaje.

- Enviaremos algo así: http://192.168.4.22/mensaje=1?x=Hola+amigo

- Observa que ahora debemos poner la dirección del Punto de Acceso que es NodeMcu: 192.168.4.22

p74_nodemcu_mensaje_AP.aia

___________________________________________________
6A.- Diseño.

___________________________________________________
6B.- Bloques.

- Es el mismo código que vimos en: 74.- Desde App Inventor enviamos un mensaje al NodeMCU mediante WiFi.

- Solo he cambiado la última parte de la IP: 4.22

___________________________________________________
6C.- Conexión con la pantalla LCD.

- Es conveniente tener una pantalla LCD, pero si no la tienes puedes comprobar el funcionamiento en el Monitor Serie.

- Realizamos la siguiente conexión:

 

___________________________________________________
6D.- Código para enviar uno de los cuatro mensajes de los botones o un mensaje escrito en el casillero.

NodeMcu_AP_ServidorWeb.ino

// Juan A. Villalpando
// Agosto 2018
// NodeMcu como Punto de Acceso y Servidor Web.

#include <ESP8266WiFi.h>
// SoftAP
IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);
// Web Server
WiFiServer server(80);
// LCD
#include <LiquidCrystal_I2C.h>    
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <Wire.h>
String value = "-"; 

void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);// Columnas y filas de LCD 
  delay(10);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");

  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
  server.begin();
}

void loop() {
  // Consulta si se ha conectado algún cliente.
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envíe datos.
  Serial.println("Nuevo cliente.");
  while(!client.available()){
    delay(1);
  }
 
  // Lee la primera línea de la petición.
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Consulta la petición
  if (request.startsWith("mensaje=1", 5))  { value = "Juan Antonio";}
  if (request.startsWith("mensaje=2", 5))  { value = "KIO4.COM.";}
  if (request.startsWith("mensaje=3", 5))  { value = "Buen tiempo.";}
  if (request.startsWith("mensaje=4", 5))  { value = "Puerto Real";}
  if (request.startsWith("x", 15))  {  // Si en la posición 15 viene una x...
    value = request.substring(17);     // ... un mensaje comienza en la 17.
    value.replace("+", " ");           // Para que los espacios no salgan con +
    value.replace(" HTTP/1.1", " ");   // Para quitar HTTP/1.1
    }

  Serial.println(value);
  lcd.clear(); // Borra pantalla
  lcd.setCursor(0,0); // Inicio del cursor
  lcd.print(value);

  // Devuelve el mensaje.
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  Comillas importantes.
  client.print(value);
 
  Serial.println("Cliente desconectado.");
  }

___________________________________________________
6E.- Comentarios.

- Según llegue mensaje=1...mensaje=1, se escribirá un texto.

- Si en la posición 15 llega una x significa que es un mensaje del casillero, toma de la posición 17 al final.

- El mensaje viene así: Hola+amigo, replace + por espacio.

- Es una línea de texto muy larga, por eso la termino en comillas y comienzo otra con comillas para unirla. Cuidado con eso.

- ¿Qué pasaría si en el NodeMcu pusiera?

// SoftAP
IPAddress local_IP(192,168,1,22);
IPAddress gateway(192,168,1,9);
IPAddress subnet(255,255,255,0);

¿Sería la misma red que la de mi ordenador?, ya que las dos son 192.168.1.X

- Pues no, son dos redes distintas, desde la red del NodeMcu no puedes entrar en la red del ordenador aunque las dos sean 192.168.1.X

___________________________________________________
6F.- Serial Monitor.


___________________________________________________
___________________________________________________
___________________________________________________
___________________________________________________

7.- El NodeMcu como Punto de Acceso, Servidor Web y conectado a la red de Mi_Router.

- Fíjate ahora es NodeMcu es un Punto de Acceso que crea la red 192.148.4.9 y además es un Servidor Web con IP: 192.168.4.22

- El móvil se conecta a la red NodeMcu que es la ESPsoftAP_01 y puede obtener la página web.

- Además el NodeMcu está conectado a la red de Mi_Router que es la 192.168.1.1 y éste le asigna una IP: 192.168.1.9

- Así que el NodeMcu es un Servidor Web y además un intermediario entre las dos redes.

NodeMcu_AP_ServidorWeb.ino

// Juan A. Villalpando
// Agosto 2018
// NodeMcu como Punto de Acceso y Servidor Web.

#include <ESP8266WiFi.h>
// SoftAP
IPAddress local_IP(192,168,4,22);
IPAddress gateway(192,168,4,9);
IPAddress subnet(255,255,255,0);
// Web Server
WiFiServer server(80);
const char* ssid = "red";
const char* password = "clave_red";
// LCD
#include <LiquidCrystal_I2C.h>    
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#include <Wire.h>
String value = "-"; 

void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);// Columnas y filas de LCD 
  delay(10);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");

  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
  // Servidor Web
    server.begin();
  // Conexion con Mi_Router  
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Conectado con WiFi.");
  // Inicio del Servidor web.
  server.begin();
  Serial.println("Servidor web iniciado.");
 
  // Esta es la IP
  Serial.print("Esta es la IP para conectar: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  // Consulta si se ha conectado algún cliente.
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Espera hasta que el cliente envíe datos.
  Serial.println("Nuevo cliente.");
  while(!client.available()){
    delay(1);
  }
 
  // Lee la primera línea de la petición.
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Consulta la petición
  if (request.startsWith("mensaje=1", 5))  { value = "Juan Antonio";}
  if (request.startsWith("mensaje=2", 5))  { value = "KIO4.COM.";}
  if (request.startsWith("mensaje=3", 5))  { value = "Buen tiempo.";}
  if (request.startsWith("mensaje=4", 5))  { value = "Puerto Real";}
  if (request.startsWith("x", 15))  {  // Si en la posición 15 viene una x...
    value = request.substring(17);     // ... un mensaje comienza en la 17.
    value.replace("+", " ");           // Para que los espacios no salgan con +
    value.replace(" HTTP/1.1", " ");   // Para quitar HTTP/1.1
    }

  Serial.println(value);
  lcd.clear(); // Borra pantalla
  lcd.setCursor(0,0); // Inicio del cursor
  lcd.print(value);

  // Devuelve el mensaje.
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  Comillas importantes.
  client.print(value);
 
  Serial.println("Cliente desconectado.");
  }

 

No llega a funcionar .ino

// Juan A. Villalpando.
// KIO4.COM
// Creación de un Punto de Acceso.

#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
 
const char* ssid     = "Juan";
const char* password = "123456789";

const char* ssid2     = "Nombre_red_Router";
const char* password2 = "Clave_router";

WiFiServer server(80);

#define LED2  2    // LED en terminal 2
String estado = "";

void setup() {
  Serial.begin(115200);
  pinMode(LED2, OUTPUT);

// Conecta a la red wifi.
  Serial.println();
  Serial.print("Configurando Punto de Acceso:  ");
  Serial.println(ssid);
 
  WiFi.softAP(ssid, password);
  IPAddress myIP = WiFi.softAPIP();
  // Esta es la IP
  Serial.print("Esta es la IP para conectar: ");
  Serial.print("http://");
  Serial.println(myIP);

  // Inicio del Servidor web.
  server.begin();
  Serial.println("Servidor web iniciado.");

  // Conecta con mi Router
  WiFi.begin(ssid2, password2);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Conectado con WiFi.");

  // Esta es la IP
  Serial.print("Esta es la IP para conectar: ");
  Serial.print("http://");
  Serial.println(WiFi.localIP());
  //////////////////////////////////////////
}
 
void loop() {
  // Consulta si se ha conectado algún cliente.
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
   
  Serial.print("Nuevo cliente: ");
  Serial.println(client.remoteIP());
   
  // Espera hasta que el cliente envíe datos.
  while(!client.available()){ delay(1); }

  /////////////////////////////////////////////////////
  // Lee la información enviada por el cliente.
  String req = client.readStringUntil('\r');
  Serial.println(req);

  // Realiza la petición del cliente.
       if (req.indexOf("on2") != -1) {digitalWrite(LED2, HIGH); estado = "Encendido";}
       if (req.indexOf("off2") != -1){digitalWrite(LED2, LOW); estado = "Apagado";}

  //////////////////////////////////////////////
  // Página WEB. ////////////////////////////
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  Comillas importantes.
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head><meta charset=utf-8></head>");
  client.println("<body><font face='Arial'><center><h1>Servidor web con Wemos ESP32.</h1>");
  client.println("<h2><font color='#009900'>KIO4.COM - Juan A. Villalpando</font></h2>");
  client.println("<h3>Página web.</h3>");
  client.println("<br><br>");
  client.println("<img src='http://juanant91.byethost3.com/kio42.png'><br>");
  client.println("<a href='on2'><button>Enciende LED2</button></a>");
  client.println("<a href='off2'><button>Apaga LED2</button></a>"); 
  client.println("<br><br>");
  client.println(estado);
  client.println("</font></center></body></html>");

  Serial.print("Cliente desconectado: ");
  Serial.println(client.remoteIP());
 // client.flush();
 // client.stop();
}

 

- El móvil lo conectamos a la red del NodeMcu.

- Podemos ver la página web desde el móvil y desde un navegador.

______________________________________________________
- Otro código:

https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/example-sketch-ap-web-server

 

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información