Sommario:

Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT: 7 passaggi
Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT: 7 passaggi

Video: Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT: 7 passaggi

Video: Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT: 7 passaggi
Video: Shelly PLUS e PRO in Home Assistant tramite MQTT - Come fare! 2024, Dicembre
Anonim
Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT
Pubblicazione dei dati del sensore di pressione wireless utilizzando MQTT

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 dal sensore di pressione e temperatura wireless
  • Hosting di un modulo web da ESP32.
  • Lettura e scrittura da SPIFFS ESP32.

Passaggio 1: specifiche hardware e software

Specifiche hardware

  • ESP32 WiFi/BLE
  • Sensore di pressione e temperatura wireless

Specifiche del software

  • Arduino IDE
  • XCTU
  • Utilità Labview

Passaggio 2: sensori wireless di pressione e temperatura

Sensori di pressione e temperatura wireless
Sensori di pressione e temperatura wireless
Sensori di pressione e temperatura wireless
Sensori di pressione e temperatura wireless
Sensori di pressione e temperatura wireless
Sensori di pressione e temperatura wireless

Caratteristiche

  • Sensore di temperatura senza fili a lungo raggio del sensore del grado industriale
  • Intervallo operativo da 0 a 14000 mbar da -40° a +85°C (da -40° a 185°F)
  • Calcolo interno configurabile Risoluzione pressione da 0,012 a 0,065 mbar
  • Calcolo interno configurabile Risoluzione della temperatura da 0,002 a 0,012 °C
  • Precisione ±2,5 mbar, ±2 °C
  • Uscite di pressione assoluta, pressione relativa e variazione di altitudine relativa
  • Portata in linea di vista di 2 miglia con antenna integrata
  • Gamma LOS superiore fino a 28 miglia con antenne ad alto guadagno
  • Interfaccia per Raspberry Pi, Microsoft® Azure®, Arduino e altro
  • Rete mesh wireless con DigiMesh®

Configurazione del sensore di pressione e temperatura wireless utilizzando l'utilità Labview e XCTU

Il sensore funziona in due modalità

  • Modalità di configurazione: Configurare l'ID Pan, il ritardo, il numero di tentativi, ecc. Ulteriori informazioni su questo vanno oltre lo scopo di questa istruzione e verranno spiegate nella prossima istruzione.
  • Modalità di esecuzione: stiamo eseguendo il dispositivo in modalità di esecuzione. E per analizzare questi valori stiamo usando l'utility Labview

Questa interfaccia utente di Labview mostra i valori in bei grafici. Mostra i valori attuali e passati. Puoi andare a questo link per scaricare l'interfaccia utente di Labview. fai clic sull'icona Esegui dal menu della pagina di destinazione per passare alla modalità di esecuzione.

Passaggio 3: connessione al WiFi

Connessione al WiFi
Connessione al WiFi
Connessione al WiFi
Connessione al WiFi

Stiamo utilizzando il captive portal per salvare le credenziali WiFi e per passare con il mouse sulle impostazioni IP. Per l'introduzione dettagliata sul captive portal, puoi consultare le istruzioni seguenti.

Il captive portal ci offre la possibilità di scegliere tra le impostazioni statiche e DHCP. Basta inserire le credenziali come IP statico, Subnet Mask, gateway e Wireless Sensor Gateway verrà configurato su quell'IP.

Viene ospitata una pagina Web in cui è presente un elenco che mostra le reti WiFi disponibili e RSSI. Seleziona la rete WiFi e la password e inserisci invia. Le credenziali verranno salvate nella EEPROM e l'impostazione IP verrà salvata nello SPIFFS. Maggiori informazioni su questo possono essere trovate in questo istruibile.

Passaggio 4: configurazione di UbiDots su ESP32

Configurazione di UbiDots su ESP32
Configurazione di UbiDots su ESP32

Qui stiamo utilizzando sensori di pressione e temperatura 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 Scheduler 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 è per la lettura del 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à

if (Serial1.available())

{ data[0] = Serial1.read(); ritardo(k); if(data[0]==0x7E) { while (!Serial1.available()); for (i = 1; i< 36; i++) { data = Serial1.read(); ritardo(1); } if(data[15]==0x7F) /////// per verificare se i dati ricevuti sono corretti { if(data[22]==0x06) //////// verificare il tipo di sensore è corretto { int cTemp = ((((data[24]) * 256) + data[25])); int16_t pressione_ass = ((((uint16_t)(data[26])<<8)| data[27])*0.001); int rlt_pressione = ((((data[28]) * 256) + data[29])*0.001); int16_t delta_alt = ((((uint16_t)(data[30])<<8)| data[31])*0.01); batteria tampone = ((data[18] * 256) + data[19]); tensione di mantenimento = 0,00322 * batteria; Serial.print("Numero sensore"); Serial.println(data[16]); Serial.print("Tipo sensore"); Serial.println(data[22]); Serial.print("Versione firmware "); Serial.println(data[17]); Serial.print("Temperatura in gradi Celsius:"); Serial.print(cTemp); Serial.println("C"); Serial.print("Pressione assoluta:"); Serial.println(abs_pressione); Serial.print(" mbar"); Serial.print("Pressione relativa:"); Serial.println(rlt_pressione); Serial.print(" mbar"); Serial.print("Delta Altitudine:"); Serial.println(delta_alt); Serial.print("metro"); Serial.print("Valore ADC:"); Serial.println (batteria); Serial.print("Tensione batteria:"); Serial.print (tensione); Serial.println("\n"); if (voltaggio < 1) { Serial.println("È ora di sostituire la batteria"); } } }else{ for (i = 0; i< 36; i++) { Serial.print(data); Serial.print(", "); ritardo(1); }} } }

Connessione all'API MQTT di UbiDots

Includere il file di intestazione per il processo MQTT

#includere

definire altre variabili per MQTT come il nome del cliente, l'indirizzo del broker, l'ID del token

#define TOKEN "BBFF-************************************" // Il tuo TOKEN Ubidots#define MQTT_CLIENT_NAME "****************************"

char mqttBroker = "things.ubidots.com";

char payload[100]; char argomento[150]; //crea variabile per memorizzare token ID token

Passaggio 5: pubblicazione delle letture dei sensori su UbiDots

Pubblicazione delle letture dei sensori su UbiDots
Pubblicazione delle letture dei sensori su UbiDots

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 6: 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 7: codice generale

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

Titoli di coda

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

Consigliato: