Innholdsfortegnelse:

Publisering av trådløse trykksensordata ved hjelp av MQTT: 7 trinn
Publisering av trådløse trykksensordata ved hjelp av MQTT: 7 trinn

Video: Publisering av trådløse trykksensordata ved hjelp av MQTT: 7 trinn

Video: Publisering av trådløse trykksensordata ved hjelp av MQTT: 7 trinn
Video: Withings - Digital kroppsvekt 2024, Juli
Anonim
Publisering av trådløse trykksensordata ved hjelp av MQTT
Publisering av trådløse trykksensordata ved hjelp av MQTT

ESP32 ogESP 8266 er veldig kjent SoC innen IoT. Dette er en slags velsignelse for IoT -prosjektene. ESP 32 er en enhet med integrert WiFi og BLE. Bare gi SSID, passord og IP -konfigurasjoner og integrer tingene i skyen. Her i denne instruksen vil vi tenke gjennom noen av de grunnleggende begrepene for IoT som IoT -plattform, MQTT, Captive -portaler etc. Så la oss gå gjennom det

  • IoT -arkitekturen består i veldig enkle ord av en innebygd enhet og IoT -plattform for å sette enheten i skyen. Her bruker vi UbiDots IoT -plattform for å visualisere sensordata.
  • Administrering av IP -innstillinger og brukerlegitimasjon kan være en hodepine for brukeren. Hva om brukeren vil endre WiFi -legitimasjonen? Hva om brukeren ønsker å bytte innstillinger for DHCP/statisk IP? Å blinke ESP32 hver gang er ikke pålitelig og ikke engang løsningen på disse problemene. Så vi går gjennom den fangede portalen for å lagre WiFi -legitimasjonen og andre konfigurasjoner.
  • MQTT blir nå et veldig vanlig begrep i IoT -verdenen. den har overgått forespørsel og svar (HTTP) av Publiser og Abonner på grunn av den raske, robuste og slanke arkitekturen.

Her i denne instruksen skal vi demonstrere.

  • Å gi WiFi og MQTT -legitimasjon ved hjelp av Captive Portal.
  • Publisering og abonnement på flere sensordata til UbiDots.
  • Lese sensordata fra trådløs trykk- og temperatursensor
  • Hosting av et webskjema fra ESP32.
  • Lese og skrive fra SPIFFS ESP32.

Trinn 1: Spesifikasjon for maskinvare og programvare

Maskinvarespesifikasjon

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

Programvarespesifikasjon

  • Arduino IDE
  • XCTU
  • Labview Utility

Trinn 2: Trådløse trykk- og temperatursensorer

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

Funksjoner

  • Industriell karakter sensor lang rekkevidde trådløs trykktemperatursensor
  • Driftsområde 0 til 14000 mbar -40 ° til +85 ° C (-40 ° til 185 ° F)
  • Konfigurerbar intern beregning Trykkoppløsning 0,012 til 0,065 mbar
  • Konfigurerbar intern beregningstemperaturoppløsning 0,002 til 0,012 ° C
  • Nøyaktighet ± 2,5 mbar, ± 2 ° C
  • Absolutt trykk, relativt trykk og relativ høydeendringsutgang
  • 2 Mile Line-of-Sight Range med innebygd antenne
  • Overlegen LOS-rekkevidde på opptil 28 Miles med høygevinstantenner
  • Grensesnitt til Raspberry Pi, Microsoft® Azure®, Arduino og mer
  • Trådløst nettverk ved bruk av DigiMesh®

Konfigurere trådløs trykk- og temperatursensor ved hjelp av Labview Utility og XCTU

Sensoren kjøres i to moduser

  • Konfigurasjonsmodus: Konfigurer Pan -ID, forsinkelse, antall forsøk osv. Mer om dette er utenfor omfanget av denne instruksjonsboken og vil bli forklart i neste instruksjonsbaserte.
  • Kjørmodus: Vi kjører enheten i Kjør -modus. Og for å analysere denne verdien bruker vi Labview Utility

Denne Labview UI viser verdiene i fine grafer. Den viser nåværende så vel som tidligere verdier. Du kan gå til denne lenken for å laste ned Labview UI. klikk på Kjør -ikonet fra landingssidemenyen for å gå til kjøremodus.

Trinn 3: Koble til WiFi

Koble til WiFi
Koble til WiFi
Koble til WiFi
Koble til WiFi

Vi bruker portalen for å lagre Wi -Fi -legitimasjonen og for å sveve gjennom IP -innstillingene. For en detaljert introduksjon på portalen, kan du gå gjennom følgende instrukser.

Den fangede portalen gir oss muligheten til å velge mellom statiske og DHCP -innstillinger. Bare skriv inn legitimasjonen som Statisk IP, Nettverksmaske, gateway og Wireless Sensor Gateway vil bli konfigurert på den IP -en.

