Mundarija:
- 1 -qadam: Uskuna va dasturiy ta'minot spetsifikatsiyasi
- 2 -qadam: Foydalanuvchi ma'lumotlarini saqlash
- 3 -qadam: SPIFFS -da veb -shaklingizni sozlash
- 4 -qadam: vazifalarni rejalashtirish
- 5 -qadam: SHT25 dan harorat va namlik qiymatlarini o'qish
- 6 -qadam: ThingSpeak MQTT API yordamida ThingSpeak -da qiymatlarni nashr etish
- 7 -qadam: Ob -havo haqida elektron pochta xabarnomasi
- 8 -qadam: Umumiy kod
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Kirish
Bulutli ob-havo dasturi, har kuni ob-havo ma'lumotlarini elektron pochta orqali yuborish. Ushbu veb -ilova SHT25 va Adafruit Huzzah ESP8266 yordamida harorat va namlikni o'lchaydi. Bu bizga real vaqtda harorat va namlik ma'lumotlari va soatlik tahlillarni taqdim etadi. Ma'lumotlar ThingSpeak MQTT API yordamida yuboriladi va keyinchalik harorat IFTTT protokoli yordamida belgilangan chegaraga yetganda foydalanuvchiga elektron pochta orqali xabar beramiz. SHT25 - Sensirion tomonidan ishlab chiqarilgan harorat va namlik sensori. SHT25 ± 2% RH atrofida yuqori aniqlik darajasini ta'minlaydi. Uning namlik diapazoni 0 dan 100% gacha, harorat oralig'i -40 dan 125 ° C gacha. Sensorning 8 soniya javob berish vaqti bilan bu ancha ishonchli va tezroq.
Xususiyatlari
- Thing Speak MQTT API yordamida real vaqtda tahlil va statistikani taqdim etadi
- Foydalanuvchiga belgilangan vaqtda IFTTT yordamida elektron pochta orqali bildirishnoma yuboriladi
- Vazifa rejalashtiruvchisi vazifalarni rejalashtirish uchun ishlatiladi, masalan, sensorlardan ma'lumotlarni olish, sensor o'qilishini nashr qilish, MQTT mavzusiga obuna bo'lish.
- Sensor o'qilishini olish uchun I2C protokolidan foydalaniladi, u aniqroq, kengaytirilishi va kengaytirilishi mumkin
- qurilma ishlamayotganda yoki hech qanday vazifaga qo'ng'iroq qilinmasa, uyqu rejimi.
- vazifalarni samarali rejalashtirish muammosiz foydalanishni ta'minlaydi
- Alohida veb -sahifa joylashtirilgan, u erda foydalanuvchi har safar boshqa Wi -Fi tarmoqlariga kirganda qurilmangiz yonib ketmasligi uchun o'z hisob ma'lumotlarini taqdim etishi kerak.
-
SPIFFS bizning veb -sahifamizni saqlash uchun ishlatiladi, shunda bizning kodimiz o'qilishi oson va kamroq bo'ladi
1 -qadam: Uskuna va dasturiy ta'minot spetsifikatsiyasi
Uskuna texnik xususiyatlari
- Adafruit esp8266 Huzzah taxtasi
- Huzzah taxtasi qalqoni
- Sensor moduli SHT25
- I2C kabeli
Dastur xususiyatlari
- Arduino IDE
- IFTTT gapiring
- MQTT API
2 -qadam: Foydalanuvchi ma'lumotlarini saqlash
Bu erda biz harorat va nisbiy namlikning real vaqtdagi qiymatini o'qish va bu qiymatni bulutga joylashtirish uchun SHT25 I2C sensoridan foydalanamiz. Vaqti -vaqti bilan yangilangan sensor qiymatini olish va bu yangilanishlarni bir vaqtning o'zida joylashtirish uchun biz Arduino -ning Vazifalar jadvali kutubxonasidan foydalanamiz. Bulutli operatsiyalar uchun biz ThingSpeak MQTT API dan foydalanmoqdamiz. Keyinchalik biz foydalanuvchiga IFTTT ilovalari yordamida real vaqtda ob-havo hisobotini taqdim etamiz. O'zingizning ob -havo stantsiyangizni yaratish uchun siz quyidagi bosqichlarni bajarishingiz mumkin. Shunday qilib, DIY.
Keyinchalik davom etishdan oldin. Biz foydalanuvchi ma'lumotlarini saqlashimiz kerak. Shu maqsadda biz 192.169.1.4 manzilida veb -serverni joylashtiramiz. Biz veb -shaklimizni SPIFFS -da saqladik. Qurilma ishga tushgandan so'ng, u 60 soniya davomida veb -serverga ega bo'ladi. Foydalanuvchi ushbu bosqichlarni bajarishi kerak.
- AP ESPuser -ga ulaning, bu sizning mavjud Wi -Fi tarmog'ingiz ro'yxatida ko'rsatilgan. Ushbu APga ulaning va "*******" parolini kiriting.
- U ulangandan so'ng, brauzeringizga o'ting, IP 192.168.1.4 kiriting.
- Kirish maydonlariga mahalliy Wi -Fi tarmog'ining SSID va parolini kiriting va SUBMIT kiriting
- Bu ma'lumot EEPROMda saqlanadi
- 60 soniyadan so'ng, qurilma avtomatik ravishda APdan uziladi
- Keyingi safar siz qurilmani yoqsangiz, foydalanuvchi bu tartibni bajarishi shart emas, qurilma avtomatik ravishda EEPROM -dan foydalanuvchi ma'lumotlarini oladi va I2C interfeysidan sensor o'qilishini olishni va bulutga joylashtirishni davom ettiradi.
// --------- AP konfiguratsiyasi ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Kirish nuqtasi sozlanmoqda …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Foydalanuvchi hisob ma'lumotlarini sozlash");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
while (millis ()-APTimer <APInterval) {
server.handleClient ();
}
// **************************** QO'LLANGAN Ildiz ****************** ********* // void handleRoot () {
if (server.hasArg ("ssid") && server.hasArg ("parol"))
{
// Agar barcha shakl maydonlarida ma'lumotlar qo'ng'irog'i bo'lsa
handelSubmit ()
handleSubmit (); }
boshqa {
// Shaklni qayta ko'rsatish
// spiffs tarkibidagi faylni o'qing
Fayl fayli = SPIFFS.open ("/webform.html", "r");
server.streamFile (fayl, "matn/html");
// faylni yopishni unutmang
file.close ();
}}
// ssid va parol argumentlari mavjudligini tekshiring
// Keyin hisob ma'lumotlarini ROMga yozing
ROMwrite (String (server.arg ("ssid")), String (server.arg ("parol"))))
3 -qadam: SPIFFS -da veb -shaklingizni sozlash
SPIFFS
Seriyali periferik interfeysli Flash fayl tizimi yoki qisqacha SPIFFS. Bu SPI flesh-chipli mikrokontrollerlar uchun engil vaznli fayl tizimi. ESP8266 flesh -chipida veb -sahifalaringiz uchun juda ko'p joy mavjud, ayniqsa sizda 1MB, 2MB yoki 4MB versiyasi bo'lsa. Shuningdek, biz veb -sahifamizni Flash tizimida saqladik. Ma'lumotlarni spifflarga yuklash uchun biz bir necha qadamlarni bajarishimiz kerak
- Asbobni yuklab oling:
- Arduino eskizlar katalogida, agar u hali mavjud bo'lmasa, asboblar katalogini yarating
- Asbobni asboblar katalogiga joylashtiring (yo'l /Arduino/tools/ESP8266FS/tool/esp8266fs.jar kabi ko'rinadi)
- Arduino IDE -ni qayta ishga tushiring
- Eskizni oching (yoki yangisini yarating va saqlang)
- Eskiz katalogiga o'ting (eskiz> eskiz papkasini ko'rsatish -ni tanlang)
- Ma'lumotlar katalogini va u erdagi fayl tizimida kerakli fayllarni yarating. Biz webform.html nomi bilan HTML sahifamizni yukladik
- Kengash, port va yopiq ketma -ket monitorni tanlaganingizga ishonch hosil qiling
- Asboblar> ESP8266 Sketch ma'lumot yuklashni tanlang. Bu fayllarni ESP8266 flesh -fayl tizimiga yuklashni boshlashi kerak. Tugatgandan so'ng, IDE holat satrida SPIFFS rasm yuklangan xabari ko'rsatiladi.
Fayl fayli = SPIFFS.open ("/webform.html", "r");
server.streamFile (fayl, "matn/html");
// faylni yopishni unutmang
file.close ();
4 -qadam: vazifalarni rejalashtirish
Ushbu qo'llanmada biz ikkita operatsiyani bajaramiz:
- I2C protokoli yordamida SHT25 ma'lumotlarini o'qing
- ThingSpeak MQTT API yordamida yangilangan ma'lumotlarni bulutga joylashtiring
Bunga erishish uchun biz TaskScheduler kutubxonasidan foydalanmoqdamiz. Biz ikki xil nazorat operatsiyalari bilan bog'liq ikkita vazifani rejalashtirdik. bu quyidagicha amalga oshiriladi
- Vazifa 1 sensor qiymatini o'qish uchun mo'ljallangan, bu vazifa 10 soniya tugashiga qadar 1 soniya davom etadi.
- Vazifa 1 tugashi bilan biz mahalliy Wifi va MQTT brokeriga ulanamiz.
- Endi Vazifa 2 yoqilgan va biz o'chirib qo'ymoqdamiz 1 -topshiriq - Sensor ma'lumotlarini Thing Speak MQTT brokeriga nashr qilish uchun bu vazifa 20 soniya tugashigacha 20 soniya davomida ishlaydi.
- Vazifa 2 tugashi bilan Vazifa 1 yana yoqiladi va Vazifa 2 o'chiriladi. bu erda biz yangilangan qiymatni olamiz va jarayon davom etadi
- Qayta qo'ng'iroq qilinmasa yoki qurilma bo'sh bo'lsa, u "Light Sleep" rejimiga o'tadi va shu bilan quvvatni tejaydi.
// --------- vazifani qayta chaqirish prototipi ------------ //
bo'sh vazifaI2CCallback ();
bo'sh vazifaI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Vazifalar ------------ //
TI2C vazifasi (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
TWiFi vazifasi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// tI2C ni yoqish tI2C.enable ();
5 -qadam: SHT25 dan harorat va namlik qiymatlarini o'qish
I2C-bu ikkita simli interfeys, u asosiy qurilma bilan aloqa qilish uchun faqat ikkita simni ishlatadi. Biri SCL (Serial Clock), ikkinchisi SDA (Serial Data). Har bir qul qurilmasi o'ziga xos manzilga ega. SHT 25 ham 8-bitli manzilga ega va unga 0x44 manzil orqali kirish mumkin. u 8 bitli manzilga ega, u erda 7 bit haqiqiy manzil, LSB bit 0 esa qurilmadan o'qish yoki yozish uchun signal berish uchun ishlatiladi. Agar bit 0 1 ga o'rnatilgan bo'lsa, asosiy qurilma qul I2C qurilmasidan o'qiladi. I2C ancha ishonchli, o'lchovli va tezkor, hatto uning ish rejimlari ko'p, bu esa energiyani ancha tejamkor qiladi.
Biz harorat va namlik qiymatlarini o'qish uchun Wire.h kutubxonasidan foydalanamiz. Bu kutubxona sensor va asosiy qurilma o'rtasida i2c aloqasini osonlashtiradi. 0x44 - SHT25 uchun I2C manzili. SHT25 boshqa rejimda ishlaydi. Buning uchun ma'lumotlar jadvaliga murojaat qilishingiz mumkin. Biz bir martalik ish uchun mos ravishda MSB va LSB sifatida 0x2C va 0x06 dan foydalanamiz
6 -qadam: ThingSpeak MQTT API yordamida ThingSpeak -da qiymatlarni nashr etish
Bulutga harorat va namlik qiymatlarini joylashtirish uchun biz ThingSpeak MQTT API dan foydalanamiz. ThingSpeak - bu IoT platformasi. ThingSpeak - bu bulutda sensor ma'lumotlarini to'plash va saqlashga imkon beradigan bepul veb -xizmat. MQTT-past darajali qurilmalar va sensorlarni ulash uchun IoT tizimlarida ishlatiladigan umumiy protokol. MQTT brokerga va undan qisqa xabarlarni uzatish uchun ishlatiladi. ThingSpeak yaqinda MQTT brokerini qo'shdi, shuning uchun qurilmalar ThingSpeak -ga xabar yuborishi mumkin. ThingSpeak kanalini sozlash uchun siz ushbu postdan foydalanishingiz mumkin
ThingSpeak MQTT
MQTT-bu nashr etish/obuna bo'lish arxitekturasi bo'lib, u asosan tarmoqli kengligi va quvvat cheklangan qurilmalarni simsiz tarmoqlar orqali ulash uchun ishlab chiqilgan. Bu oddiy va engil protokol bo'lib, u TCP/IP soketlari yoki WebSockets orqali ishlaydi. WebSockets orqali MQTT SSL bilan himoyalangan bo'lishi mumkin. Nashr qilish/obuna bo'lish arxitekturasi xabarlarni mijoz qurilmalariga uzatadi, bu qurilmani serverni doimiy ravishda so'roq qilishiga hojat qoldirmaydi. Mijoz - bu brokerga ulanadigan va ma'lumotga kirish uchun mavzularni nashr etishi yoki obuna bo'lishi mumkin bo'lgan har qanday qurilma. Mavzu broker uchun marshrut ma'lumotlarini o'z ichiga oladi. Xabar yubormoqchi bo'lgan har bir mijoz ularni ma'lum bir mavzuda e'lon qiladi va xabar olishni istagan har bir mijoz ma'lum mavzuga obuna bo'ladi.
ThingSpeak MQTT yordamida nashr eting va obuna bo'ling
- Kanal tasmalari kanallarida chop etish /nashr etish /
- Muayyan dala kanallarida nashr qilish/nashr qilish/maydonlar/maydon/
- Kanalga kanalga obuna bo'ling/obuna bo'ling //
- Xususiy kanal kanallariga obuna bo'ling // obuna bo'ling/maydonlar/maydon/
- Kanalning barcha maydonlariga obuna bo'ling. kanallar // obuna bo'lish/maydonlar/feild/
void taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("bu vazifani bajarish vaqti tugadi: / t");
Serial.println (tWiFi.getTimeout ());
agar (! mqttCli.connected ())
{
Serial.println ("Mijoz ulanmagan");
qayta ulanishMQTT ();
}
String topicString = "kanallar/"+String (channelID)+"/nashr qilish/"+String (writeAPIKey);
int topicLength = topicString.length ()+1;
char topicBuffer [topicLength];
topicString.toCharArray (topicBuffer, topicLength+1);
Serial.println (topicBuffer);
String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (nam, 1));
int dataLength = dataString.length ()+1;
bayt dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "chop etilmadi");
mqttCli.endPublish ();
//mqttCli.loop ();
}
7 -qadam: Ob -havo haqida elektron pochta xabarnomasi
Biz IFTTT ilovalaridan foydalanuvchiga real vaqtda ob-havo haqida elektron pochta orqali bildirishnoma yuboramiz. Shunday qilib, biz buni ThingSpeak orqali amalga oshirdik. Biz harorat va namlikning 5 fayli qiymatlarini o'rtacha hisoblaymiz. Qachonki oxirgi yozuvning qiymati o'rtacha qiymatdan katta bo'lsa. Bu "bu issiq kun" elektron pochta xabarini yuboradi. va u o'rtacha qiymatdan past bo'lganda. Bu "Qanday yaxshi kun" elektron pochta xabarini yuboradi. Har kuni soat 10:00 atrofida (IST) bizga elektron pochta orqali bildirishnoma keladi
kanalID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = max (moistData) -min (moistData);
humidValue = 0.1*perHumid+min (moistData);
perTemp = maksimal (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 (veb -o'qish (urlTemp)); lastHumidValue = str2num (veb -o'qish (urlHumid));
agar (lastTempValue
if (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Bu issiq kun.'; veb -yozish (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); oxiri
8 -qadam: Umumiy kod
Umumiy kod
Umumiy kod GitHub omborida mavjud
Cheklovlar
- Ma'lumotlarning katta qismi uchun nashr etish usuli yordamida ma'lumotlarni nashr qilishda ba'zi muammolar mavjud. Bu muammoni hal qilish uchun biz write () funktsiyasidan foydalanmoqdamiz.
- Yangi ma'lumotlarni SPIFFS -ga yuklashdan oldin SPIFFS formatlanishi kerak.
- Delay () funktsiyasidan foydalanmaslik kerak. delay () fonda ishlashga xalaqit beradi. Buning o'rniga, agar kerak bo'lsa, millis () yordamida kechikishlar yarating
Kreditlar
- ESP826WebServer
- Vazifalarni rejalashtiruvchi
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient