Taula de continguts:

Publicació de dades del sensor de pressió sense fils mitjançant MQTT: 7 passos
Publicació de dades del sensor de pressió sense fils mitjançant MQTT: 7 passos

Vídeo: Publicació de dades del sensor de pressió sense fils mitjançant MQTT: 7 passos

Vídeo: Publicació de dades del sensor de pressió sense fils mitjançant MQTT: 7 passos
Vídeo: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 2024, De novembre
Anonim
Publicació de dades del sensor de pressió sense fils mitjançant MQTT
Publicació de dades del sensor de pressió sense fils mitjançant MQTT

ESP32 i ESP 8266 són SoC molt familiars en el camp de l'IoT. Es tracta d’una mena de benefici per als projectes IoT. ESP 32 és un dispositiu amb WiFi i BLE integrats. Simplement doneu les vostres configuracions d’SSID, contrasenya i IP i integreu les coses al núvol. Aquí, en aquest instructiu, reflexionarem sobre alguns dels termes bàsics de l'IoT, com ara la plataforma IoT, MQTT, portals captius, etc.

  • L’arquitectura IoT en paraules molt senzilles consisteix en un dispositiu incrustat i una plataforma IoT per posar el dispositiu al núvol. Aquí estem utilitzant la plataforma IoT UbiDots per visualitzar les dades del sensor.
  • Administrar la configuració d’IP i les credencials d’usuari pot ser un mal de cap per a l’usuari. Què passa si l’usuari vol canviar les credencials de WiFi? Què passa si l'usuari vol canviar la configuració de DHCP / IP estàtica? Parpellejar l’ESP32 cada cop no és fiable ni tan sols és la solució per a aquests problemes. Així, passarem pel portal captiu per desar les credencials WiFi i altres configuracions.
  • MQTT s’està convertint en un terme molt comú al món de l’IoT. ha superat les sol·licituds i respostes (HTTP) de Publish and Subscribe a causa de l'arquitectura ràpida, robusta i senzilla.

Aquí, en aquest instructiu, anirem a demostrar.

  • Donar credencials de WiFi i MQTT mitjançant Captive Portal.
  • Publicació i subscripció de diverses dades del sensor a UbiDots.
  • Lectura de les dades del sensor del sensor de pressió i temperatura sense fils
  • Allotjament d’un formulari web des de l’ESP32.
  • Lectura i escriptura des de SPIFFS ESP32.

Pas 1: Especificació de maquinari i programari

Especificació de maquinari

  • ESP32 WiFi / BLE
  • Sensor de pressió i temperatura sense fils

Especificació de programari

  • IDE Arduino
  • XCTU
  • Utilitat Labview

Pas 2: Sensors de pressió i temperatura sense fils

Sensors de pressió i temperatura sense fils
Sensors de pressió i temperatura sense fils
Sensors de pressió i temperatura sense fils
Sensors de pressió i temperatura sense fils
Sensors de pressió i temperatura sense fils
Sensors de pressió i temperatura sense fils

Característiques

  • Sensor de grau industrial Sensor de temperatura de pressió sense fils de llarg abast
  • Rang de funcionament de 0 a 14000 mbar -40 ° a + 85 ° C (-40 ° a 185 ° F)
  • Càlcul intern configurable Resolució de pressió de 0,012 a 0,065 mbar
  • Càlcul intern configurable Resolució de temperatura de 0,002 a 0,012 ° C
  • Precisió ± 2,5 mbar, ± 2 ° C
  • Sortides de pressió absoluta, pressió relativa i altitud relativa
  • Gamma de línia de visió de 2 milles amb antena incorporada
  • Rang LOS superior de fins a 28 milles amb antenes d’alt guany
  • Interfície amb Raspberry Pi, Microsoft® Azure®, Arduino i molt més
  • Xarxes de malla sense fils mitjançant DigiMesh®

Configuració del sensor de pressió i temperatura sense fils mitjançant Labview Utility i XCTU

El sensor funciona en dos modes

  • Mode de configuració: configureu l'identificador de panoràmica, el retard, el nombre de reintents, etc. Més informació sobre això està fora de l'abast d'aquesta instrucció i s'explicarà a la següent instrucció.
  • Mode d'execució: estem executant el dispositiu en mode d'execució. I per analitzar aquest valor estem utilitzant la utilitat Labview

Aquesta interfície d’usuari de Labview mostra els valors en gràfics agradables. Mostra els valors actuals i passats. Podeu anar a aquest enllaç per descarregar la interfície d’usuari de Labview. feu clic a la icona Executa al menú de la pàgina de destinació per anar al mode d'execució.

Pas 3: Connexió a WiFi

Connexió a WiFi
Connexió a WiFi
Connexió a WiFi
Connexió a WiFi

Estem utilitzant el portal captiu per desar les credencials de WiFi i per passar per la configuració d’IP. Per obtenir una introducció detallada al portal captiu, podeu consultar les instruccions següents.

El portal captiu ens ofereix l'opció de triar entre la configuració estàtica i DHCP. Només cal que introduïu les credencials com ara IP estàtica, màscara de subxarxa, passarel·la i la passarel·la del sensor sense fils es configurarà en aquesta IP.

S’està allotjant una pàgina web on hi ha una llista que mostra les xarxes WiFi disponibles i allà el RSSI. Seleccioneu la xarxa WiFi i la contrasenya i introduïu enviar. Les credencials es desaran a EEPROM i la configuració IP es desarà a SPIFFS. Podeu trobar més informació sobre això en aquest instructiu.

Pas 4: Configuració d'UbiDots a ESP32

Configuració d'UbiDots a ESP32
Configuració d'UbiDots a ESP32

Aquí fem servir sensors de pressió i temperatura sense fils amb el dispositiu ESP 32 per obtenir les dades de temperatura i humitat. Enviem les dades a UbiDots mitjançant el protocol MQTT. MQTT segueix un mecanisme de publicació i subscripció més que la sol·licitud i la resposta. És més ràpid i fiable que HTTP. Això funciona de la següent manera.

  • Estem utilitzant Task Scheduler per programar la tasca, com ara obtenir dades de sensors, publicar les lectures del sensor, subscriure’s al tema MQTT.
  • En primer lloc, incloeu els fitxers de capçalera del Planificador de tasques, la seva instància i planifica les tasques.
  • Hem programat dues tasques referents a dues operacions de control diferents.

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

  • La tasca 1 serveix per llegir el valor del sensor que aquesta tasca s'executa durant 1 segon fins que arriba al temps d'espera de 10 segons.
  • Quan la Task1 arribi a la seva data d’espera, ens connectem a l’agent local de Wifi i MQTT.
  • Ara la tasca 2 està activada i estem desactivant la tasca 1
  • La tasca 2 serveix per publicar les dades del sensor al corredor UbiDots MQTT, aquesta tasca s’executa durant 20 segons fins que s’aconsegueix un temps d’espera de 20 segons
  • Quan la tasca 2 arriba al seu temps d'espera, la tasca 1 es torna a activar i la tasca 2 es desactiva. Un cop més, obtenim el valor actualitzat i el procés continua.

Lectura de les dades del sensor I2C

Els sensors de temperatura i humitat sense fils obtenim un marc de 29 bytes. Aquest marc es manipula per obtenir les dades reals de temperatura i humitat

if (Serial1.available ())

{data [0] = Serial1.read (); retard (k); if (dades [0] == 0x7E) {while (! Serial1.available ()); for (i = 1; i <36; i ++) {data = Serial1.read (); retard (1); } if (dades [15] == 0x7F) /////// per comprovar si les dades de recepció són correctes {if (dades [22] == 0x06) //////// assegureu-vos que el tipus de sensor és correcte {int cTemp = ((((dades [24]) * 256) + dades [25])); int16_t abs_pressure = ((((uint16_t) (dades [26]) << 8) | dades [27]) * 0,001); int rlt_pressure = ((((dades [28]) * 256) + dades [29]) * 0,001); int16_t delta_alt = ((((uint16_t) (dades [30]) << 8) | dades [31]) * 0,01); bateria flotant = ((dades [18] * 256) + dades [19]); tensió flotant = 0,00322 * bateria; Serial.print ("Número del sensor"); Serial.println (dades [16]); Serial.print ("Tipus de sensor"); Serial.println (dades [22]); Serial.print ("Versió del firmware"); Serial.println (dades [17]); Serial.print ("Temperatura en centígrads"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Pressió absoluta"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Pressió relativa:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("mesurador"); Serial.print ("valor ADC:"); Serial.println (bateria); Serial.print ("Voltatge de la bateria"); Serial.print (voltatge); Serial.println ("\ n"); if (tensió <1) {Serial.println ("Temps per substituir la bateria"); }}} else {for (i = 0; i <36; i ++) {Serial.print (dades ); Serial.print (","); retard (1); }}}}

Connexió a l'API UbiDots MQTT

Incloeu el fitxer de capçalera per al procés MQTT

#incloure

definiu altres variables per a MQTT com el nom del client, l'adreça del corredor, l'identificador del testimoni

#define TOKEN "BBFF - ************************************" // Els vostres ubidots TOKEN # defineixen MQTT_CLIENT_NAME "****************************"

char mqttBroker = "coses.ubidots.com";

càrrega útil char [100]; tema char [150]; // creeu una variable per emmagatzemar l'identificador de token

Pas 5: Publicació de les lectures del sensor a UbiDots

Publicació de lectures de sensors a UbiDots
Publicació de lectures de sensors a UbiDots

Creeu variables per emmagatzemar diferents dades del sensor i creeu una variable de caràcters per emmagatzemar el tema

#define VARIABLE_LABEL_TEMPF "tempF" // Assignant l'etiqueta de variable # define VARIABLE_LABEL_TEMPC "tempC" // Assignant l'etiqueta de variable #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Assignant l'etiqueta de variable

char topic1 [100];

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

publiqueu les dades al tema MQTT esmentat, la càrrega útil tindrà l'aspecte de {"tempc": {value: "tempData"}}

sprintf (tema1, "% s", ""); sprintf (tema1, "% s% s", "/v1.6/devices/", DEVICE_LABEL); sprintf (càrrega útil, "% s", ""); // Neteja la càrrega útil sprintf (càrrega útil, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Afegeix el valor sprintf (càrrega útil, "% s {" valor / ":% s}", càrrega útil, str_cTemp); // Afegeix el valor sprintf (càrrega útil, "% s}", càrrega útil); // Tanca els claudàtors del diccionari Serial.println (càrrega útil); Serial.println (client.publish (tema1, càrrega útil)? "Published": "no publicat"); // Feu el mateix amb altres temes

client.publish () publica les dades a UbiDots

Pas 6: visualització de les dades

Visualització de les dades
Visualització de les dades
  • Aneu a Ubidots i inicieu la sessió al vostre compte.
  • Aneu al tauler de control des de la pestanya Dades que apareix a la part superior.
  • Ara feu clic a la icona "+" per afegir els ginys nous.
  • Seleccioneu un widget de la llista i afegiu una variable i dispositius.
  • Les dades del sensor es poden visualitzar al tauler de control mitjançant diferents widgets.

Pas 7: Codi general

El codi Over per a HTML i ESP32 es pot trobar en aquest dipòsit de GitHub.

Crèdits

  • tauler de ruptura ESP32 ncd.
  • Sensors de pressió i temperatura sense fils ncd
  • pubsubclient
  • UbiDots
  • Planificador de tasques

Recomanat: