Talaan ng mga Nilalaman:
- Hakbang 1: Pagtukoy sa Hardware at Software
- Hakbang 2: Lumilikha ng isang Captive Portal
- Hakbang 3: Pagbibigay ng Mga Kredensyal sa WiFi at UbiDots
- Hakbang 4: Mga Pagbasa ng Sensor sa Pag-publish sa UbiDots
- Hakbang 5: Paggunita sa Data
- Hakbang 6: Pangkalahatang Code
Video: UbiDots-Pagkonekta ng isang ESP32 at Pag-publish ng Maramihang Data ng Sensor: 6 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
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
- ESP32 WiFi / BLE
- Wireless Temperatura at Humidity Sensor
Pagtukoy ng Software
Arduino IDE
Hakbang 2: 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
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
- 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:
Pag-scrap ng Data Sa Isang ESP8266 / ESP32: 7 Mga Hakbang
Pag-scrap ng Data Sa isang ESP8266 / ESP32: Nais mo bang makakuha ng data para sa iyong mga proyekto sa Arduino, ngunit walang pampublikong API para dito? O sa mga kaso tulad ng Instagram API kung saan ang proseso ng pag-setup para sa ay hindi masyadong maginhawa? Sa Instructable na ito ay titingnan namin ang 2 magkakaibang pagpipilian
Paggamit ng Higit sa 4 na Mga Motors - Pag-stack ng Maramihang Mga Motorshield: 3 Mga Hakbang
Paggamit ng Higit sa 4 na Mga Motors - Pag-stack ng Maramihang Mga Motorshields: Maaaring Ituro sa Vibrotactile Sensory Substitution at Augmentation Device (https: //www.instructables.com/id/Vibrotactile-Sens …) ay nagpapakita ng isang paraan kung paano bumuo ng isang aparato na nagsasalin ng isang pandama input sa vibratory stimuli. Ang mga vibratory stimuli na iyon ay
Pag-install ng isang Zalman VF900-Cu Heatsink sa isang Radeon X800 XT Mac Edition para magamit sa isang Apple G5 Tower: 5 Hakbang
Pag-install ng isang Zalman VF900-Cu Heatsink sa isang Radeon X800 XT Mac Edition para sa Paggamit sa isang Apple G5 Tower: Ang karaniwang disclaimer - Ganito ko ito nagawa. Gumana ito para sa akin. Kung sumabog ka sa iyong G5, Radeon X800 XT, o sa iyong bahay, kotse, bangka, atbp. Hindi ako mananagot! Nagbibigay ako ng impormasyon batay sa aking sariling kaalaman at karanasan. Naniniwala ako na ang lahat
Thermometer Na May Temperatura Kaugnay na Kulay sa isang 2 "TFT Display at Maramihang Mga Sensor: 5 Hakbang
Thermometer With Temperature Relative Color sa isang 2 "TFT Display at Maramihang Mga Sensor: Gumawa ako ng isang display na ipinapakita ang mga sukat ng maraming mga sensor ng temperatura. Ang cool na bagay ay ang kulay ng mga halaga na nagbabago sa temperatura: > 75 degree Celcius = RED > 60 > 75 = ORANGE > 40 < 60 = DILAW > 30 < 40
Pag-export ng Maramihang Mga Katawan Bilang Isang STL File sa Fusion 360: 5 Mga Hakbang
Pag-export ng Maramihang Mga Katawan Bilang Isang STL File sa Fusion 360: Nang una akong magsimulang gumamit ng Fusion 360, ang isa sa aking mga paboritong tampok ay ang kadalian ng pagpunta sa 3D na modelo hanggang sa 3D na pag-print. Walang ibang software na nagbigay ng mas maayos na daloy ng trabaho. Napaka-prangka na gawin kung ang iyong modelo ay naglalaman lamang ng isang katawan. Gayunpaman,