Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Intensidad de la señal de red inalámbrica con ESP32 con Arduino IDE

Este ejemplo muestra cómo utilizar la funcionalidad de red inalámbrica de ESP32 para publicar datos en ThingSpeak™. El ESP32 registra y publica la intensidad de la señal de la red inalámbrica a la que está conectado. Presione un botón en el tablero para tomar tres mediciones de la intensidad de la señal de la red inalámbrica y publicar el resultado promedio en un canal de ThingSpeak. El dispositivo también publica un valor de contador para que pueda realizar un seguimiento de las mediciones.

Puede generar una imagen superpuesta de mapa de calor para representar la intensidad de la señal inalámbrica. Esta imagen muestra las intensidades de la señal inalámbrica superpuestas sobre el plano de una oficina y los datos utilizados para generar el mapa de calor. Para generar la superposición del mapa de calor, consulte Create Heatmap Overlay Image.

Requisitos previos

Configuración ESP32 Arduino Core e IDE

Primero, configura tu Arduino Core para ESP32. Para obtener instrucciones, consulte Installation Instructions for Arduino Core for ESP32. Puedes probar tu configuración Arduino® en el ESP32 usando el boceto de ejemplo “Blink” en Archivo > Ejemplos > 01.Basics. Defina el LED_BUILTIN como pin 5 para usar el LED integrado.

Configuración de ThingSpeak

Para utilizar ThingSpeak , debes tener una cuenta de usuario y un canal creado. Cada canal tiene hasta ocho campos de datos, tres campos de ubicación y un campo de estado. Si tienes una cuenta gratuita, puedes enviar datos a ThingSpeak cada 15 segundos.

1) Regístrese para obtener una nueva cuenta como se muestra en Sign up for ThingSpeak.

2) Cree un canal seleccionando Canales > Mis canales > Nuevo canal.

3) Habilite el Campo 1 y el Campo 2.

4) Ingrese RSSI como nombre del Campo 1 y Counter como nombre del Campo 2.

5) Nombra el canal. Por ejemplo, ESP32 Signal Strength.

6) Guarda tu canal.

7) Tenga en cuenta la clave API de escritura en la pestaña Claves API.

Esquema y Conexiones

Para completar este ejemplo, solo necesita dispositivos integrados en el kit de desarrollo ESP32 proporcionado por Sparkfun. Sin embargo, el uso de una batería portátil compatible con micro-USB puede hacer que su dispositivo sea portátil para realizar mediciones más sencillas.

Programar el ESP32

Utilice el IDE de Arduino para crear una aplicación para su dispositivo.

1) Conecte el ESP32 a su computadora usando un cable micro-USB y espere a que se conecte correctamente.

2) En el IDE de Arduino, seleccione la placa del módulo de desarrollo ESP32 y el puerto COM correcto.

3) Crea la aplicación. Abra una nueva ventana en el IDE de Arduino y guarde el archivo. Agregue el código proporcionado en la sección Código. Edite el SSID de la red inalámbrica, la contraseña y la clave API de escritura para su canal.

Para visualizar sus resultados, puede generar la imagen superpuesta de un mapa de oficina utilizando las fortalezas de la red inalámbrica con ThingSpeak. Dado que el hardware simplificado solo registra la intensidad de la señal, debe registrar manualmente las coordenadas de cada punto. Puede utilizar la mayoría de los programas de edición gráfica para encontrar las coordenadas de píxeles en una imagen. Para obtener detalles sobre cómo generar un mapa de calor, consulte Create Heatmap Overlay Image.

Código

1) Comience por definir bibliotecas, definiciones y variables globales. Ingrese el SSID y la contraseña de su red inalámbrica y escriba la clave API para su canal.

#include <WiFi.h>

#define buttonPin 0 
#define LEDPin 5

// Network information
char* ssid = "WIFINAME";
const char* password = "PPPPPPPPP";

// ThingSpeak settings
char server[] = "api.thingspeak.com";
String writeAPIKey = "XXXXXXXXXXXXXXXX";

// Constants
const unsigned long postingInterval = 15L * 1000L;

// Global variables
unsigned long lastConnectionTime = 0;
int measurementNumber = 0;

2) En la configuración, inicie la salida en serie, inicialice los pines de entrada y salida y conéctese a la red inalámbrica.

void setup(){
  
    Serial.begin(115200);
    pinMode(buttonPin,INPUT);
    pinMode(LEDPin, OUTPUT);
    connectWiFi();
    
}

3) En el bucle principal, primero asegúrese de que haya una conexión inalámbrica y luego verifique si se presiona un botón. Si se presiona el botón, verifique si ha transcurrido suficiente tiempo para publicar datos. Después de detectar la pulsación de un botón, mida la intensidad de la red inalámbrica y luego llame a la función de publicación HTTP.

void loop(){
const int numberPoints = 7;
float wifiStrength;

  // In each loop, make sure there is an Internet connection.
    if (WiFi.status() != WL_CONNECTED) { 
        connectWiFi();
    }

    // If a button press is detected, write the data to ThingSpeak.
    if (digitalRead(buttonPin) == LOW){
        if (millis() - lastConnectionTime > postingInterval) {
            blinkX(2,250); // Verify the button press.
            wifiStrength = getStrength(numberPoints); 
            httpRequest(wifiStrength, measurementNumber);
            blinkX(measurementNumber,200);  // Verify that the httpRequest is complete.
            measurementNumber++;
        }
        
    }
}

4) Conecte su dispositivo a la red inalámbrica usando la función connectWiFi . Después de conectarse exitosamente a la red, el dispositivo parpadea rápidamente cinco veces.

void connectWiFi(){

    while (WiFi.status() != WL_CONNECTED){
        WiFi.begin(ssid, password);
        delay(3000);
    }

    // Display a notification that the connection is successful. 
    Serial.println("Connected");
    blinkX(5,50);  
}

5) Conéctese al servidor ThingSpeak y cree las cadenas de datos para el comando HTTP POST usando la función httpRequest .

void httpRequest(float field1Data, int field2Data) {

    WiFiClient client;
    
    if (!client.connect(server, 80)){
      
        Serial.println("Connection failed");
        lastConnectionTime = millis();
        client.stop();
        return;     
    }
    
    else{
        
        // Create data string to send to ThingSpeak.
        String data = "field1=" + String(field1Data) + "&field2=" + String(field2Data); //shows how to include additional field data in http post
        
        // POST data to ThingSpeak.
        if (client.connect(server, 80)) {
          
            client.println("POST /update HTTP/1.1");
            client.println("Host: api.thingspeak.com");
            client.println("Connection: close");
            client.println("User-Agent: ESP32WiFi/1.1");
            client.println("X-THINGSPEAKAPIKEY: "+writeAPIKey);
            client.println("Content-Type: application/x-www-form-urlencoded");
            client.print("Content-Length: ");
            client.print(data.length());
            client.print("\n\n");
            client.print(data);
            
            Serial.println("RSSI = " + String(field1Data));
            lastConnectionTime = millis();   
            delay(250);
        }
    }
    client.stop();
}

6) Tome varias medidas y devuelva el valor promedio al bucle principal con getStrength.

// Take measurements of the Wi-Fi strength and return the average result.
int getStrength(int points){
    long rssi = 0;
    long averageRSSI = 0;
    
    for (int i=0;i < points;i++){
        rssi += WiFi.RSSI();
        delay(20);
    }

   averageRSSI = rssi/points;
    return averageRSSI;
}

7) Finalmente, use la función blinkX para hacer que el LED del dispositivo parpadee. Los parpadeos permiten que la placa se comunique con usted cuando no está conectada a la computadora a través de USB.

// Make the LED blink a variable number of times with a variable delay.
void blinkX(int numTimes, int delayTime){ 
    for (int g=0;g < numTimes;g++){

        // Turn the LED on and wait.
        digitalWrite(LEDPin, HIGH);  
        delay(delayTime);

        // Turn the LED off and wait.
        digitalWrite(LEDPin, LOW);
        delay(delayTime);
        
    }
}

Consulte también

|