Mündəricat:
- Addım 1: Avadanlıq və Proqram Təminatı
- Addım 2: İstifadəçi Etimadnaməsinin Saxlanması
- Addım 3: Veb Formatınızı SPIFFS -də qurun
- Addım 4: Vəzifə Planlaması
- Addım 5: SHT25 -dən İstilik və Rütubət Dəyərlərini Oxuyun
- Addım 6: ThingSpeak MQTT API -dən istifadə edərək dəyərləri ThingSpeak -də yayımlayın
- Addım 7: Hava Hesabatı E -poçt Bildirişi
- Addım 8: Ümumi Kod
Video: ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı: 8 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Giriş
Gündəlik hava məlumatlarını e-poçt bildirişi olaraq təqdim edən bulud əsaslı bir hava tətbiqi. Bu veb tətbiqi SHT25 və Adafruit Huzzah ESP8266 istifadə edərək İstilik və Rütubəti ölçür. Bizə Real Zamanlı Temperatur və Nəmlik məlumatları və saatlıq analitiklər təqdim edir. Məlumatlar ThingSpeak MQTT API istifadə edərək göndərilir və daha sonra temperatur IFTTT protokolu ilə təyin olunmuş həddə çatdıqda istifadəçiyə bir e -poçt bildirişi təqdim edirik. SHT25, Sensirion tərəfindən hazırlanan İstilik və Nəmlik Sensorlarıdır. SHT25, ± 2% RH ətrafında yüksək dəqiqlik təmin edir. Rütubət aralığı 0 ilə 100% arasında, temperatur aralığı -40 ilə 125 ° C arasındadır. 8 saniyəlik Sensor cavab müddəti ilə daha etibarlı və sürətlidir.
Xüsusiyyətləri
- Thing Speak MQTT API istifadə edərək sizə real vaxt təhlili və statistikası təqdim edir
- İstifadəçiyə təyin edilmiş vaxtda IFTTT istifadə edərək bir e -poçt bildirişi verilir
- Tapşırıq Planlayıcısı, sensorlardan məlumat əldə etmək, sensor oxunuşlarını dərc etmək, MQTT mövzusuna abunə olmaq kimi işləri planlaşdırmaq üçün istifadə olunur.
- Sensorun daha dəqiq, genişləndirilə bilən və ölçeklenebilir olması üçün I2C protokolundan istifadə edir
- cihaz boş qaldıqda və ya heç bir tapşırıq geri çağırılmadıqda yuxu rejimi.
- effektiv tapşırıq cədvəli əngəlsiz istifadəni təmin edir
- Ayrı bir veb səhifəsi, istifadəçinin digər wifi şəbəkələrinə çatdıqda cihazınızın hər dəfə yanıb -sönməməsi üçün istifadəçi məlumatlarını təqdim etməsi lazım olduğu yerdə yerləşdirilir.
- Kodumuzu oxunaqlı və daha az yöndəmsiz etmək üçün SPIFFS veb səhifəmizi saxlamaq üçün istifadə olunur
Addım 1: Avadanlıq və Proqram Təminatı
Avadanlıq spesifikasiyası
- Adafruit esp8266 Huzzah lövhəsi
- Huzzah lövhəsi qalxanı
- SHT25 Sensor modulu
- I2C kabel
Proqram Təminatı
- Arduino IDE
- IFTTT Danışan şey
- MQTT API
Addım 2: İstifadəçi Etimadnaməsinin Saxlanması
Burada temperatur və nisbi rütubətin real vaxt dəyərini oxumaq və bu dəyəri buludda yerləşdirmək üçün SHT25 I2C sensorundan istifadə edirik. Zaman zaman yenilənmiş sensor dəyərini əldə etmək və bu yeniləmələri eyni vaxtda yerləşdirmək üçün Arduino -nun Tapşırıq Planlayıcısı Kitabxanasından istifadə edirik. Bulud əməliyyatları üçün ThingSpeak MQTT API -dən istifadə edirik. Daha sonra IFTTT tətbiqetmələrindən istifadə edərək istifadəçiyə real vaxt hava hesabatı təqdim edirik. Öz hava stansiyanızı etmək üçün bu addımları izləyə bilərsiniz. Beləliklə, DIY.
Daha irəli getməzdən əvvəl. İstifadəçi məlumatlarını saxlamalıyıq. Bu məqsədlə 192.169.1.4 ünvanında bir veb serverə ev sahibliyi edirik. Veb formamızı SPIFFS -də saxladıq. Cihaz işə salındıqdan sonra 60 saniyə ərzində bir veb serverə ev sahibliyi edir. İstifadəçi bu addımları yerinə yetirməlidir.
- AP ESPuser -ə qoşulun, bu, mövcud wifi şəbəkə siyahınızdadır. Bu AP -ə qoşulun və "*******" parolunu daxil edin
- Bağlandıqdan sonra brauzerinizə gedin IP 192.168.1.4.
- Giriş sahələrinə yerli WiFi -nin SSID və parolunu daxil edin və SUBMIT daxil edin
- Bu etimadnamələr EEPROM -da saxlanılacaq
- 60 saniyədən sonra cihaz avtomatik olaraq AP-dən ayrılacaq
- Növbəti dəfə cihazı açdığınızda, istifadəçinin bu proseduru yerinə yetirməsi lazım deyil, cihaz avtomatik olaraq EEPROM -dan istifadəçi məlumatlarını alacaq və I2C İnterfeysindən sensor oxunuşlarını alaraq buluda göndərməyə davam edəcək.
// --------- AP konfiqurasiyası ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Giriş nöqtəsi konfiqurasiya olunur …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("İstifadəçi Etimadnaməsinin Qurulması");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = milis ();
while (millis ()-APTimer <APInterval) {
server.handleClient ();
}
// **************************** KÖLƏK QULU ****************** ********* // void handleRoot () {
əgər (server.hasArg ("ssid") && server.hasArg ("parol"))
{
// Bütün forma sahələrində məlumat zəngi varsa
handelSubmit ()
handleSubmit (); }
başqa {
// Formanı yenidən göstərin
// spiffs -də olan faylı oxuyun
Fayl faylı = SPIFFS.open ("/webform.html", "r");
server.streamFile (fayl, "text/html");
// faylı bağlamağı unutmayın
file.close ();
}}
// ssid və parol arqumentlərinə malik olduğunu yoxlayın
// Sonra etimadnaməsini ROM -a yaz
ROMwrite (String (server.arg ("ssid")), String (server.arg ("parol"))))
Addım 3: Veb Formatınızı SPIFFS -də qurun
SPIFFS
Serial Periferik İnterfeys Flash Fayl Sistemi və ya qısa olaraq SPIFFS. SPI flaş çipi olan mikro nəzarətçilər üçün yüngül bir fayl sistemidir. ESP8266 -nın daxili flaş çipində, xüsusən 1MB, 2MB və ya 4MB versiyanız varsa, veb səhifələriniz üçün çox yer var. Veb səhifəmizi də Flash Sistemində saxladıq. Məlumatları spifflərə yükləmək üçün izləməli olduğumuz bir neçə addım var
- Aləti yükləyin:
- Arduino eskiz kitabçanızda hələ yoxdursa, alətlər kataloqunu yaradın
- Aləti alətlər qovluğuna yığın (yol /Arduino/tools/ESP8266FS/tool/esp8266fs.jar kimi görünəcək)
- Arduino IDE -ni yenidən başladın
- Bir eskiz açın (və ya yenisini yaradın və qeyd edin)
- Eskiz kataloquna gedin (Sketch> Sketch Qovluğunu Göstər seçin)
- Məlumat adlanan bir qovluq yaradın və oradakı fayl sistemində istədiyiniz faylları yaradın. Webform.html adı ilə HTML səhifəmizi yüklədik
- Bir lövhə, port və qapalı Serial Monitor seçdiyinizə əmin olun
- Alətlər> ESP8266 Sketch Məlumat Yükləmə seçin. Bu, faylları ESP8266 flash fayl sisteminə yükləməyə başlamalıdır. Tamamlandıqda, IDE vəziyyət çubuğunda SPIFFS Şəkil Yüklənmiş mesajı görünəcək.
Fayl faylı = SPIFFS.open ("/webform.html", "r");
server.streamFile (fayl, "text/html");
// faylı bağlamağı unutmayın
file.close ();
Addım 4: Vəzifə Planlaması
Bu təlimatda iki əməliyyatı yerinə yetiririk:
- I2C protokolundan istifadə edərək SHT25 -dən məlumatları oxuyun
- ThingSpeak MQTT API istifadə edərək yenilənmiş məlumatları buluda göndərin
Bunu etmək üçün TaskScheduler kitabxanasından istifadə edirik. İki fərqli nəzarət əməliyyatına əsaslanan iki fərqli vəzifə təyin etdik. bu aşağıdakı kimi aparılır
- Tapşırıq 1, sensorun dəyərini oxumaq üçündür, bu tapşırıq 10 saniyəlik fasiləyə çatana qədər 1 saniyə ərzində işləyir.
- Vəzifə1 vaxt aşımına çatanda yerli Wifi və MQTT brokerinə qoşuluruq.
- İndi Task 2 aktivdir və Task 1 -i deaktiv edirik, Sensor məlumatlarını Thing Speak MQTT brokerinə yayımlamaq üçün bu tapşırıq 20 saniyəlik fasiləyə çatana qədər 20 saniyə ərzində işləyir.
- Tapşırıq 2 zaman aşımına çatanda Task 1 yenidən aktiv edilir və Task2 deaktiv edilir. burada yenə də yenilənmiş dəyəri alırıq və proses davam edir
- heç bir geri zəng edilmədikdə və ya cihaz boş qaldıqda Yüngül Yuxuya gedir və beləliklə enerjiyə qənaət edir.
// --------- tapşırıq geri çağırma prototipi ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Tapşırıqlar ------------ //
Tapşırıq tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Tapşırıq tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// tI2C imkan tI2C.enable ();
Addım 5: SHT25 -dən İstilik və Rütubət Dəyərlərini Oxuyun
I2C, əsas cihazla əlaqə yaratmaq üçün yalnız iki teldən istifadə edən iki telli bir interfeysdir. Biri SCL (Serial Clock), digəri SDA (Serial Data). Hər bir qul cihazının unikal ünvanı var. SHT 25 də 8 bitlik bir ünvana malikdir və ona 0x44 ünvanla daxil olmaq mümkündür. 7 bitin həqiqi ünvan olduğu 8 bit ünvana malikdir və ən sağdakı LSB bit 0 cihazdan oxumaq və ya yazmaq üçün siqnal vermək üçün istifadə olunur. Bit 0 1 -ə təyin olunarsa, master cihaz slave I2C cihazından oxuyacaq. I2C daha etibarlı, ölçeklenebilir və sürətlidir və hətta daha çox enerji qənaət edən bir çox iş rejiminə malikdir.
İstilik və rütubət dəyərlərini oxumaq üçün Wire.h kitabxanasından istifadə edirik. Bu kitabxana, sensor və əsas cihaz arasında i2c əlaqəsini asanlaşdırır. 0x44, SHT25 üçün I2C ünvanıdır. SHT25 fərqli bir iş rejimində işləyir. Bunun üçün məlumat cədvəlinə müraciət edə bilərsiniz. Bir vuruş əməliyyatı üçün sırasıyla MSB və LSB olaraq 0x2C və 0x06 istifadə edirik
Addım 6: ThingSpeak MQTT API -dən istifadə edərək dəyərləri ThingSpeak -də yayımlayın
Buludda temperatur və rütubət dəyərlərimizi yerləşdirmək üçün ThingSpeak MQTT API -dən istifadə edirik. ThingSpeak bir IoT platformasıdır. ThingSpeak, buludda sensor məlumatlarını toplamağa və saxlamağa imkan verən pulsuz bir veb xidmətidir. MQTT, aşağı səviyyəli cihazları və sensorları birləşdirmək üçün IoT sistemlərində istifadə olunan ümumi bir protokoldur. MQTT bir brokerə qısa mesajlar ötürmək üçün istifadə olunur. ThingSpeak, cihazların ThingSpeak -a mesaj göndərə bilməsi üçün bu yaxınlarda bir MQTT brokerini əlavə etdi. ThingSpeak Kanalı qurmaq üçün bu yazıdan istifadə edə bilərsiniz
ThingSpeak MQTT
MQTT, əsasən simsiz şəbəkələr üzərindən bant genişliyi və gücü məhdud cihazları birləşdirmək üçün hazırlanmış bir nəşr/abunə arxitekturasıdır. TCP/IP yuvaları və ya WebSockets üzərində işləyən sadə və yüngül bir protokoldur. WebSockets üzərindən MQTT SSL ilə təmin edilə bilər. Nəşr/abunə arxitekturası, serverin davamlı olaraq sorğu keçirməsinə ehtiyac duymayan cihaz olmadan mesajların müştəri cihazlarına göndərilməsinə imkan verir. Müştəri, brokerə qoşulan və məlumat əldə etmək üçün mövzuları nəşr edə və ya abunə ola bilən hər hansı bir cihazdır. Bir mövzu broker üçün marşrutlaşdırma məlumatlarını ehtiva edir. Mesaj göndərmək istəyən hər bir müştəri onları müəyyən bir mövzuya göndərir və mesaj almaq istəyən hər bir müştəri müəyyən bir mövzuya abunə olur.
ThingSpeak MQTT istifadə edərək nəşr edin və abunə olun
- Kanal lent kanallarında yayımlayın /yayımlayın /
- Müəyyən bir sahə kanallarında yayımlama/dərc/sahələr/sahə/
- Sahə kanallarına abunə olun/abunə olun //
- Şəxsi kanal kanallarına abunə olun // abunə olun/sahələr/sahə/
- Bir kanalın bütün sahələrinə abunə olun. kanallar // abunə olun/sahələr/feild/
void taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("bu tapşırıq üçün zaman aşımı: / t");
Serial.println (tWiFi.getTimeout ());
əgər (! mqttCli.connected ())
{
Serial.println ("Müştəri bağlı deyil");
yenidən bağlayın MQTT ();
}
String topicString = "kanallar/"+String (channelID)+"/dərc etmək/"+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 (nəmli, 1));
int dataLength = dataString.length ()+1;
byte dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "nəşr olunmadı");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Addım 7: Hava Hesabatı E -poçt Bildirişi
İstifadəçiyə real vaxt hava hesabatı e-poçt bildirişi vermək üçün IFTTT tətbiqlərindən istifadə edirik. Beləliklə, bunu ThingSpeak vasitəsilə həyata keçirdik. İstilik və rütubətin 5 fay dəyərlərini ortalamaqdayıq. Son girişin dəyəri orta dəyərdən çox olduqda. "İsti bir gündür" e -poçt bildirişinə səbəb olacaq. və orta dəyərdən az olduqda. "Nə gözəl gündür" e -poçt bildirişinə səbəb olacaq. Hər gün saat 10:00 (IST) ətrafında bir e -poçt bildirişi alacağıq
channelID = ******;
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 = maksimum (tempData) -min (tempData);
tempValue = 0.1*perTemp+dəq (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));
əgər (lastTempValue
if (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'İsti bir gündür.'; web yazma (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); bitmək
Addım 8: Ümumi Kod
Ümumi Kod
Ümumi kod bu GitHub deposunda mövcuddur
Məhdudiyyətlər
- Write () funksiyasından istifadə etdiyimiz bu problemi həll etmək üçün məlumatların böyük bir hissəsi üçün bir metodu dərc etməklə məlumatların nəşr edilməsində bəzi problemlər var.
- Yeni məlumatları SPIFFS -ə yükləməzdən əvvəl SPIFFS formatlanmalıdır.
- Delay () funksiyasından istifadə etməməlisiniz. gecikmə () arxa planda işləməyə mane olur. Bunun əvəzinə, yalnız lazım olduqda millis () istifadə edərək gecikmələr yaradın
Kreditlər
- ESP826WebServer
- Vəzifə Planlayıcısı
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Tövsiyə:
Raspberry Pi istifadə edərək Covid Canlı Hesabatı: 6 addım
Moruq Pi ilə Covid Canlı Hesabatı: Bildiyimiz kimi bütün dünya COVID-19 pandemiyasından təsirlənir və demək olar ki, hamı evdən işləyir. Texniki bacarıqlarımızı artırmaq və ya yaxşı Pythonic skriptləri yazmaq üçün hamımız bu müddətdən ən yaxşı şəkildə istifadə etməliyik. Sadə bir Pythona baxaq
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: 4 addım
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: Salam, mən Rithikəm. Telefonunuzdan istifadə edərək internetə nəzarət edən bir led quracağıq. Arduino IDE və Blynk kimi proqramlardan istifadə edəcəyik. Bu çox sadədir və uğur qazansanız istədiyiniz qədər elektron komponenti idarə edə bilərsiniz
NodeMCU və IOT Thingspeak istifadə edərək hava monitorinq sistemi: 4 addım
NodeMCU və IOT Thingspeak istifadə edərək Hava İzləmə Sistemi: ThingSpeak, Avadanlıq cihazlarından və Sensorlardan məlumatları saxlamaq və almaq üçün Açıq Mənbə IoT tətbiqi və API-dir. Ünsiyyət üçün İnternet və ya LAN üzərindən HTTP Protokolundan istifadə edir. MATLAB analitikası təhlil və görüntüləmək üçün daxil edilmişdir
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək sürətlənməni izləyin: 6 addım
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək Sürətləndirməni izləyin: Sürətləndirmə sonsuzdur, düşünürəm ki, Fizikanın bəzi qanunlarına görə. Sahilə çıxan ən sürətli məxluq, bir anda ən yüksək sürətindən istifadə edərək ovunu tutur
Raspberry Pi və Weewx istifadə edərək Acurite 5 -də 1 Hava İstasyonu (digər Hava İstasyonları Uyğundur): 5 Addım (Şəkillərlə)
Raspberry Pi və Weewx istifadə edərək Acurite 5 -də 1 Hava İstasyonu (digər Hava İstasyonları Uyğundur): Acurite 5 -i 1 hava stansiyasından alanda evdən kənarda olduğum zaman havanı yoxlamaq istəyirdim. Evə gəlib qurduqda ya ekranı kompüterə bağlamalı olduğumu, ya da ağıllı mərkəzini almalı olduğumu başa düşdüm