|     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

____________________________

62.- NodeMCU obtiene un listado de los WiFi próximos.

- Con nuestro NodeMCU vamos a obtener un listado de los WiFi cercanos y su potencia. El listado lo veremos en el Serial Monitor.

- Para este código no es necesario conectar nada especial al NodeMCU. Simplemente conectamos el NodeMCU al ordenador y cargamos el código.

- Consultamos el Herramientas / Monitor Serie.

___________________________________________________
1
.- Código para obtener un listado de WiFi cercanos y su potencia.

NodeMCU_wifi_cercano.ino
// Juan A. Villalpando
// KIO4.COM
// Listado de WiFi cercanos.
#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);
  // Pone el WiFi en modo estación y lo desconecta por si estuviera conectado.
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(2000);
  Serial.println("Ahora desconectado.");
}

void loop() {
  Serial.println("Localizando redes WiFi cercanas.");
 
  int n = WiFi.scanNetworks();// Localiza WiFis
  Serial.println("Completado.");
  if (n == 0)
    Serial.println("No se ha encontrado ninguna red.");
  else
  {
    Serial.print(n);
    Serial.println(" Redes WiFi encontradas");
    for (int i = 0; i < n; ++i)
    {
      // Nombre de red (SSID) y potencia (RSSI).
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(" dBm)");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  // Nueva búsqueda después de 5 segundos.
  delay(5000);
}

___________________________________________________
2
.- ¿Qué es RSSI?

- Es el indicador de fuerza de la señal recibida (RSSI por las siglas del inglés Received Signal Strength Indicator ). RSSI en la Wikipedia.

- Si una señal tiene un RSSI de -50 dBm, qué potencia tiene.

- El dBm indica la potencia en decibelios referido a 1 mW.

- Para pasarlo a Watios sería

10^(-50/10) * 10^(-3) = 10 nW

___________________________________________________
3.- Obtención de la configuración de red.

- La MAC obtenida del Router se obtiene mediante dos algoritmos pero no coincide con la verdadera.

NodeMCU_wifi_red.ino
// Juan A. Villalpando.
// KIO4.COM
// Información de la red.
#include <ESP8266WiFi.h>
const char* ssid = "Tu_nombre_de_red_wifi";
const char* password = "La_clave_de_tu_red_wifi";
uint8* mac = WiFi.BSSID(); // MAC del Router

void setup() {
  Serial.begin(115200);
  delay(10);
 
  // Conecta a la red wifi.
  Serial.println();
  Serial.print("Conectando con ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Conectado con WiFi.");

  // Esta es la IP
  Serial.print("Esta es la IP asignada al NodeMCU: ");
  Serial.print("http://");
  Serial.println(WiFi.localIP());
  // Máscara de red
  IPAddress subnet = WiFi.subnetMask();
  Serial.print("Máscara de red: ");
  Serial.println(subnet);
  // Puerta de enlace (Router):
  IPAddress gateway = WiFi.gatewayIP();
  Serial.print("Puerta de enlace: ");
  Serial.println(gateway);
  // Nombre de la red conectada (SSID):
  Serial.print("Nombre de la red (SSID): ");
  Serial.println(WiFi.SSID());
  // MAC del NodeMCU
  Serial.print("Esta es la MAC del NodeMCU: ");
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);
  // Fuerza de la señal recibida.
  long rssi = WiFi.RSSI();
  Serial.print("Fuerza de la senal recibida (RSSI): ");
  Serial.print(rssi);
  Serial.println(" dBm");
  // MAC del Router al que está conectado el NodeMCU
   uint8* macr = WiFi.BSSID();
  char mac_router[20];
  sprintf(mac_router, "%02X:%02X:%02X:%02X:%02X:%02X", macr[5], macr[4], macr[3], macr[2], macr[1], macr[0]);
  Serial.print("Esta es la MAC del Router: ");
  Serial.println(mac_router);  
  byte bssid[6];  
  Serial.print("Esta es la MAC del Router: ");
  Serial.print(macr[5],HEX);
  Serial.print(":");
  Serial.print(macr[4],HEX);
  Serial.print(":");
  Serial.print(macr[3],HEX);
  Serial.print(":");
  Serial.print(macr[2],HEX);
  Serial.print(":");
  Serial.print(macr[1],HEX);
  Serial.print(":");
  Serial.println(macr[0],HEX); 
}

void loop() {
}

___________________________________________________
4.- Comprobar si está en funcionamiento.

- No funciona este intento de conexión automática.

void loop() {
////////////////////////////////////////////////////////////
////////////////////// COMPRUEBA SI HA PERDIDO LA CONEXION

if(WiFi.status() != 3){
// Conecta a la red wifi.
Serial.println();
Serial.println();
Serial.print("Conectando con ");
Serial.println(ssid);

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("/");
}
Serial.println(WiFi.status());

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////

- Si está en funcionamiento el WiFi.status = 3

WL_CONNECTED = 3

typedef enum { WL_NO_SHIELD = 255,
// for compatibility with WiFi Shield library
WL_IDLE_STATUS = 0, WL_NO_SSID_AVAIL = 1, WL_SCAN_COMPLETED = 2, WL_CONNECTED = 3, WL_CONNECT_FAILED = 4, WL_CONNECTION_LOST = 5, WL_DISCONNECTED = 6
} wl_status_t;

_____________________________________________

- Reinicio de NodeMcu desde código. Reset.

ESP.reset();

o bien

ESP.restart();

https://github.com/esp8266/Arduino/issues/1722

ESP.reset() is a hard reset and can leave some of the registers in the old state which can lead to problems, its more or less like the reset button on the PC.

ESP.restart() tells the SDK to reboot, so its a more clean reboot, use this one if possible.

________________________________

 

- 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