Intensità del segnale di rete wireless con ESP32 con Arduino IDE
Questo esempio mostra come utilizzare la funzionalità di rete wireless di ESP32 per post dati a ThingSpeak ™. L'ESP32 registra e pubblica la potenza del segnale della rete wireless a cui è connesso. Premi un pulsante sulla scheda per effettuare tre misurazioni della potenza del segnale della rete wireless e post il risultato medio a un canale ThingSpeak. Il dispositivo pubblica anche un valore contatore, così puoi tenere traccia delle misurazioni.
È possibile generare un'immagine sovrapposta di una mappa termica per rappresentare la potenza del segnale wireless. Questa immagine mostra la potenza del segnale wireless sovrapposta alla planimetria di un ufficio e i dati utilizzati per generare la mappa termica. Per generare la sovrapposizione della mappa termica, vedere Crea immagine di sovrapposizione della mappa termica.


Prerequisiti
Configurazione del core e dell'IDE Arduino ESP32
Per prima cosa, configura il tuo Arduino Core per ESP32. Per le istruzioni, vedere Istruzioni di installazione per Arduino Core per ESP32. Puoi testare la configurazione Arduino® sull'ESP32 utilizzando lo sketch di esempio "Blink" in File > Esempi > 01.Basics. Definire il pin LED_BUILTIN come pin 5 per utilizzare il LED integrato.
ThingSpeak Configurazione
Per utilizzare ThingSpeak, è necessario disporre di un account utente e di un canale creato. Ogni canale ha fino a otto campi dati, tre campi posizione e un campo stato. Se hai un account gratuito, puoi inviare dati a ThingSpeak ogni 15 secondi.
1) Registrati per un nuovo account come mostrato in Registrati per ThingSpeak.
2) Crea un canale selezionando Canali > I miei canali > Nuovo canale.
3) Abilitare Campo 1 e Campo 2.
4) Inserire RSSI come nome del Campo 1 e Counter come nome del Campo 2.
5) Assegna un nome al canale. Ad esempio, ESP32 Signal Strength.
6) Salva il tuo canale.
7) Annotare la chiave API di scrittura nella scheda Chiavi API.
Schema e connessioni
Per completare questo esempio, sono necessari solo dispositivi integrati nel kit di sviluppo ESP32 fornito da Sparkfun. Tuttavia, l'utilizzo di una batteria portatile compatibile con micro-USB può rendere il dispositivo portatile e semplificare le misurazioni.

Programmare l'ESP32
Utilizza l'IDE Arduino per creare un'applicazione per il tuo dispositivo.
1) Collegare l'ESP32 al computer tramite un cavo micro-USB e attendere che la connessione avvenga correttamente.
2) Nell'IDE di Arduino seleziona la scheda ESP32 Dev Module e la porta COM corretta.
3) Creare l'applicazione. Apri una nuova finestra nell'IDE di Arduino e salva il file. Aggiungere il codice fornito nella sezione Codice. Modifica l'SSID della rete wireless, la password e la chiave API di scrittura per il tuo canale.
Per visualizzare i risultati, puoi generare l'immagine sovrapposta di una mappa dell'ufficio utilizzando la potenza della rete wireless con ThingSpeak. Poiché l'hardware semplificato registra solo la potenza del segnale, è necessario registrare manualmente le coordinate per ciascun punto. Per trovare le coordinate dei pixel di un'immagine è possibile utilizzare la maggior parte dei programmi di editing grafico. Per maggiori dettagli sulla generazione di una mappa termica, vedere Crea immagine di sovrapposizione della mappa termica.
Codice
1) Iniziare definendo librerie, definizioni e variabili globali. Inserisci l'SSID e la password della tua rete wireless e la chiave API di scrittura per il tuo canale.
#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) Nella configurazione, avviare l'uscita seriale, inizializzare i pin di input e output e connettersi alla rete wireless.
void setup(){
Serial.begin(115200);
pinMode(buttonPin,INPUT);
pinMode(LEDPin, OUTPUT);
connectWiFi();
}
3) Nel circuito principale, assicurati innanzitutto che ci sia una connessione wireless, quindi controlla se è stato premuto un pulsante. Se il pulsante viene premuto, verificare che sia trascorso abbastanza tempo per post i dati. Dopo aver rilevato la pressione di un pulsante, misurare la potenza della rete wireless, quindi richiamare la funzione di pubblicazione 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) Connetti il tuo dispositivo alla rete wireless utilizzando la funzione connectWiFi. Dopo essersi connesso correttamente alla rete, il dispositivo lampeggia rapidamente cinque volte.
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) Connettersi al server ThingSpeak e creare le stringhe di dati per il comando HTTP POST utilizzando la funzione 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) Eseguire diverse misurazioni e restituire il valore medio al ciclo principale 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) Infine, utilizzare la funzione blinkX per far lampeggiare il LED del dispositivo. I lampeggi consentono alla scheda di comunicare con te quando non è collegata al computer tramite 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);
}
}