Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
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
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
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
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
- 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