En webside blir vert der en liste som viser tilgjengelige WiFi -nettverk og det RSSI. Velg WiFi -nettverket og passordet og skriv inn. Legitimasjonen lagres i EEPROM og IP -innstillingen lagres i SPIFFS. Mer om dette finner du i denne instruksjonsboken.

Trinn 4: Konfigurere UbiDots på ESP32

Konfigurere UbiDots på ESP32
Konfigurere UbiDots på ESP32

Her bruker vi trådløse trykk- og temperatursensorer med ESP 32 -enheten for å få data om temperatur og fuktighet. Vi sender dataene til UbiDots ved hjelp av MQTT -protokollen. MQTT følger en publiserings- og abonnementsmekanisme i stedet for forespørsel og svar. Det er raskere og pålitelig enn HTTP. Dette fungerer som følger.

  • Vi bruker Task Scheduler for å planlegge oppgaven som å hente data fra sensorer, publisere sensoravlesningene, abonnere på MQTT -emne.
  • Inkluder først oppgaveplanleggeroverskriftfilene, det er forekomst og planlegger oppgavene.
  • Vi har planlagt to oppgaver som refererer til to forskjellige kontrolloperasjoner.

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

  • Oppgave 1 er for å lese sensorverdien denne oppgaven kjører i 1 sekund til den når timeout på 10 sekunder.
  • Når oppgave1 når sin tid, kobler vi til lokal Wifi- og MQTT -megler.
  • Nå er oppgave 2 aktivert, og vi deaktiverer oppgave 1
  • Oppgave 2 er for å publisere sensordata til UbiDots MQTT -megler, denne oppgaven løper i 20 sekunder til den når timeout på 20 sekunder
  • Når oppgave 2 når sin timeout, er oppgave 1 aktivert igjen og oppgave 2 er deaktivert. Her får vi den oppdaterte verdien igjen, og prosessen fortsetter.

Lese I2C -sensordata

Vi får en 29-byte ramme fra de trådløse temperatur- og fuktighetssensorene. Denne rammen manipuleres for å få de faktiske temperatur- og fuktighetsdataene

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 å sjekke om mottatte data er riktige {if (data [22] == 0x06) //////// kontroller sensortypen er riktig {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); flytebatteri = ((data [18] * 256) + data [19]); flytespenning = 0,00322 * batteri; Serial.print ("Sensornummer"); Serial.println (data [16]); Serial.print ("Sensortype"); Serial.println (data [22]); Serial.print ("Fastvareversjon"); Serial.println (data [17]); Serial.print ("Temperatur i Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Absolutt trykk:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Relativt trykk:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("meter"); Serial.print ("ADC -verdi:"); Serial.println (batteri); Serial.print ("Batterispenning:"); Serial.print (spenning); Serial.println ("\ n"); if (spenning <1) {Serial.println ("Tid til å bytte batteri"); }}} annet {for (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); forsinkelse (1); }}}}

Koble til UbiDots MQTT API

Inkluder topptekstfilen for MQTT -prosessen

#inkludere

definere andre variabler for MQTT som klientnavn, megleradresse, token -ID

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

char mqttBroker = "things.ubidots.com";

røye nyttelast [100]; røye emne [150]; // opprett variabel for å lagre token ID toke

Trinn 5: Publisering av sensoravlesninger til UbiDots

Publisering av sensoravlesninger til UbiDots
Publisering av sensoravlesninger til UbiDots

Lag variabler for å lagre forskjellige sensordata og lag en char -variabel for å lagre emne

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

char topic1 [100];

røye topic2 [100]; røye topic3 [100];

publiser dataene til det nevnte MQTT -emnet, nyttelasten vil se ut som {"tempc": {value: "tempData"}}

sprintf (topic1, "%s", ""); sprintf (topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (nyttelast, "%s", ""); // Renser nyttelast sprintf (nyttelast, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Legger til verdien sprintf (nyttelast, "%s {" verdi / ":%s}", nyttelast, str_cTemp); // Legger til verdien sprintf (nyttelast, "%s}", nyttelast); // Lukker ordbokens parenteser Serial.println (nyttelast); Serial.println (client.publish (topic1, nyttelast)? "Publisert": "ikkepublisert"); // Gjør det samme for andre temaer også

client.publish () publiserer dataene til UbiDots

Trinn 6: Visualisering av dataene

Visualisering av dataene
Visualisering av dataene
  • Gå til Ubidots og logg inn på kontoen din.
  • Naviger til oversikten fra kategorien Data som er oppført øverst.
  • Klikk nå på "+" - ikonet for å legge til de nye widgetene.
  • Velg en widget fra listen, og legg til en variabel og enheter.
  • Sensordataene kan visualiseres på dashbordet ved hjelp av forskjellige widgets.

Trinn 7: Samlet kode

Over -koden for HTML og ESP32 finnes i dette GitHub -depotet.

Studiepoeng

  • ncd ESP32 breakout board.
  • ncd trådløse trykk- og temperatursensorer
  • pubsubclient
  • UbiDots
  • Oppgaveplanlegger

Anbefalt: