Mündəricat:

ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı: 8 addım
ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı: 8 addım

Video: ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı: 8 addım

Video: ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı: 8 addım
Video: 30 Days IoT Master Class Series | Day1 Smart Home Automation Demo #pantechelearning 2024, Noyabr
Anonim
ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı
ThingSpeak MQTT və IFTTT Appletlərindən istifadə edərək Hava Hesabatı

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 və Proqram Təminatı
Avadanlıq və Proqram Təminatı
Avadanlıq və Proqram Təminatı
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ı

İstifadəçi məlumatlarının saxlanması
İstifadəçi məlumatlarının saxlanması
İstifadəçi məlumatlarının saxlanması
İstifadəçi məlumatlarının 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

  1. Aləti yükləyin:
  2. Arduino eskiz kitabçanızda hələ yoxdursa, alətlər kataloqunu yaradın
  3. Aləti alətlər qovluğuna yığın (yol /Arduino/tools/ESP8266FS/tool/esp8266fs.jar kimi görünəcək)
  4. Arduino IDE -ni yenidən başladın
  5. Bir eskiz açın (və ya yenisini yaradın və qeyd edin)
  6. Eskiz kataloquna gedin (Sketch> Sketch Qovluğunu Göstər seçin)
  7. 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
  8. Bir lövhə, port və qapalı Serial Monitor seçdiyinizə əmin olun
  9. 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

SHT25 -dən İstilik və Rütubət Dəyərlərinin Oxunması
SHT25 -dən İstilik və Rütubət Dəyərlərinin Oxunması

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

ThingSpeak MQTT API -dən istifadə edərək dəyərləri ThingSpeak -də dərc etmək
ThingSpeak MQTT API -dən istifadə edərək dəyərləri ThingSpeak -də dərc etmək

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

Hava Hesabatı E -poçt Bildirişi
Hava Hesabatı E -poçt Bildirişi
Hava Hesabatı E -poçt Bildirişi
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
Ümumi Kod
Ümumi Kod
Ümumi Kod
Ü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ə: