Sommario:

UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori: 6 passaggi
UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori: 6 passaggi

Video: UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori: 6 passaggi

Video: UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori: 6 passaggi
Video: Webinar Gratuito: Arduino IoT Cloud e la demoboard per ESP32 2024, Luglio
Anonim
UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori
UbiDots: connessione di un ESP32 e pubblicazione di più dati di sensori

ESP32 e ESP 8266 sono SoC molto familiari nel campo dell'IoT. Questi sono una sorta di vantaggio per i progetti IoT. ESP 32 è un dispositivo con WiFi e BLE integrati. Basta fornire SSID, password e configurazioni IP e integrare le cose nel cloud. Qui in questo tutorial, valuteremo alcuni dei termini di base dell'IoT come la piattaforma IoT, MQTT, i portali Captive ecc. Quindi esaminiamolo

  • L'architettura IoT in parole molto semplici consiste in un dispositivo embedded e una piattaforma IoT per mettere il dispositivo nel cloud. Qui stiamo usando la piattaforma UbiDots IoT per visualizzare i dati del sensore.
  • La gestione delle impostazioni IP e delle credenziali utente può essere un grattacapo per l'utente. Cosa succede se l'Utente vuole cambiare le credenziali WiFi? Cosa succede se l'utente desidera cambiare le impostazioni DHCP/IP statico? Il flashing di ESP32 ogni volta non è affidabile e nemmeno la soluzione per questi problemi. Quindi andremo attraverso il captive portal per salvare le credenziali WiFi e altre configurazioni.
  • MQTT sta diventando un termine molto comune nel mondo IoT. ha superato le richieste e le risposte (HTTP) di Pubblica e Sottoscrivi a causa dell'architettura veloce, robusta e snella.

Qui in questo istruibile, andremo a dimostrare.

  • Fornire credenziali WiFi e MQTT tramite Captive Portal.
  • Pubblicazione e sottoscrizione di più dati Sensor su UbiDots.
  • Lettura dei dati del sensore dai sensori wireless di temperatura e umidità.
  • Hosting di un modulo web da ESP32.
  • Lettura e scrittura da SPIFFS ESP32.

Passaggio 1: specifiche hardware e software

Specifiche hardware e software
Specifiche hardware e software
  • ESP32 WiFi/BLE
  • Sensore di temperatura e umidità wireless

Specifiche del software

Arduino IDE

Passaggio 2: creazione di un Captive Portal

Creazione di un Captive Portal
Creazione di un Captive Portal
Creazione di un Captive Portal
Creazione di un Captive Portal
Creazione di un Captive Portal
Creazione di un Captive Portal

Un captive portal è una pagina Web che viene visualizzata agli utenti appena connessi prima che venga loro concesso un accesso più ampio alle risorse di rete. Qui stiamo servendo tre pagine web per selezionare tra DHCP e Impostazioni IP statiche. possiamo definire l'indirizzo IP per ESP in due modi.

  • Indirizzo IP DHCP: è un modo per assegnare dinamicamente l'indirizzo IP al dispositivo. L'indirizzo IP predefinito dell'ESP è 192.168.4.1
  • L'indirizzo IP statico: assegna un indirizzo IP permanente al nostro dispositivo di rete. per fornire l'IP statico al dispositivo è necessario definire l'indirizzo IP, l'indirizzo del gateway e la subnet mask.

La prima pagina web è ospitata su 192.168.1.77. Qui l'utente ha a disposizione i pulsanti di opzione per selezionare tra le impostazioni DHCP e IP statico. Nella prossima pagina web, dobbiamo fornire le informazioni relative all'IP per procedere ulteriormente.

Codice HTML

Il codice HTML per le pagine Web può essere trovato in questo repository Github. Puoi utilizzare qualsiasi IDE o editor di testo come Sublime o Notepad++ per creare pagine Web HTML.

  • Innanzitutto creare una pagina Web HTML contenente due pulsanti di opzione per scegliere tra DHCP e Impostazioni IP statico.
  • Ora crea il pulsante per inviare la tua risposta
  • Dai un nome ai pulsanti di opzione.
  • La classe del server Web ESP prenderà questi nomi come argomenti e otterrà la risposta dei pulsanti di opzione utilizzando questi argomenti
  • Ora inserisci un pulsante "INVIA" per inviare la risposta al dispositivo. Nelle altre pagine web, abbiamo caselle di testo.
  • Assegna il valore del nome e il tipo di input alla casella di testo e aggiungi un pulsante di invio a "INVIA" invia la risposta.
  • Creare un pulsante "RESET" per ripristinare il contenuto del campo di testo.

Passaggio 3: fornire credenziali WiFi e UbiDots

Fornire credenziali WiFi e UbiDots
Fornire credenziali WiFi e UbiDots

Il problema principale si verifica durante la gestione delle credenziali WiFi. Anche se abbiamo la libreria WiFiMulti per quello in cui possiamo dare più SSID e password al dispositivo e il dispositivo si connetterà alla rete disponibile. Ma cosa succede se la rete disponibile non è nell'elenco WiFiMulti. Il flashing continuo del dispositivo ESP32 non è una soluzione affidabile.

Per risolvere questo problema, stiamo ospitando una pagina Web in cui l'utente può inviare l'SSID e la password della rete disponibile. Funziona come segue.

  • La pagina web è ospitata su IP statico o IP DHCP scelto dall'utente dal captive portal
  • Questa pagina Web contiene campi di testo per inserire SSID, password e ID token UBIDOTS per connettere il dispositivo a UbiDots.
  • Inserisci l'SSID e la password del tuo WiFi locale nei campi di input, inserisci l'ID token di UbiDot e inserisci SUBMIT
  • Queste credenziali vengono salvate nella EEPROM di ESP32
  • Dopo 60 secondi il dispositivo si disconnetterà automaticamente dall'AP
  • La prossima volta che accendi il dispositivo, l'utente non deve seguire questa procedura, il dispositivo recupererà automaticamente le credenziali dell'utente dalla EEPROM e continuerà con la pubblicazione delle letture del sensore su UbiDots.

Passaggio 4: pubblicazione delle letture del sensore su UbiDots

Qui stiamo utilizzando i sensori di temperatura e umidità wireless con il dispositivo ESP 32 per ottenere i dati di temperatura e umidità. Stiamo inviando i dati a UbiDots utilizzando il protocollo MQTT. MQTT segue un meccanismo di pubblicazione e sottoscrizione piuttosto che richiesta e risposta. È più veloce e affidabile di HTTP. Funziona come segue.

  • Utilizziamo l'Utilità di pianificazione per pianificare l'attività come il recupero dei dati dai sensori, la pubblicazione delle letture dei sensori, la sottoscrizione all'argomento MQTT.
  • Innanzitutto, includi i file di intestazione dell'Utilità di pianificazione, la sua istanza e pianifica le attività.
  • Abbiamo programmato due task riferiti a due diverse operazioni di controllo.

#define _TASK_TIMEOUT#include

Programmatore ts;

//---------Tasks------------//Task tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable); Task tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

L'attività 1 serve per leggere il valore del sensore, questa attività viene eseguita per 1 secondo fino a raggiungere il timeout di 10 secondi

  • Quando il Task1 raggiunge il suo timeout Ci stiamo connettendo al Wifi locale e al broker MQTT.

  • Ora l'attività 2 è abilitata e stiamo disabilitando l'attività 1
  • L'attività 2 serve per pubblicare i dati del sensore sul broker UbiDots MQTT questa attività viene eseguita per 20 secondi fino a raggiungere il timeout di 20 secondi
  • Quando il Task2 raggiunge il suo timeout, il Task 1 viene abilitato di nuovo e il Task2 è disabilitato. Anche in questo caso, stiamo ottenendo il valore aggiornato e il processo continua.

Lettura dei dati del sensore I2C

Riceviamo un frame da 29 byte dai sensori wireless di temperatura e umidità. Questo riquadro viene manipolato per ottenere i dati effettivi di temperatura e umidità

uint8_t dati[29];

data[0] = Serial1.read(); ritardo(k); //controlla il byte iniziale if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i< 29; i++) { data = Serial1.read(); ritardo(1); } if(data[15]==0x7F) /////// per verificare se i dati ricevuti sono corretti { if(data[22]==1) //////// verificare il tipo di sensore è corretta {

umidità = ((((data[24]) * 256) + data[25]) /100.0); umidità /=10.0; cTempint = (((uint16_t)(data[26])<<8)| data[27]); cTemp = (mobile)cTempint /100.0; cTemp /= 10.0; fTemp = cTemp * 1,8 + 32; fTemp /= 10.0; batteria = casuale(100, 327); tensione = batteria/100; ID nodo = dati[16];}

Connessione all'API MQTT di UbiDots

Includere il file di intestazione per il processo MQTT

#includere

definire altre variabili per MQTT come nome client, indirizzo broker, ID token (stiamo recuperando l'ID token da EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "things.ubidots.com";

char payload[100];char argomento[150];

//crea una variabile per memorizzare l'ID del token

ID token stringa;

Crea variabili per memorizzare diversi dati del sensore e crea una variabile char per memorizzare l'argomento

#define VARIABLE_LABEL_TEMPF "tempF" // Assegnazione dell'etichetta della variabile#define VARIABLE_LABEL_TEMPC "tempC" // Assegnazione dell'etichetta della variabile #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "umido" // Assegnazione dell'etichetta della variabile

char argomento1[100]; char argomento2[100]; char topic3[100];

pubblica i dati nell'argomento MQTT menzionato, il payload sarà simile a { "tempc": {value: "tempData"}}

sprintf(topic1, "%s", ""); sprintf(topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(carico utile, "%s", ""); // Pulisce il payload sprintf(payload, "{"%s\":", VARIABLE_LABEL_TEMPC); // Aggiunge il valore sprintf(payload, "%s{"value\":%s}", payload, str_cTemp); // Aggiunge il valore sprintf(payload, "%s}", payload); // Chiude le parentesi del dizionario Serial.println(payload); Serial.println(client.publish(topic1, payload) ? "pubblicato": "non pubblicato");

//Fai lo stesso anche per altri argomenti

client.publish() pubblica i dati su UbiDots

Passaggio 5: visualizzazione dei dati

Visualizzazione dei dati
Visualizzazione dei dati
Visualizzazione dei dati
Visualizzazione dei dati
Visualizzazione dei dati
Visualizzazione dei dati
  • Vai su Ubidots e accedi al tuo account.
  • Passa alla Dashboard dalla scheda Dati elencata in alto.
  • Ora fai clic sull'icona "+" per aggiungere i nuovi widget.
  • Seleziona un widget dall'elenco e aggiungi una variabile e dispositivi.
  • I dati del sensore possono essere visualizzati sulla dashboard utilizzando diversi widget.

Passaggio 6: codice generale

Il codice Over per HTML ed ESP32 può essere trovato in questo repository GitHub.

Titoli di coda

  • scheda di breakout ESP32 ncd.
  • ncd Sensori di temperatura e umidità wireless.
  • pubsubcliente
  • UbiDots
  • Agenda

Consigliato: