Intensidad de 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 la pizarra para tomar tres medidas de la intensidad de la señal de la red inalámbrica y publique 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 de superposición 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 Crear imagen de superposición de mapa de calor.
requisitos previos
ESP32 Arduino Core y configuración IDE
Primero, configure su Arduino Core para ESP32. Para obtener instrucciones, consulte Instrucciones de instalación para Arduino Core para ESP32. Puede probar su configuración de Arduino® en el ESP32 utilizando el boceto de ejemplo "Blink" en Expediente > Ejemplos > 01.Fundamentos. Definir el LED_BUILTIN
pin como pin 5 para usar el LED integrado.
Configuración de ThingSpeak
Usar thingspeak , debe 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 tiene una cuenta gratuita, puede enviar datos a ThingSpeak cada 15 segundos.
1) Regístrese para una nueva cuenta como se muestra en Regístrese en ThingSpeak.
2) Crea un canal seleccionando Canales > Mis canales > Nuevo canal.
3) Habilite el Campo 1 y el Campo 2.
4) Entrar RSSI
como el nombre del Campo 1, y Counter
como el nombre del Campo 2.
5) Nombre el canal. Por ejemplo, ESP32 Signal Strength
.
6) Guarda tu canal.
7) Tenga en cuenta la clave API de escritura en el Claves API pestaña.
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 facilitar las mediciones.
Programa el ESP32
Utilice el IDE de Arduino para crear una aplicación para su dispositivo.
1) Conecte el ESP32 a su computadora con 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) Crear 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 de superposición 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 usar la mayoría de los programas de edición de gráficos para encontrar las coordenadas de píxeles en una imagen. Para obtener detalles sobre la generación de un mapa de calor, consulte Crear imagen de superposición de mapa de calor.
Código
1) Comience por definir bibliotecas, definiciones y variables globales. Ingrese el SSID y la contraseña de su red inalámbrica y la clave API de escritura 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 que se presione un botón. Si se presiona el botón, verifique si ha transcurrido suficiente tiempo para publicar datos. Después de detectar la presión de un botón, mida la fuerza 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 el connectWiFi
función. Después de conectarse con éxito 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 el httpRequest
función.
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) Por último, utilice el blinkX
para que el LED del dispositivo parpadee. Los parpadeos permiten que la pizarra se comunique contigo 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); } }