Talaan ng mga Nilalaman:

UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor: 6 na Hakbang
UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor: 6 na Hakbang

Video: UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor: 6 na Hakbang

Video: UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor: 6 na Hakbang
Video: ESP32 Tutorial 3 - Resistor, LED, Bredboard and First Project: Hello LED -ESP32 IoT Learnig kit 2024, Nobyembre
Anonim
UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor
UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor

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 Temperature at Humidity Sensors.
  • 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 at Software
Pagtukoy sa Hardware at Software
  • ESP32 WiFi / BLE
  • Wireless Temperatura at Humidity Sensor

Pagtukoy ng Software

Arduino IDE

Hakbang 2: Lumilikha ng isang Captive Portal

Lumilikha ng isang Captive Portal
Lumilikha ng isang Captive Portal
Lumilikha ng isang Captive Portal
Lumilikha ng isang Captive Portal
Lumilikha ng isang Captive Portal
Lumilikha ng isang Captive Portal

Ang isang bihag na portal ay isang web page na ipinapakita sa mga bagong konektadong mga gumagamit bago sila bigyan ng mas malawak na pag-access sa mga mapagkukunan sa network. Narito naghahatid kami ng tatlong mga web page upang pumili sa pagitan ng DHCP at Mga Setting ng Static IP. maaari nating tukuyin ang IP address sa ESP sa dalawang paraan.

  • Ang DHCP IP address- ito ay isang paraan upang palaganang maitalaga ang IP address sa aparato. Ang default na IP address ng ESP ay 192.168.4.1
  • Ang static IP address- pagtatalaga ng isang permanenteng IP Adress sa aming network device. upang maibigay ang static IP sa aparato na kailangan namin upang tukuyin ang IP address, gateway address, at subnet mask.

Ang unang webpage ay nai-host sa 192.168.1.77. Dito ibinibigay ang Gumagamit sa mga pindutan ng radyo upang pumili sa pagitan ng mga setting ng DHCP at Static IP. Sa susunod na webpage, kailangan naming ibigay ang impormasyong nauugnay sa IP upang magpatuloy pa.

HTML Code

Ang HTML code para sa mga web page ay matatagpuan sa imbakan ng Github. Maaari kang gumamit ng anumang IDE o text editor tulad ng Sublime o notepad ++ upang gumawa ng mga HTML web page.

  • Una Lumikha ng isang HTML webpage na naglalaman ng dalawang mga pindutan ng radyo upang pumili sa pagitan ng DHCP at Mga Setting ng Static IP.
  • Lumikha ngayon ng pindutan upang isumite ang iyong tugon
  • Magbigay ng ilang pangalan sa mga pindutan ng radyo.
  • Gagawin ng klase ng server ng ESP ang mga pangalang ito bilang mga argumento at makukuha ang tugon ng mga pindutan ng radyo gamit ang mga argumentong ito
  • Ipasok ngayon ang isang pindutang 'SUBMIT' upang maipadala ang tugon sa aparato. Sa ibang mga web page, mayroon kaming mga text box.
  • Ibigay ang halaga ng pangalan at uri ng Pag-input sa text box at magdagdag ng isang pindutang isumite sa 'SUBMIT' isumite ang tugon.
  • Lumikha ng isang pindutang 'I-reset' upang i-reset ang nilalaman ng patlang ng teksto.

Hakbang 3: Pagbibigay ng Mga Kredensyal sa WiFi at UbiDots

Pagbibigay ng Mga Kredensyal sa WiFi at UbiDots
Pagbibigay ng Mga Kredensyal sa WiFi at UbiDots

Ang pangunahing problema ay nangyayari habang pinamamahalaan ang mga kredensyal ng WiFi. Kahit na mayroon kaming WiFiMulti library para doon kung saan maaari kaming magbigay ng maraming mga SSID at password sa aparato at makakonekta ang aparato sa magagamit na network. Ngunit, paano kung ang magagamit na network ay wala sa listahan ng WiFiMulti. Ang pag-flashing ng aparatong ESP32 sa lahat ng oras ay hindi isang maaasahang solusyon.

Upang malutas ang problemang ito, nagho-host kami ng isang webpage kung saan maaaring isumite ng gumagamit ang SSID at Password ng magagamit na network. Gumagawa ito tulad ng sumusunod.

  • Ang webpage ay naka-host sa static IP o DHCP IP na pinili ng gumagamit mula sa bihag na portal
  • Naglalaman ang Webpage na ito ng mga patlang ng teksto upang ipasok ang SSID, password, at UBIDOTS token ID upang ikonekta ang aparato sa UbiDots.
  • Ipasok ang SSID at password ng iyong lokal na WiFi sa mga patlang ng pag-input, Ipasok ang token Id ng UbiDot at ipasok ang SUBMIT
  • Ang mga kredensyal na ito ay nai-save sa EEPROM ng ESP32
  • Pagkatapos ng 60-sec na Device ay awtomatikong magdidiskonekta mula sa AP
  • Sa susunod na paganahin mo ang aparato, Hindi kailangang sundin ng gumagamit ang pamamaraang ito, Awtomatikong kukunin ng aparato ang mga kredensyal ng gumagamit mula sa EEPROM at magpapatuloy sa pag-publish ng mga pagbabasa ng sensor sa UbiDots.

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

Narito ginagamit namin ang Wireless Temperature at Humidity 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

Tagapag-iskedyul 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 makakuha ng aktwal na data ng data ng temperatura at Humidity

uint8_t data [29];

data [0] = Serial1.read (); antala (k); // chck for start byte if (data [0] == 0x7E) {habang (! Serial1.available ()); para sa (i = 1; i <29; i ++) {data = Serial1.read (); antala (1); } kung (data [15] == 0x7F) /////// upang suriin kung ang recive data ay tama {kung (data [22] == 1) //////// siguraduhin na ang uri ng sensor ay tama {

halumigmig = ((((data [24]) * 256) + data [25]) /100.0); halumigmig /=10.0; cTempint = ((((uint16_t) (data [26]) << 8) | data [27]); cTemp = (float) cTempint /100.0; cTemp / = 10.0; fTemp = cTemp * 1.8 + 32; fTemp / = 10.0; baterya = random (100, 327); boltahe = baterya / 100; nodeId = data [16];}

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, token ID (Kinukuha namin ang token ID mula sa EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "bagay.ubidots.com";

char payload [100]; char topic [150];

// lumikha ng variable upang mag-imbak ng token ID

String tokenId;

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 karga 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 5: Paggunita sa Data

Ipinapakita ang Data
Ipinapakita ang Data
Ipinapakita ang Data
Ipinapakita ang 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 6: 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 temperatura at Humidity Sensors.
  • pubsubclient
  • UbiDots
  • Tagapag-iskedyul ng Gawain

Inirerekumendang: