Main Content

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

Potenza del segnale della rete wireless con ESP32 con IDE Arduino

Questo esempio mostra come utilizzare la funzionalità di rete wireless di ESP32 per inviare 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 pubblicare il risultato medio su un canale ThingSpeak . Il dispositivo pubblica anche un valore del contatore in modo da poter tenere traccia delle misurazioni.

È possibile generare un'immagine sovrapposta della 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 di calore. Per generare la sovrapposizione della mappa termica, vedere Create Heatmap Overlay Image.

Prerequisiti

Configurazione ESP32 Arduino Core e IDE

Innanzitutto, configura il tuo Arduino Core per ESP32. Per istruzioni, vedere Installation Instructions for Arduino Core for ESP32. Puoi testare la configurazione di Arduino® sull'ESP32 utilizzando lo schizzo di esempio "Blink" in File > Esempi > 01.Nozioni di base. Definire il pin LED_BUILTIN come pin 5 per utilizzare il LED integrato.

Configurazione ThingSpeak

Per utilizzare ThingSpeak , è necessario disporre di un account utente e di un canale creato. Ciascun canale dispone di un massimo di 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 Sign up for ThingSpeak.

2) Crea un canale selezionando Canali > I miei canali > Nuovo canale.

3) Abilita Campo 1 e Campo 2.

4) Immetti 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) Annota la chiave API di scrittura nella scheda Chiavi API.

Schema e collegamenti

Per completare questo esempio, sono necessari solo i dispositivi integrati nel kit di sviluppo ESP32 fornito da Sparkfun. Tuttavia, l'utilizzo di una batteria portatile compatibile con micro-USB può rendere il tuo dispositivo portatile per misurazioni più semplici.

Programmare l'ESP32

Utilizza l'IDE Arduino per creare un'applicazione per il tuo dispositivo.

1) Collega l'ESP32 al computer utilizzando un cavo micro-USB e attendi che si connetta correttamente.

2) Nell'IDE Arduino seleziona la scheda ESP32 Dev Module e la porta COM corretta.

3) Crea l'applicazione. Apri una nuova finestra nell'IDE di Arduino e salva il file. Aggiungi 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 i punti di forza della rete wireless con ThingSpeak. Poiché l'hardware semplificato registra solo la potenza del segnale, è necessario registrare manualmente le coordinate per ciascun punto. È possibile utilizzare la maggior parte dei programmi di editing grafico per trovare le coordinate dei pixel su un'immagine. Per dettagli sulla generazione di una mappa termica, vedere Create Heatmap Overlay Image.

Codice

1) Inizia 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 ingresso e uscita e connettersi alla rete wireless.

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

3) Nel circuito principale, assicurati innanzitutto che sia presente una connessione wireless, quindi verifica la pressione di un pulsante. Se il pulsante viene premuto, controlla se è trascorso abbastanza tempo per pubblicare 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 con successo 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) Effettua diverse misurazioni e restituisci 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, utilizza la funzione blinkX per far lampeggiare il LED del dispositivo. I lampeggi permettono 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);
        
    }
}

Vedi anche

|