Talaan ng mga Nilalaman:

Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT: 7 Mga Hakbang
Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT: 7 Mga Hakbang

Video: Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT: 7 Mga Hakbang

Video: Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT: 7 Mga Hakbang
Video: Paano mg Wiring ng Motion Sensor | Dagdag Security sa Bahay Mo | Local Electrician 2024, Nobyembre
Anonim
Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT
Pag-publish ng Data ng Sensor ng Pressure ng Wireless Gamit ang MQTT

Ang ESP32 atESP 8266 ay pamilyar sa SoC sa larangan ng IoT. Ito ang uri ng uri ng isang biyaya para sa mga proyekto ng IoT. Ang ES 32 ay isang aparato na may pinagsamang WiFi at BLE. Ibigay lamang ang iyong mga configure ng SSID, password at IP at isama ang mga bagay sa cloud. Dito sa itinuturo na ito, Isasaalang-alang namin ang ilan sa mga pangunahing mga tuntunin ng IoT tulad ng IoT platform, MQTT, Captive portal atbp. Kaya't dumaan tayo dito

  • Ang IoT Architecture sa napaka-simpleng mga salita ay binubuo ng isang naka-embed na aparato at IoT platform upang ilagay ang aparato sa cloud. Narito ginagamit namin ang UbiDots IoT platform upang mailarawan ang data ng sensor.
  • Ang pamamahala ng mga setting ng IP at mga kredensyal ng User ay maaaring maging isang sakit ng ulo sa gumagamit. Paano kung nais ng Gumagamit na baguhin ang mga kredensyal ng WiFi? Paano kung nais ng gumagamit na ilipat ang mga setting ng DHCP / Static IP? Ang pag-flashing ng ESP32 sa tuwina ay hindi maaasahan at hindi kahit na ang solusyon para sa mga problemang ito. Sa gayon ay dadaan kami sa bihag na portal upang mai-save ang mga kredensyal ng WiFi at iba pang mga pagsasaayos.
  • Ang MQTT ay nagiging isang napaka-karaniwang termino sa mundo ng IoT. nalampasan nito ang kahilingan at mga tugon (HTTP) sa pamamagitan ng I-publish at Mag-subscribe dahil sa mabilis, matatag at payat na arkitektura.

Dito sa itinuturo na ito, magpapakita kami.

  • Pagbibigay ng mga kredensyal ng WiFi at MQTT gamit ang Captive Portal.
  • Pag-publish at Pag-subscribe ng maraming data ng Sensor sa UbiDots.
  • Pagbasa ng data ng Sensor mula sa Wireless Pressure at Temperature Sensor
  • Pagho-host ng isang form sa web mula sa ESP32.
  • Pagbasa at Pagsulat mula sa SPIFFS ESP32.

Hakbang 1: Pagtukoy sa Hardware at Software

Pagtukoy sa Hardware

  • ESP32 WiFi / BLE
  • Wireless Pressure at Temperature Sensor

Pagtukoy ng Software

  • Arduino IDE
  • XCTU
  • Utility ng Labview

Hakbang 2: Wireless Pressure at Temperatura Sensors

Wireless Sensure at Temperatura Sensors
Wireless Sensure at Temperatura Sensors
Wireless Sensure at Temperature Sensors
Wireless Sensure at Temperature Sensors
Wireless Sensure at Temperatura Sensors
Wireless Sensure at Temperatura Sensors

Mga Tampok

  • Pang-industriya na Sensor ng Antas ng Long Range Wireless Sensure ng Temperatura ng Presyon
  • Saklaw ng Operating 0 hanggang 14000 mbar -40 ° hanggang + 85 ° C (-40 ° hanggang 185 ° F)
  • Na-configure ang Panloob na Pagkalkula ng Resolusyon sa Pagkalkula 0.012 hanggang 0.065 mbar
  • Na-configure ang Panloob na Kalutas ng Pagkalkula ng Temperatura 0.002 hanggang 0.012 ° C
  • Katumpakan ± 2.5 mbar, ± 2 ° C
  • Ganap na Presyon, Kaugnay na Presyon at Kamag-anak na Baguhin ang mga output
  • 2 Saklaw ng Mile Line-of-Sight na may On-Board Antenna
  • Superior LOS Saklaw ng hanggang sa 28 Milya na may Mga Antas na Mataas ang Gain
  • Interface sa Raspberry Pi, Microsoft® Azure®, Arduino at Higit Pa
  • Wireless Mesh Networking gamit ang DigiMesh®

Ang pag-configure ng Wireless Pressure at Temperature Sensor Gamit ang Labview Utility at XCTU

Tumatakbo ang Sensor sa dalawang mga mode

  • Mode ng Pag-configure: I-configure ang Pan ID, pagkaantala, Bilang ng mga pagsubok muli atbp Higit pa sa ito ay lampas sa saklaw ng pagtuturo na ito at ipapaliwanag sa susunod na maituturo.
  • Run Mode: Pinapatakbo namin ang aparato sa Run mode. At upang pag-aralan ang halagang ito ginagamit namin ang Labview Utility

Ipinapakita ng Labview UI na ito ang mga halaga sa magagandang mga graph. Ipinapakita nito ang kasalukuyang pati na rin ang mga nakaraang halaga. Maaari kang pumunta sa link na ito upang i-download ang Labview UI. mag-click sa Run icon mula sa menu ng landing page upang pumunta sa run mode.

Hakbang 3: Kumokonekta sa WiFi

Kumokonekta sa WiFi
Kumokonekta sa WiFi
Kumokonekta sa WiFi
Kumokonekta sa WiFi

Gumagamit kami ng bihag na portal upang mai-save ang mga kredensyal ng WiFi at upang mag-hover sa pamamagitan ng mga setting ng IP. Para sa detalyadong pagpapakilala sa bihag na portal, maaari kang dumaan sa sumusunod na itinuro.

Binibigyan kami ng portal ng bihag na pagpipilian upang pumili sa pagitan ng mga setting ng Static at DHCP. Ipasok lamang ang mga kredensyal tulad ng Static IP, Subnet Mask, gateway at ang Wireless Sensor Gateway ay mako-configure sa IP na iyon.

Ang isang webpage ay nai-host kung saan ang isang listahan na nagpapakita ng mga magagamit na mga network ng WiFi at doon RSSI. Piliin ang WiFi network at password at ipasok ang isumite. Ang mga kredensyal ay mai-save sa EEPROM at ang setting ng IP ay nai-save sa SPIFFS. Higit pa dito ay matatagpuan sa itinuturo na ito.

Hakbang 4: Pag-set up ng UbiDots sa ESP32

Pag-set up ng UbiDots sa ESP32
Pag-set up ng UbiDots sa ESP32

Narito ginagamit namin ang Wireless Pressure at Temperature Sensors gamit ang aparato na 32 ng ESP upang makuha ang data ng temperatura at Humidity. Ipinapadala namin ang data sa UbiDots gamit ang MQTT protocol. Sinusundan ng MQTT ang mekanismo ng pag-publish at pag-subscribe sa halip ang kahilingan at tugon. Ito ay mas mabilis at maaasahan kaysa sa HTTP. Gumagawa ito tulad ng sumusunod.

  • Ginagawa naming paggamit ang Task scheduler upang Iskedyul ang gawain tulad ng pagkuha ng data mula sa mga sensor, Pag-publish ng mga pagbabasa ng sensor, Pag-subscribe sa paksa ng MQTT.
  • Una, isama ang mga file ng header ng taga-iskedyul ng Task, halimbawa ito at iiskedyul ang mga gawain.
  • Nakaiskedyul kami ng dalawang gawain na tumutukoy sa dalawang magkakaibang operasyon ng kontrol.

#define _TASK_TIMEOUT # isama ang scheduler ts; // --------- Tasks ------------ // Task tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Gawain tWiFi (10 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

  • Ang Gawain 1 ay para sa pagbabasa ng halaga ng sensor na tumatakbo ang gawaing ito nang 1 segundo hanggang sa maabot ang timeout ng 10 sec.
  • Kapag naabot ng Task1 ang oras ng pag-out ay kumokonekta kami sa lokal na Wifi at MQTT broker.
  • Ngayon ang Task 2 ay pinagana at hindi namin pinagana ang Gawain 1
  • Ang gawain 2 ay para sa paglalathala ng data ng sensor sa UbiDots MQTT broker na ang gawain na ito ay tumatakbo sa loob ng 20 segundo hanggang sa maabot ang timeout ng 20 secs
  • Kapag naabot ng Task2 ang oras ng pag-out ang Gawain 1 ay muling pinagana at ang Task2 ay hindi pinagana. Narito muli, nakakakuha kami ng na-update na halaga at nagpapatuloy ang proseso.

Pagbasa ng I2C Sensor Data

Nakakakuha kami ng isang 29-byte na frame mula sa Wireless Temperature at Humidity Sensors. Ang frame na ito ay manipulahin upang makuha ang aktwal na data ng temperatura at Humidity

kung (Serial1.available ())

{data [0] = Serial1.read (); antala (k); kung (data [0] == 0x7E) {habang (! Serial1.available ()); para sa (i = 1; i <36; i ++) {data = Serial1.read (); antala (1); } kung (data [15] == 0x7F) /////// upang suriin kung ang recive data ay tama {kung (data [22] == 0x06) //////// tiyakin na ang uri ng sensor wasto {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); float baterya = ((data [18] * 256) + data [19]); float boltahe = 0.00322 * baterya; Serial.print ("Sensor Number"); Serial.println (data [16]); Serial.print ("Sensor Type"); Serial.println (data [22]); Serial.print ("Bersyon ng Firmware"); Serial.println (data [17]); Serial.print ("Temperatura sa Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Ganap na Presyon:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Kaugnay na Presyon:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("meter"); Serial.print ("Halaga ng ADC:"); Serial.println (baterya); Serial.print ("Boltahe ng Baterya:"); Serial.print (boltahe); Serial.println ("\ n"); kung (boltahe <1) {Serial.println ("Oras upang Palitan Ang Baterya"); }}} iba pa {para sa (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); antala (1); }}}}

Kumokonekta sa UbiDots MQTT API

Isama ang header file para sa proseso ng MQTT

# isama

tukuyin ang iba pang mga variable para sa MQTT tulad ng pangalan ng kliyente, address ng broker, ang token ID

#define TOKEN "BBFF - *********************************" // Ang iyong Ubidots TOKEN # tukuyin MQTT_CLIENT_NAME "****************************"

char mqttBroker = "bagay.ubidots.com";

char payload [100]; paksa ng char [150]; // lumikha ng variable upang maiimbak ang token ng token ID

Hakbang 5: Mga Pagbasa ng Sensor sa Pag-publish sa UbiDots

Mga Pagbasa ng Sensor ng Pag-publish sa UbiDots
Mga Pagbasa ng Sensor ng Pag-publish sa UbiDots

Lumikha ng mga variable upang mag-imbak ng iba't ibang data ng sensor at lumikha ng isang variable ng char upang mag-imbak ng paksa

#define VARIABLE_LABEL_TEMPF "tempF" // Assing the variable label # define VARIABLE_LABEL_TEMPC "tempC" // Assing the variable label #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Assing the variable label

paksa ng char1 [100];

paksa ng char2 [100]; paksa ng char3 [100];

i-publish ang data sa nabanggit na paksa ng MQTT na ang bayad ay magiging katulad ng "" tempc ": {value:" tempData "}}

sprintf (paksa1, "% s", ""); sprintf (paksa1, "% s% s", "/v1.6/devices/", DEVICE_LABEL); sprintf (payload, "% s", ""); // Nililinis ang sprintf ng bayad (payload, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Nagdaragdag ng halaga ng sprintf (payload, "% s {" halaga / ":% s}", payload, str_cTemp); // Nagdaragdag ng halaga ng sprintf (payload, "% s}", payload); // Isinasara ang mga bracket ng diksyunaryo Serial.println (payload); Serial.println (client.publish (topic1, payload)? "Nai-publish": "notpublished"); // Gawin din ito para sa iba pang paksa

nai-publish ng client.publish () ang data sa UbiDots

Hakbang 6: Paggunita sa Data

Ipinapakita ang Data
Ipinapakita ang Data
  • Pumunta sa Ubidots at Mag-login sa iyong account.
  • Mag-navigate sa Dashboard mula sa tab na Data na nakalista sa itaas.
  • Ngayon i-click ang icon na "+" upang idagdag ang mga bagong widget.
  • Pumili ng isang widget mula sa listahan at magdagdag ng isang variable at mga aparato.
  • Ang data ng sensor ay maaaring makita sa dashboard gamit ang iba't ibang mga widget.

Hakbang 7: Pangkalahatang Code

Ang Over code para sa HTML at ESP32 ay matatagpuan sa GitHub repository na ito.

Mga Kredito

  • ncd breakout board ng ESP32.
  • ncd Wireless Pressure at Temperatura Sensors
  • pubsubclient
  • UbiDots
  • Tagapag-iskedyul ng Gawain

Inirerekumendang: