Indholdsfortegnelse:

Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT: 7 trin
Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT: 7 trin

Video: Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT: 7 trin

Video: Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT: 7 trin
Video: Vinderforslag i campus arkitektkonkurrence offentliggjort 2024, Juli
Anonim
Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT
Offentliggørelse af trådløse tryksensordata ved hjælp af MQTT

ESP32 ogESP 8266 er meget velkendte SoC inden for IoT. Disse er en slags velsignelse for IoT -projekterne. ESP 32 er en enhed med integreret WiFi og BLE. Bare giv dine SSID, adgangskode og IP -konfigurationer og integrer tingene i skyen. Her i denne instruktive vil vi overveje nogle af de grundlæggende vilkår for IoT som IoT -platform, MQTT, Captive -portaler osv. Så lad os gå igennem det

  • IoT -arkitekturen består i meget enkle ord af en integreret enhed og IoT -platform til at sætte enheden i skyen. Her bruger vi UbiDots IoT -platform til at visualisere sensordata.
  • Håndtering af IP -indstillinger og brugeroplysninger kan være en hovedpine for brugeren. Hvad hvis brugeren vil ændre WiFi -legitimationsoplysningerne? Hvad hvis brugeren vil ændre DHCP/statisk IP -indstillinger? At blinke ESP32 hver gang er ikke pålideligt og ikke engang løsningen på disse problemer. Så vi går gennem den fangede portal for at gemme WiFi -legitimationsoplysninger og andre konfigurationer.
  • MQTT er nu ved at blive et meget almindeligt begreb i IoT -verdenen. det har overgået anmodning og svar (HTTP) fra Publish and Subscribe på grund af den hurtige, robuste og slanke arkitektur.

Her i denne instruktive vil vi demonstrere.

  • Giver WiFi og MQTT -legitimationsoplysninger ved hjælp af Captive Portal.
  • Publicering og abonnement på flere sensordata til UbiDots.
  • Læsning af sensordata fra trådløs tryk- og temperatursensor
  • Hosting af en webformular fra ESP32.
  • Læsning og skrivning fra SPIFFS ESP32.

Trin 1: Hardware- og softwarespecifikation

Hardware specifikation

  • ESP32 WiFi/BLE
  • Trådløs tryk- og temperatursensor

Softwarespecifikation

  • Arduino IDE
  • XCTU
  • Labview Utility

Trin 2: Trådløse tryk- og temperatursensorer

Trådløse tryk- og temperatursensorer
Trådløse tryk- og temperatursensorer
Trådløse tryk- og temperatursensorer
Trådløse tryk- og temperatursensorer
Trådløse tryk- og temperatursensorer
Trådløse tryk- og temperatursensorer

Funktioner

  • Industriel kvalitetssensor Trådløs tryktemperatursensor med lang rækkevidde
  • Driftsområde 0 til 14000 mbar -40 ° til +85 ° C (-40 ° til 185 ° F)
  • Konfigurerbar intern beregning Trykopløsning 0,012 til 0,065 mbar
  • Konfigurerbar intern beregningstemperatur Opløsning 0,002 til 0,012 ° C
  • Nøjagtighed ± 2,5 mbar, ± 2 ° C
  • Output for absolut tryk, relativt tryk og relativ højdeændring
  • 2 Mile Line-of-Sight Range med indbygget antenne
  • Overlegen LOS-rækkevidde på op til 28 Miles med højgevinstantenner
  • Grænseflade til Raspberry Pi, Microsoft® Azure®, Arduino og mere
  • Trådløst netværksnetværk ved hjælp af DigiMesh®

Konfiguration af trådløs tryk- og temperatursensor ved hjælp af Labview Utility og XCTU

Sensoren kører i to tilstande

  • Konfigurationstilstand: Konfigurer Pan -ID, forsinkelse, antal genforsøg osv. Mere om dette er uden for denne instrukss omfang og vil blive forklaret i næste instruerbare.
  • Kørtilstand: Vi kører enheden i Kør -tilstand. Og for at analysere denne værdi bruger vi Labview Utility

Denne Labview UI viser værdierne i flotte grafer. Det viser de nuværende såvel som tidligere værdier. Du kan gå til dette link for at downloade Labview UI. klik på ikonet Kør i landingssidemenuen for at gå til kørselstilstand.

Trin 3: Tilslutning til WiFi

Opretter forbindelse til WiFi
Opretter forbindelse til WiFi
Opretter forbindelse til WiFi
Opretter forbindelse til WiFi

Vi bruger portalen til at gemme WiFi -legitimationsoplysningerne og til at svæve gennem IP -indstillingerne. For en detaljeret introduktion på den fangede portal kan du gå igennem følgende instruerbare.

Den fangede portal giver os mulighed for at vælge mellem statisk og DHCP -indstillinger. Bare indtast legitimationsoplysninger som Statisk IP, Subnetmaske, gateway og Wireless Sensor Gateway bliver konfigureret på denne IP.

En webside hostes, hvor en liste viser tilgængelige WiFi -netværk og der RSSI. Vælg WiFi -netværket og adgangskoden, og indtast Send. Legitimationsoplysningerne gemmes i EEPROM, og IP -indstillingen gemmes i SPIFFS. Mere om dette kan findes i denne instruktive.

Trin 4: Opsætning af UbiDots på ESP32

