Innehållsförteckning:

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

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

Video: Publicera trådlös trycksensordata med hjälp av MQTT: 7 steg
Video: IT Ninjas: Mastering Network Troubleshooting in Windows 2024, November
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

Rekommenderad: