Publicera trådlös trycksensordata med hjälp av MQTT: 7 steg
Publicera trådlös trycksensordata med hjälp av MQTT: 7 steg
Anonim
Publicera trådlös trycksensordata med hjälp av MQTT
Publicera trådlös trycksensordata med hjälp av MQTT

ESP32 ochESP 8266 är mycket välkända SoC inom IoT -området. Dessa är en slags välsignelse för IoT -projekten. ESP 32 är en enhet med integrerad WiFi och BLE. Ge bara dina SSID, lösenord och IP -konfigurationer och integrera sakerna i molnet. Här i denna instruerbara, Vi kommer att begrunda några av de grundläggande termerna för IoT som IoT -plattform, MQTT, Captive portaler etc. Så låt oss gå igenom det

  • IoT -arkitekturen i mycket enkla ord består av en inbäddad enhet och IoT -plattform för att placera enheten i molnet. Här använder vi UbiDots IoT -plattform för att visualisera sensordata.
  • Hantera IP -inställningar och användaruppgifter kan vara en huvudvärk för användaren. Vad händer om användaren vill ändra WiFi -uppgifterna? Vad händer om användaren vill ändra DHCP/statiska IP -inställningar? Att blinka ESP32 varje gång är inte pålitligt och inte ens lösningen på dessa problem. Så vi kommer att gå igenom den fångna portalen för att spara WiFi -uppgifterna och andra konfigurationer.
  • MQTT blir nu en mycket vanlig term i IoT -världen. den har överträffat begäran och svar (HTTP) från Publicera och prenumerera på grund av den snabba, robusta och smala arkitekturen.

Här i denna instruerbara kommer vi att demonstrera.

  • Ge WiFi och MQTT -referenser med Captive Portal.
  • Publicera och prenumerera på flera sensordata till UbiDots.
  • Läser sensordata från trådlös tryck- och temperatursensor
  • Hosta ett webbformulär från ESP32.
  • Läsa och skriva från SPIFFS ESP32.

Steg 1: Specifikationer för hårdvara och programvara

Hårdvaruspecifikation

  • ESP32 WiFi/BLE
  • Trådlös tryck- och temperatursensor

Programvaruspecifikation

  • Arduino IDE
  • XCTU
  • Labview Utility

Steg 2: Trådlösa tryck- och temperatursensorer

Trådlösa tryck- och temperatursensorer
Trådlösa tryck- och temperatursensorer
Trådlösa tryck- och temperatursensorer
Trådlösa tryck- och temperatursensorer
Trådlösa tryck- och temperatursensorer
Trådlösa tryck- och temperatursensorer

Funktioner

  • Industriell kvalitet sensor lång räckvidd trådlös trycksensor
  • Arbetsområde 0 till 14000 mbar -40 ° till +85 ° C (-40 ° till 185 ° F)
  • Konfigurerbar intern beräkning Tryckupplösning 0,012 till 0,065 mbar
  • Konfigurerbar intern beräkningstemperatur Upplösning 0,002 till 0,012 ° C
  • Noggrannhet ± 2,5 mbar, ± 2 ° C
  • Absolut tryck, relativ tryck och relativ höjdförändringsutgång
  • 2 Mile-of-Sight Range med inbyggd antenn
  • Överlägsen LOS-räckvidd på upp till 28 Miles med High-gain-antenner
  • Gränssnitt till Raspberry Pi, Microsoft® Azure®, Arduino och mer
  • Trådlöst nätverk med DigiMesh®

Konfigurera trådlös tryck- och temperatursensor med Labview Utility och XCTU

Sensorn körs i två lägen

  • Konfigurationsläge: Konfigurera pan -ID, fördröjning, antal försök etc. Mer om detta ligger utanför räckvidden för denna instruerbara och kommer att förklaras i nästa instruerbara.
  • Körläge: Vi kör enheten i körläge. Och för att analysera detta värde använder vi Labview Utility

Denna Labview UI visar värdena i fina grafer. Den visar både aktuella och tidigare värden. Du kan gå till den här länken för att ladda ner Labview UI. klicka på Kör -ikonen från målsidans meny för att gå till körläge.

Steg 3: Ansluter till WiFi

Ansluter till WiFi
Ansluter till WiFi
Ansluter till WiFi
Ansluter till WiFi

Vi använder portalen för att spara WiFi -uppgifterna och för att sväva genom IP -inställningarna. För en detaljerad introduktion på den fångna portalen kan du gå igenom följande instruerbara.

Den fångade portalen ger oss möjlighet att välja mellan statiska och DHCP -inställningar. Ange bara autentiseringsuppgifterna som statisk IP, nätmask, gateway och Wireless Sensor Gateway kommer att konfigureras på den IP: n.

En webbsida är värd där en lista som visar tillgängliga WiFi -nätverk och där RSSI. Välj WiFi -nätverket och lösenordet och skriv in. Uppgifterna sparas i EEPROM och IP -inställningen sparas i SPIFFS. Mer om detta finns i denna instruerbara.

Steg 4: Konfigurera UbiDots på ESP32

Konfigurera UbiDots på ESP32
Konfigurera UbiDots på ESP32

Här använder vi trådlösa tryck- och temperatursensorer med ESP 32 -enheten för att få data om temperatur och luftfuktighet. Vi skickar data till UbiDots med MQTT -protokollet. MQTT följer en publicerings- och prenumerationsmekanism snarare den begäran och svaret. Det är snabbare och pålitligare än HTTP. Detta fungerar enligt följande.

  • Vi använder Task Scheduler för att schemalägga uppgiften som att hämta data från sensorer, publicera sensoravläsningarna, prenumerera på MQTT -ämne.
  • Inkludera först rubrikfilerna för Task Scheduler, det är instans och schemalägger uppgifterna.
  • Vi har planerat två uppgifter som avser två olika kontrolloperationer.

#define _TASK_TIMEOUT#include Scheduler ts; // --------- Uppgifter ------------ // Uppgift tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Task tWiFi (10* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

  • Uppgift 1 är för avläsning av sensorvärdet, den här uppgiften körs i 1 sekund tills den når timeout på 10 sekunder.
  • När uppgiften1 når sin tid, ansluter vi till lokal Wifi- och MQTT -mäklare.
  • Nu är uppgift 2 aktiverad och vi inaktiverar uppgift 1
  • Uppgift 2 är för att publicera sensordata till UbiDots MQTT -mäklare, den här uppgiften körs i 20 sekunder tills den når timeout på 20 sekunder
  • När uppgift 2 når sin timeout är uppgift 1 aktiverad igen och uppgift 2 inaktiverad. Även här får vi det uppdaterade värdet och processen fortsätter.

Läser av I2C -sensordata

Vi får en ram på 29 byte från trådlösa temperatur- och fuktsensorer. Denna ram manipuleras för att få den faktiska temperaturen och luftfuktighetsdata

if (Serial1.available ())

{data [0] = Serial1.read (); fördröjning (k); if (data [0] == 0x7E) {while (! Serial1.available ()); för (i = 1; i <36; i ++) {data = Serial1.read (); fördröjning (1); } if (data [15] == 0x7F) /////// för att kontrollera om mottagna data är korrekta {if (data [22] == 0x06) //////// se till att sensortypen är korrekt {int cTemp = ((((data [24]) * 256) + data [25])); int16_t abs_pressure = ((((uint16_t) (data [26]) << 8) | data [27])*0,001); int rlt_pressure = ((((data [28]) * 256) + data [29]) * 0,001); int16_t delta_alt = ((((uint16_t) (data [30]) << 8) | data [31])*0,01); flottörbatteri = ((data [18] * 256) + data [19]); flottörspänning = 0,00322 * batteri; Serial.print ("Sensornummer"); Serial.println (data [16]); Serial.print ("Sensortyp"); Serial.println (data [22]); Serial.print ("firmwareversion"); Serial.println (data [17]); Serial.print ("Temperatur i Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Absolut tryck:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Relativt tryck:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("mätare"); Serial.print ("ADC -värde:"); Serial.println (batteri); Serial.print ("Batterispänning:"); Serial.print (spänning); Serial.println ("\ n"); if (spänning <1) {Serial.println ("Dags att byta batteri"); }}} annat {för (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); fördröjning (1); }}}}

Ansluter till UbiDots MQTT API

Inkludera rubrikfilen för MQTT -processen

#omfatta

definiera andra variabler för MQTT som klientnamn, mäklaradress, token -ID

#define TOKEN "BBFF-************************************" // Dina Ubidots TOKEN#definiera MQTT_CLIENT_NAME "****************************"

char mqttBroker = "things.ubidots.com";

röding nyttolast [100]; röding ämne [150]; // skapa variabel för att lagra token ID toke

Steg 5: Publicera sensoravläsningar till UbiDots

Publicera sensoravläsningar till UbiDots
Publicera sensoravläsningar till UbiDots

Skapa variabler för att lagra olika sensordata och skapa en char -variabel för att lagra ämne

#define VARIABLE_LABEL_TEMPF "tempF" // Utvärdera variabeln etikett #definiera VARIABLE_LABEL_TEMPC "tempC" // Tilldela variabeln etikett #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "variabel" //

char topic1 [100];

char topic2 [100]; char topic3 [100];

publicera data till det nämnda MQTT -ämnet nyttolasten kommer att se ut som {"tempc": {value: "tempData"}}

sprintf (topic1, "%s", ""); sprintf (topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (nyttolast, "%s", ""); // Rensar nyttolasten sprintf (nyttolast, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Lägger till värdet sprintf (nyttolast, "%s {" värde / ":%s}", nyttolast, str_cTemp); // Lägger till värdet sprintf (nyttolast, "%s}", nyttolast); // Stänger ordlistans parenteser Serial.println (nyttolast); Serial.println (client.publish (topic1, nyttolast)? "Publicerad": "notpublished"); // Gör samma sak för andra ämnen också

client.publish () publicerar data till UbiDots

Steg 6: Visualisera data

Visualisera data
Visualisera data
  • Gå till Ubidots och logga in på ditt konto.
  • Navigera till instrumentpanelen från fliken Data ovan.
  • Klicka nu på "+" -ikonen för att lägga till de nya widgetarna.
  • Välj en widget från listan och lägg till en variabel och enheter.
  • Sensordata kan visualiseras på instrumentpanelen med hjälp av olika widgets.

Steg 7: Övergripande kod

Över -koden för HTML och ESP32 finns i detta GitHub -arkiv.

Poäng

  • ncd ESP32 breakout board.
  • ncd trådlösa tryck- och temperatursensorer
  • pubsubclient
  • UbiDots
  • Schemaläggaren