Talaan ng mga Nilalaman:
- Hakbang 1: Pagtukoy sa Hardware at Software
- Hakbang 2: Pag-iimbak ng Mga Kredensyal sa Gumagamit
- Hakbang 3: Pagse-set up ng iyong Webform sa SPIFFS
- Hakbang 4: Pag-iiskedyul ng Gawain
- Hakbang 5: Mga Halaga ng Temperatura at Humidity sa Pagbasa Mula sa SHT25
- Hakbang 6: Pag-publish ng Mga Halaga sa ThingSpeak Gamit ang ThingSpeak MQTT API
- Hakbang 7: Pag-abiso sa Email sa Ulat ng Panahon
- Hakbang 8: Pangkalahatang Code
Video: Ulat sa Panahon Gamit ang ThingSpeak MQTT at IFTTT Applets: 8 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Panimula
Isang cloud-based na application ng panahon na nagbibigay ng pang-araw-araw na mga ulat sa panahon bilang abiso sa email. Sinusukat ng web Application na ito ang Temperatura at Humidity gamit ang SHT25 at Adafruit Huzzah ESP8266. Nagbibigay ito sa amin ng data ng Temperatura ng Real-Time at Humidity at oras-oras na analytics. Ipinadala ang data gamit ang ThingSpeak MQTT API at sa paglaon ay nagbibigay kami ng isang abiso sa email sa gumagamit sa tuwing umabot ang temperatura sa nakatalagang threshold gamit ang IFTTT protocol. Ang SHT25 ay isang Temperatura at Humidity Sensor na ginawa ng Sensirion. Ang SHT25 ay nagbibigay ng isang mataas na antas ng kawastuhan sa paligid ng ± 2% RH. Ang saklaw ng Humidity nito ay nasa pagitan ng 0 hanggang 100% at ang saklaw ng Temperatura ay nasa pagitan ng -40 hanggang 125 ° C. Ito ay mas maaasahan at mabilis na may 8 sec ng oras ng pagtugon ng Sensor.
Mga Tampok
- Nagbibigay sa iyo ng real-time na analytics at mga istatistika gamit ang Thing Speak MQTT API
- Ang isang Abiso sa Email ay ibinibigay sa gumagamit sa isang itinalagang oras gamit ang IFTTT
- Ginamit ang Iskedyul ng Gawain 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
- Gumagamit ito ng I2C protocol upang makuha ang pagbabasa ng sensor na mas tumpak, napapalawak at nasusukat
- mode ng pagtulog kapag ang aparato ay idle o walang gawain na callback.
- mabisang pag-iiskedyul ng gawain magbigay ng walang abala na paggamit
- Ang isang magkahiwalay na webpage ay naka-host kung saan ang gumagamit ay dapat magbigay ng kanyang mga kredensyal ng gumagamit upang maiwasan ang pag-flash ng iyong aparato sa tuwing maaabot ng iba pang mga wifi network
-
Ginagamit ang SPIFFS upang iimbak ang aming webpage upang mabasa ang aming code at hindi gaanong malamya
Hakbang 1: Pagtukoy sa Hardware at Software
Pagtukoy sa Hardware
- Adafruit esp8266 Huzzah board
- Huzzah Board Shield
- Module ng SHT25 Sensor
- I2C cable
Pagtukoy ng Software
- Arduino IDE
- IFTTT Thing Speak
- MQTT API
Hakbang 2: Pag-iimbak ng Mga Kredensyal sa Gumagamit
Narito ginagamit namin ang SHT25 I2C sensor upang basahin ang real-time na halaga ng Temperatura at Kamag-anak na Humidity at mai-post ang halagang ito sa cloud. Upang makuha ang na-update na oras ng halaga ng sensor sa oras at i-post ang mga pag-update na ito nang sabay-sabay ginagamit namin ang Library ng Iskedyul ng Gawain ng Arduino. Para sa mga pagpapatakbo ng cloud, gumagamit kami ng ThingSpeak MQTT API. Sa paglaon ay nagbibigay kami ng real-time na ulat sa panahon sa gumagamit na gumagamit ng mga IFTTT applet. Maaari mong sundin ang mga hakbang na ito upang makagawa ng iyong sariling istasyon ng panahon. Kaya, DIY.
Bago magpatuloy pa. Kailangan naming i-save ang mga kredensyal ng gumagamit. Para sa hangaring ito, nagho-host kami ng isang web server sa 192.169.1.4. Naimbak namin ang aming form sa web sa SPIFFS. Kapag nagsimula ang aparato nagho-host ito ng isang web server sa loob ng 60 secs. Dapat sundin ng gumagamit ang mga hakbang na ito.
- Kumonekta sa AP ESPuser, Nakalista ito sa iyong magagamit na listahan ng wifi network. Kumonekta sa AP na ito at ipasok ang password na "*******"
- Kapag nakakonekta ito, Pumunta sa iyong browser ipasok ang IP 192.168.1.4.
- Ipasok ang SSID at password ng iyong lokal na WiFi sa mga patlang ng pag-input at ipasok ang SUBMIT
- Ang kredensyal na ito ay mai-save sa EEPROM
- 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, Awtomatiko na kukuha ng aparato ang mga kredensyal ng gumagamit mula sa EEPROM at magpapatuloy sa pagkuha ng mga pagbabasa ng sensor mula sa I2C Interface at i-post ito sa cloud
// --------- AP config ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Pag-configure ng access point …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Pagse-set up ng Mga Kredensyal sa Gumagamit");
WiFi.softAP (ssidAP, passAP);
server.on ("/", hawakanRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
habang (millis () - APTimer <APInterval) {
server.handleClient ();
}
// ***** ********* // void handleRoot () {
kung (server.hasArg ("ssid") && server.hasArg ("password"))
{
// Kung ang lahat ng mga patlang ng form ay naglalaman ng tawag sa data
handelSubmit ()
hawakanSubmit (); }
iba pa {
// Muling ipakita ang form
// basahin ang file na nilalaman sa mga spiff
File file = SPIFFS.open ("/ webform.html", "r");
server.streamFile (file, "text / html");
// huwag kalimutang isara ang file
file.close ();
}}
// Suriin ang katayuan na mayroon itong mga argumentong naka-save at password
// Pagkatapos isulat ang mga kredensyal sa ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("password")))
Hakbang 3: Pagse-set up ng iyong Webform sa SPIFFS
SPIFFS
Serial Peripheral Interface Flash File System, o SPIFFS para sa maikli. Ito ay isang light-weight file system para sa mga microcontroller na may SPI flash chip. Ang onboard flash chip ng ESP8266 ay may maraming puwang para sa iyong mga web page, lalo na kung mayroon kang bersyon na 1MB, 2MB o 4MB. Naimbak din namin ang aming webpage sa Flash System. Mayroong ilang mga hakbang na kailangan nating sundin upang mag-upload ng data sa mga spiff
- I-download ang tool:
- Sa iyong direktoryo ng Arduino sketchbook, lumikha ng direktoryo ng mga tool kung wala pa ito
- I-unpack ang tool sa direktoryo ng mga tool (ang landas ay magiging hitsura ng /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- I-restart ang Arduino IDE
- Magbukas ng isang sketch (o lumikha ng bago at i-save ito)
- Pumunta sa direktoryo ng sketch (piliin ang Sketch> Show Sketch Folder)
- Lumikha ng isang direktoryo na pinangalanang data at anumang mga file na gusto mo sa file system doon. Na-upload namin ang aming pahina sa HTML na may pangalan na webform.html
- Tiyaking napili mo ang isang board, port, at sarado na Serial Monitor
- Piliin ang Mga Tool> Pag-upload ng Data ng Sketch ng ESP8266. Dapat itong magsimulang mag-upload ng mga file sa ESP8266 flash file system. Kapag tapos na, ipapakita ng status bar ng IDE ang nai-upload na mensahe ng Larawan na SPIFFS.
File file = SPIFFS.open ("/ webform.html", "r");
server.streamFile (file, "text / html");
// huwag kalimutang isara ang file
file.close ();
Hakbang 4: Pag-iiskedyul ng Gawain
Sa tutorial na ito, nagsasagawa kami ng dalawang operasyon:
- Basahin ang data mula sa SHT25 gamit ang I2C protocol
- I-post ang na-update na data sa cloud gamit ang ThingSpeak MQTT API
Upang makamit ito ginagamit namin ang library ng TaskScheduler. Nag-iskedyul kami ng dalawang magkakaibang gawain na tumutukoy sa dalawang magkakaibang operasyon ng kontrol. ginagawa ito tulad ng sumusunod
- 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 timeout nito Kumokonekta kami sa lokal na Wifi at MQTT broker.
- Ngayon ang Gawain 2 ay pinagana at hindi namin pinagana ang Gawain 1 Ang Gawain 2 ay para sa pag-publish ng data ng sensor sa Thing Speak 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 pag-timeout nito ang Gawain 1 ay muling pinagana at ang Task2 ay hindi pinagana. narito ulit, nakakakuha kami ng na-update na halaga at nagpapatuloy ang proseso
- kapag walang callback na tinawag o ang aparato ay walang ginagawa ito ay pupunta sa Light Sleep kaya nakakatipid ng lakas.
// --------- prototype para sa callback ng gawain ------------ //
walang bisa ang taskI2CCallback ();
walang bisa ang taskI2CDisable ();
walang bisa ang taskWiFiCallback ();
walang bisa ang taskWiFiDisable ();
// --------- Mga Gawain ------------ //
Gawain tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Gawain tWiFi (20 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// paganahin ang tI2C tI2C.enable ();
Hakbang 5: Mga Halaga ng Temperatura at Humidity sa Pagbasa Mula sa SHT25
Ang I2C ay isang interface na may dalawang wire na gumagamit lamang ng dalawang wires upang makipag-usap sa master device. Ang isa ay SCL (Serial Clock) at ang isa ay SDA (Serial Data). Ang bawat aparato ng alipin ay may natatanging address. Ang SHT 25 ay mayroon ding 8-bit address at maaaring ma-access ng isang 0x44 address. mayroon itong 8bits ng address kung saan 7 bits ang aktwal na address at habang ang pinaka kanan na LSB bit 0 ay ginagamit upang hudyat na magbasa mula o sumulat sa aparato. Kung ang bit 0 ay nakatakda sa 1 pagkatapos ang master aparato ay basahin mula sa alipin aparato I2C. Ang I2C ay mas maaasahan, nasusukat at mabilis at kahit na mayroon itong maraming mga mode ng pagpapatakbo na ginagawang mas mahusay ang enerhiya
Gumagamit kami ng Wire.h library upang mabasa ang mga halagang temperatura at halumigmig. Pinapadali ng library na ito ang komunikasyon ng i2c sa pagitan ng sensor at ng master device. Ang 0x44 ay ang I2C address para sa SHT25. Nagpapatakbo ang SHT25 sa isang iba't ibang mga mode ng pagpapatakbo. Maaari kang mag-refer sa datasheet para doon. Gumagamit kami ng 0x2C at 0x06 bilang MSB at LSB ayon sa pagkakabanggit para sa solong operasyon ng pagbaril
Hakbang 6: Pag-publish ng Mga Halaga sa ThingSpeak Gamit ang ThingSpeak MQTT API
Para sa pag-post ng aming mga halaga ng temperatura at Humidity sa cloud na ginagamit namin ang ThingSpeak MQTT API. Ang ThingSpeak ay isang IoT platform. Ang ThingSpeak ay isang libreng serbisyo sa web na hinahayaan kang mangolekta at mag-store ng data ng sensor sa cloud. Ang MQTT ay isang pangkaraniwang protokol na ginagamit sa mga IoT system upang ikonekta ang mga aparato at sensor na mababa ang antas. Ginagamit ang MQTT upang ipasa ang mga maikling mensahe sa at mula sa isang broker. Kamakailan ay nagdagdag si ThingSpeak ng isang MQTT broker upang ang mga aparato ay maaaring magpadala ng mga mensahe sa ThingSpeak. Maaari mong sundin ang pamamaraan upang i-set up ang ThingSpeak Channel mula sa post na ito
ThingSpeak MQTT
Ang MQTT ay isang i-publish / mag-subscribe ng arkitektura na pangunahing binuo upang ikonekta ang bandwidth at mga aparato na pinipigilan ng kuryente sa mga wireless network. Ito ay isang simple at magaan na protokol na tumatakbo sa mga socket ng TCP / IP o WebSockets. Ang MQTT sa WebSockets ay maaaring ma-secure sa SSL. Nagbibigay-daan ang arkitektura ng pag-publish / pag-subscribe ng mga mensahe na maitulak sa mga aparato ng client nang hindi kinakailangan ng aparato na patuloy na i-poll ang server. Ang isang kliyente ay anumang aparato na kumokonekta sa broker at maaaring mag-publish o mag-subscribe sa mga paksa upang ma-access ang impormasyon. Ang isang paksa ay naglalaman ng impormasyon sa pagruruta para sa broker. Ang bawat kliyente na nais magpadala ng mga mensahe ay inilalathala ang mga ito sa isang tiyak na paksa, at ang bawat kliyente na nais makatanggap ng mga mensahe ay nag-subscribe sa isang tiyak na paksa
I-publish at Mag-subscribe gamit ang ThingSpeak MQTT
- Pag-publish sa mga channel ng feed feed / publish /
- Pag-publish sa isang partikular na mga channel ng patlang / publish / mga patlang / patlang /
- Mag-subscribe sa mga channel channel field / mag-subscribe //
- Mag-subscribe sa mga pribadong channel ng feed ng channel // mag-subscribe / mga patlang / patlang /
- Mag-subscribe sa lahat ng mga patlang ng isang channel. mga channel // subscribe / field / feild /
walang bisa ang taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("timeout para sa gawaing ito: / t");
Serial.println (tWiFi.getTimeout ());
kung (! mqttCli.connected ())
{
Serial.println ("Hindi konektado ang kliyente");
muling magkonektaMQTT ();
}
String topicString = "channel /" + String (channelID) + "/ publish /" + String (writeAPIKey);
int topicLength = topicString.length () + 1;
char topicBuffer [paksaLength];
topicString.toCharArray (topicBuffer, topicLength + 1);
Serial.println (topicBuffer);
String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (mahalumigmig, 1));
int dataLength = dataString.length () + 1;
byte dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Nai-publish": "Nabigo ang nai-publish");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Hakbang 7: Pag-abiso sa Email sa Ulat ng Panahon
Gumagamit kami ng mga applet na IFTTT upang magbigay ng real-time na ulat sa panahon Email notification sa gumagamit. Kaya, ipinatupad namin ito sa pamamagitan ng ThingSpeak. Kami ay nagre-average ng 5-fay na halaga ng temperatura at halumigmig. Kailan man ang halaga ng huling entry ay mas malaki kaysa sa average na halaga. Ito ay magpapalitaw ng isang abiso sa email na "mainit na araw". at kapag ito ay mas mababa kaysa sa average na halaga. Ito ay magpapalitaw ng isang abiso sa email na "Anong magandang araw". Araw-araw sa bandang 10:00 am (IST) nakakakuha kami ng isang notification sa email
channelID = ******;
iftttURL = 'https://maker.ifttt.com / / *****';
moistureData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = max (moistureData) -min (moistureData);
humidValue = 0.1 * perHumid + min (moistureData);
perTemp = max (tempData) -min (tempData);
tempValue = 0.1 * perTemp + min (tempData);
urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');
urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));
kung (lastTempValue
kung (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Isang mainit na araw.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); magtapos
Hakbang 8: Pangkalahatang Code
Pangkalahatang Code
Magagamit ang pangkalahatang code sa repositoryang GitHub na ito
Mga limitasyon
- Mayroong ilang mga isyu sa pag-publish ng data gamit ang pag-publish ng isang pamamaraan para sa malaking dami ng data. Upang malutas ang isyung ito ay ginagamit namin ang function na magsulat ()
- Dapat i-format ang SPIFFS bago i-upload ang bagong data sa SPIFFS.
- Hindi mo dapat gamitin ang pagpapaandar ng pagkaantala (). ang pagkaantala () ay pumipigil sa pagpapatakbo ng background. Sa halip, lumikha ng mga pagkaantala gamit ang millis () lamang kung kinakailangan
Mga Kredito
- ESP826WebServer
- Tagapag-iskedyul ng Gawain
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Inirerekumendang:
Subukan ang Bare Arduino, Gamit ang Software ng Laro Gamit ang Capacitive Input at LED: 4 na Hakbang
Subukan ang Bare Arduino, Gamit ang Software ng Laro Gamit ang Capacitive Input at LED: " Push-It " Interactive na laro gamit ang isang hubad na Arduino board, walang mga panlabas na bahagi o mga kable na kinakailangan (gumagamit ng isang capacitive 'touch' input). Ipinapakita sa itaas, ipinapakita ang pagtakbo nito sa dalawang magkakaibang board. Push-Mayroon itong dalawang layunin. Upang mabilis na maipakita / v
Loactor Sa Kung Live na Ulat Gamit ang Chat Bot: 4 Hakbang
Loactor With Kung Live na Ulat Gamit ang Chat Bot: Sa pamamagitan ng WhatsApp, kumuha ng mga variable (lokasyon, altitude, presyon …) mula sa NodeMCU tulad ng hiniling o magpadala ng mga utos sa NodeMCU sa pamamagitan ng Twilio's API. Sa loob ng ilang linggo, nakikipagtulungan ako sa Twilio's API, lalo na para sa pagmemensahe ng WhatsApp, at nilikha kahit na
Covid Live na Ulat Gamit ang Raspberry Pi: 6 Hakbang
Covid Live Report Gamit ang Raspberry Pi: Tulad ng alam natin na ang buong mundo ay apektado ng COVID-19 pandemya at halos lahat ay nagtatrabaho mula sa bahay. Dapat nating gamitin ang lahat ng ito sa pinakamainam, upang mapabuti ang aming mga kasanayang panteknikal o magsulat ng ilang magagaling na mga script ng Pythonic. Tingnan natin ang isang simpleng Python
Internet Clock: Ipakita ang Petsa at Oras Gamit ang isang OLED Gamit ang ESP8266 NodeMCU Sa NTP Protocol: 6 na Hakbang
Internet Clock: Display Date and Time With an OLED Gamit ang ESP8266 NodeMCU With NTP Protocol: Kumusta mga tao sa mga itinuturo na ito na magtatayo kami ng isang orasan sa internet na magkakaroon ng oras mula sa internet kaya't ang proyektong ito ay hindi mangangailangan ng anumang RTC upang tumakbo, kakailanganin lamang nito ang isang nagtatrabaho koneksyon sa internet At para sa proyektong ito kailangan mo ng isang esp8266 na magkakaroon ng
Paano Gumawa ng isang Device ng IoT upang Makontrol ang Mga Kagamitan at Subaybayan ang Panahon Gamit ang Esp8266: 5 Mga Hakbang
Paano Gumawa ng isang IoT Device upang Makontrol ang Mga Kagamitan at Subaybayan ang Panahon Gamit ang Esp8266: Ang Internet ng mga bagay (IoT) ay ang inter-networking ng mga pisikal na aparato (tinukoy din bilang " mga konektadong aparato " at " mga smart device "), mga gusali, at iba pang mga item - naka-embed sa electronics, software, sensor, actuators, at