Opsætning af UbiDots på ESP32
Opsætning af UbiDots på ESP32

Her bruger vi trådløse tryk- og temperatursensorer med ESP 32 -enheden til at få oplysninger om temperatur og luftfugtighed. Vi sender dataene til UbiDots ved hjælp af MQTT -protokollen. MQTT følger en publicerings- og abonnementsmekanisme snarere end anmodning og svar. Det er hurtigere og mere pålideligt end HTTP. Dette fungerer som følger.

  • Vi gør brug af Task Scheduler til at planlægge opgaven som at hente data fra sensorer, offentliggøre sensoraflæsninger, abonnere på MQTT -emne.
  • Inkluder først opgaveplanlægningens overskriftsfiler, dens instans og planlægger opgaverne.
  • Vi har planlagt to opgaver, der refererer til to forskellige kontroloperationer.

#define _TASK_TIMEOUT#inkluderer Planlægger ts; // --------- Opgaver ------------ // Opgave tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Opgave tWiFi (10* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

  • Opgave 1 er til aflæsning af sensorværdien, denne opgave kører i 1 sekund, indtil den når timeout på 10 sekunder.
  • Når opgave1 når sin tid, opretter vi forbindelse til lokal Wifi- og MQTT -mægler.
  • Nu er opgave 2 aktiveret, og vi deaktiverer opgave 1
  • Opgave 2 er til offentliggørelse af sensordata til UbiDots MQTT -mægler, denne opgave kører i 20 sekunder, indtil den når timeout på 20 sekunder
  • Når opgave 2 når sin timeout, er opgave 1 aktiveret igen, og opgave 2 er deaktiveret. Her får vi igen den opdaterede værdi, og processen fortsætter.

Læsning af I2C -sensordata

Vi får en 29-byte ramme fra de trådløse temperatur- og luftfugtighedssensorer. Denne ramme manipuleres for at få de faktiske temperatur- og fugtighedsdata

hvis (Serial1.available ())

{data [0] = Serial1.read (); forsinkelse (k); if (data [0] == 0x7E) {while (! Serial1.available ()); for (i = 1; i <36; i ++) {data = Serial1.read (); forsinkelse (1); } if (data [15] == 0x7F) /////// for at kontrollere, om recive -dataene er korrekte {if (data [22] == 0x06) //////// sørg for at sensortypen er 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); flydebatteri = ((data [18] * 256) + data [19]); flydespænding = 0,00322 * batteri; Serial.print ("Sensornummer"); Serial.println (data [16]); Serial.print ("Sensortype"); 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 tryk:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Relativt tryk:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("meter"); Serial.print ("ADC -værdi:"); Serial.println (batteri); Serial.print ("Batterispænding:"); Seriel.print (spænding); Serial.println ("\ n"); if (spænding <1) {Serial.println ("Tid til udskiftning af batteriet"); }}} andet {for (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); forsinkelse (1); }}}}

Opretter forbindelse til UbiDots MQTT API

Inkluder header -filen til MQTT -processen

#omfatte

definere andre variabler for MQTT som klientnavn, mægleradresse, token -id

#define TOKEN "BBFF-************************************" // Dine Ubidots TOKEN#definere MQTT_CLIENT_NAME "****************************"

char mqttBroker = "things.ubidots.com";

char nyttelast [100]; char emne [150]; // opret variabel for at gemme token ID toke

Trin 5: Publicering af sensoraflæsninger til UbiDots

Udgivelse af sensoraflæsninger til UbiDots
Udgivelse af sensoraflæsninger til UbiDots

Opret variabler for at gemme forskellige sensordata og opret en char -variabel til at gemme emne

#define VARIABLE_LABEL_TEMPF "tempF" // Assosering af variabeletiketten #definere VARIABLE_LABEL_TEMPC "tempC" // Vurder variabeletiketten #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "variable" //

char emne1 [100];

char emne2 [100]; char emne3 [100];

offentliggøre dataene til det nævnte MQTT -emne, vil nyttelasten se ud som {"tempc": {value: "tempData"}}

sprintf (emne1, "%s", ""); sprintf (emne1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (nyttelast, "%s", ""); // Renser nyttelast sprintf (nyttelast, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Tilføjer værdien sprintf (nyttelast, "%s {" værdi / ":%s}", nyttelast, str_cTemp); // Tilføjer værdien sprintf (nyttelast, "%s}", nyttelast); // Luk ordbogens parenteser Serial.println (nyttelast); Serial.println (client.publish (emne1, nyttelast)? "Udgivet": "ikkeudgivet"); // Gør også det samme for andre emner

client.publish () offentliggør dataene til UbiDots

Trin 6: Visualisering af data

Visualisering af data
Visualisering af data
  • Gå til Ubidots og log ind på din konto.
  • Naviger til instrumentbrættet fra fanen Data, der er angivet øverst.
  • Klik nu på ikonet "+" for at tilføje de nye widgets.
  • Vælg en widget fra listen, og tilføj en variabel og enheder.
  • Sensordataene kan visualiseres på instrumentbrættet ved hjælp af forskellige widgets.

Trin 7: Overordnet kode

Over -koden til HTML og ESP32 kan findes i dette GitHub -lager.

Credits

  • ncd ESP32 breakout board.
  • ncd trådløse tryk- og temperatursensorer
  • pubber
  • UbiDots
  • Opgaveplanlægger

Anbefalede: