İçindekiler:

ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım
ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım

Video: ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım

Video: ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım
Video: ESP8266 ve OLED ile MQTT Termostat - 2 (Anlık Hava durumu ve Saat Özelliği) 2024, Kasım
Anonim
ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu
ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu

Tanıtım

E-posta bildirimi olarak günlük hava durumu raporları sağlayan bulut tabanlı bir hava durumu uygulaması. Bu web Uygulaması, SHT25 ve Adafruit Huzzah ESP8266 kullanarak Sıcaklık ve Nemi ölçer. Bize Gerçek Zamanlı Sıcaklık ve Nem verileri ve saatlik analitik sağlar. Veriler ThingSpeak MQTT API kullanılarak gönderilir ve daha sonra IFTTT protokolü kullanılarak sıcaklık atanan eşiğe ulaştığında kullanıcıya bir e-posta bildirimi sağlarız. SHT25, Sensirion tarafından üretilen bir Sıcaklık ve Nem Sensörüdür. SHT25, ±%2 RH civarında yüksek düzeyde doğruluk sağlar. Nem aralığı %0 ile %100 arasındadır ve Sıcaklık aralığı -40 ile 125 °C arasındadır. 8 sn Sensör tepki süresi ile çok daha güvenilir ve hızlıdır.

Özellikleri

  • Thing Speak MQTT API kullanarak size gerçek zamanlı analizler ve istatistikler sağlar
  • IFTTT kullanılarak atanan bir zamanda kullanıcıya bir E-posta Bildirimi sağlanır
  • Görev Zamanlayıcı, sensörlerden veri alma, Sensör okumalarını yayınlama, MQTT konusuna abone olma gibi görevleri Zamanlamak için kullanılır.
  • Daha doğru, genişletilebilir ve ölçeklenebilir sensör okumasını almak için I2C protokolünü kullanır.
  • cihaz boştayken veya herhangi bir görev geri araması yapılmadığında uyku modu.
  • etkili görev zamanlaması sorunsuz kullanım sağlar
  • Diğer wifi ağlarına her erişildiğinde cihazınızın yanıp sönmesini önlemek için kullanıcının kullanıcı kimlik bilgilerini sağlaması gereken ayrı bir web sayfası barındırılır.
  • SPIFFS, kodumuzu okunabilir ve daha az sakar hale getirmek için web sayfamızı depolamak için kullanılır

Adım 1: Donanım ve Yazılım Spesifikasyonu

Donanım ve Yazılım Spesifikasyonu
Donanım ve Yazılım Spesifikasyonu
Donanım ve Yazılım Spesifikasyonu
Donanım ve Yazılım Spesifikasyonu

Donanım Spesifikasyonu

  • Adafruit esp8266 Huzzah tahtası
  • Huzzah Tahta Kalkanı
  • SHT25 Sensör modülü
  • I2C kablosu

Yazılım özellikleri

  • Arduino IDE'si
  • IFTTT Şey Konuşma
  • MQTT API'si

2. Adım: Kullanıcı Kimlik Bilgilerini Saklama

Kullanıcı Kimlik Bilgilerini Saklama
Kullanıcı Kimlik Bilgilerini Saklama
Kullanıcı Kimlik Bilgilerini Saklama
Kullanıcı Kimlik Bilgilerini Saklama

Burada Sıcaklık ve Bağıl Nem'in gerçek zamanlı değerini okumak ve bu değerleri buluta göndermek için SHT25 I2C sensörünü kullanıyoruz. Zaman zaman güncellenen sensör değerini almak ve bu güncellemeleri aynı anda göndermek için Arduino'nun Görev Zamanlayıcı Kitaplığını kullanıyoruz. Bulut işlemleri için ThingSpeak MQTT API kullanıyoruz. Daha sonra IFTTT uygulamalarını kullanarak kullanıcıya gerçek zamanlı hava durumu raporu sağlıyoruz. Kendi hava istasyonunuzu yapmak için bu adımları takip edebilirsiniz. Yani, DIY.

Devam etmeden önce. Kullanıcı kimlik bilgilerini kaydetmemiz gerekiyor. Bu amaçla 192.169.1.4'te bir web sunucusu barındırıyoruz. Web formumuzu SPIFFS'de sakladık. Cihaz başlatıldıktan sonra 60 saniye boyunca bir web sunucusuna ev sahipliği yapar. Kullanıcı bu adımları izlemelidir.

  • AP ESPuser'a bağlanın, Bu, mevcut wifi ağ listenizde listelenir. Bu AP'ye bağlanın ve "********" şifresini girin
  • Bağlandıktan sonra, tarayıcınıza gidin ve IP 192.168.1.4'ü girin.
  • Giriş alanlarına yerel WiFi'nizin SSID'sini ve şifresini girin ve GÖNDER'e girin
  • Bu kimlik bilgileri EEPROM'a kaydedilecek
  • 60 saniye sonra Cihaz otomatik olarak AP ile bağlantısını kesecek
  • Cihazı bir sonraki açışınızda, Kullanıcının bu prosedürü izlemesi gerekmez, Cihaz otomatik olarak kullanıcı kimlik bilgilerini EEPROM'dan alır ve sensör okumalarını I2C Arayüzünden alıp buluta göndermeye devam eder.

//--------- AP yapılandırması------------// IPAdresi ap_local_IP(192, 168, 1, 4); IPAdresi ap_gateway(192, 168, 1, 254); IPAdresi ap_subnet(255, 255, 255, 0);

Serial.print("Erişim noktası yapılandırılıyor…");

WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet);

Serial.print("Kullanıcı Kimlik Bilgilerini Ayarlama");

WiFi.softAP(ssidAP, passAP);

server.on("/", handleRoot);

server.onNotFound(onHandleNotFound);

server.begin();

APTimer = millis();

while(millis()-APTimer < APInterval){

server.handleClient();

}

//******************************KUL KÖKÜ****************** *********//void handleRoot() {

if (server.hasArg("ssid")&& server.hasArg("parola"))

{

//Tüm form alanları veri çağrısı içeriyorsa

elleGönder()

handSubmit(); }

Başka {

//Formu yeniden görüntüle

// spiffs içindeki dosyayı oku

Dosya dosyası =SPIFFS.open("/webform.html", "r");

server.streamFile(dosya, "metin/html");

//dosyayı kapatmayı unutma

dosya.kapat();

}}

// ssid ve password argümanlarına sahip olup olmadığını kontrol edin

//Ardından kimlik bilgilerini ROM'a yazın

ROMwrite(String(server.arg("ssid")), String(server.arg("parola")))

3. Adım: Web Formunuzu SPIFFS'de Ayarlama

SPIFFS

Seri Çevre Birimi Arayüzü Flash Dosya Sistemi veya kısaca SPIFFS. SPI flaş çipli mikrodenetleyiciler için hafif bir dosya sistemidir. ESP8266'nın yerleşik flash yongası, özellikle 1MB, 2MB veya 4MB sürümüne sahipseniz, web sayfalarınız için bolca alana sahiptir. Web sayfamızı da Flash Sisteminde sakladık. Spiffs'e veri yüklemek için izlememiz gereken birkaç adım var.

  1. Aracı indirin:
  2. Arduino eskiz defteri dizininizde henüz yoksa araçlar dizini oluşturun
  3. Aracı araçlar dizinine paketinden çıkarın (yol /Arduino/tools/ESP8266FS/tool/esp8266fs.jar gibi görünecektir)
  4. Arduino IDE'yi yeniden başlatın
  5. Bir çizim açın (veya yeni bir tane oluşturun ve kaydedin)
  6. Çizim dizinine gidin (Çizim > Çizim Klasörünü Göster'i seçin)
  7. Oradaki dosya sisteminde data adında bir dizin ve istediğiniz herhangi bir dosya oluşturun. Webform.html adlı HTML sayfamızı yükledik
  8. Bir kart, bağlantı noktası ve kapalı Seri Monitör seçtiğinizden emin olun.
  9. Araçlar > ESP8266 Çizim Verisi Yükleme'yi seçin. Bu, dosyaları ESP8266 flash dosya sistemine yüklemeye başlamalıdır. Bittiğinde, IDE durum çubuğu SPIFFS Image Uploaded mesajını görüntüler.

Dosya dosyası =SPIFFS.open("/webform.html", "r");

server.streamFile(dosya, "metin/html");

//dosyayı kapatmayı unutma

dosya.kapat();

Adım 4: Görev Zamanlama

Bu eğitimde iki işlem gerçekleştiriyoruz:

  • I2C protokolünü kullanarak SHT25'ten gelen verileri okuyun
  • Güncellenen verileri ThingSpeak MQTT API'sini kullanarak buluta gönderin

Bunu başarmak için TaskScheduler kütüphanesini kullanıyoruz. İki farklı kontrol işlemine atıfta bulunan iki farklı görev planladık. bu şu şekilde yapılır

  • Görev 1, sensör değerini okumak içindir, bu görev 10 saniyelik zaman aşımına ulaşana kadar 1 saniye boyunca çalışır.
  • Task1 zaman aşımına ulaştığında Yerel Wifi ve MQTT brokerine bağlanıyoruz.
  • Şimdi Görev 2 etkinleştirildi ve Görev 1'i devre dışı bırakıyoruz Görev 2, sensör verilerini Thing Speak MQTT aracısına yayınlamak içindir, bu görev 20 saniyelik zaman aşımına ulaşana kadar 20 saniye boyunca çalışır
  • Task2 zaman aşımına ulaştığında Task 1 tekrar etkinleştirilir ve Task2 devre dışı bırakılır. burada yine güncellenmiş değeri alıyoruz ve süreç devam ediyor
  • geri arama yapılmadığında veya cihaz boştayken Hafif Uyku moduna geçerek güç tasarrufu sağlar.

//--------görev geri çağırma prototipi------------//

geçersiz taskI2CCallback();

geçersiz görevI2CDisable();

geçersiz görevWiFiCallback();

geçersiz görevWiFiDisable();

//---------Görevler------------//

Görev tI2C(2 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable);

Görev tWiFi(20* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

//tI2C'yi etkinleştir tI2C.enable();

Adım 5: SHT25'ten Sıcaklık ve Nem Değerlerinin Okunması

SHT25'ten Sıcaklık ve Nem Değerlerinin Okunması
SHT25'ten Sıcaklık ve Nem Değerlerinin Okunması

I2C, ana cihazla iletişim kurmak için yalnızca iki kablo kullanan iki kablolu bir arabirimdir. Biri SCL(Serial Clock) diğeri SDA(Serial Data). Her bağımlı aygıtın benzersiz bir adresi vardır. SHT 25 ayrıca 8 bitlik bir adrese sahiptir ve 0x44 adresinden erişilebilir. 7 bitin gerçek adres olduğu ve en sağdaki LSB bit 0'ın cihazdan okuma veya cihaza yazma sinyali için kullanıldığı 8 bitlik bir adrese sahiptir. Bit 0, 1 olarak ayarlanırsa ana cihaz, bağımlı I2C cihazından okuyacaktır. I2C çok daha güvenilir, ölçeklenebilir ve hızlıdır ve hatta çok daha fazla enerji tasarrufu sağlayan birçok çalışma moduna sahiptir.

Sıcaklık ve nem değerlerini okumak için Wire.h kütüphanesini kullanıyoruz. Bu kitaplık, sensör ve ana cihaz arasındaki i2c iletişimini kolaylaştırır. 0x44, SHT25 için I2C adresidir. SHT25, farklı bir işlem modunda çalışır. Bunun için veri sayfasına başvurabilirsiniz. Tek atış işlemi için sırasıyla MSB ve LSB olarak 0x2C ve 0x06 kullanıyoruz

6. Adım: ThingSpeak MQTT API Kullanarak Değerleri ThingSpeak'e Yayınlama

ThingSpeak MQTT API Kullanarak Değerleri ThingSpeak'e Yayınlama
ThingSpeak MQTT API Kullanarak Değerleri ThingSpeak'e Yayınlama

Sıcaklık ve Nem değerlerimizi buluta göndermek için ThingSpeak MQTT API kullanıyoruz. ThingSpeak bir IoT platformudur. ThingSpeak, sensör verilerini bulutta toplamanıza ve saklamanıza izin veren ücretsiz bir web hizmetidir. MQTT, düşük seviyeli cihazları ve sensörleri bağlamak için IoT sistemlerinde kullanılan yaygın bir protokoldür. MQTT, bir aracıya ve aracıdan kısa mesajlar iletmek için kullanılır. ThingSpeak, cihazların ThingSpeak'e mesaj gönderebilmesi için yakın zamanda bir MQTT aracısı ekledi. Bu gönderiden ThingSpeak Kanalı kurma prosedürünü takip edebilirsiniz.

ThingSpeak MQTT

MQTT, öncelikle bant genişliğini ve gücü kısıtlı cihazları kablosuz ağlar üzerinden bağlamak için geliştirilmiş bir yayınlama/abone olma mimarisidir. TCP/IP soketleri veya WebSockets üzerinden çalışan basit ve hafif bir protokoldür. WebSockets üzerinden MQTT, SSL ile güvence altına alınabilir. Yayınla/abone ol mimarisi, aygıtın sunucuyu sürekli olarak sorgulamasına gerek kalmadan mesajların istemci aygıtlarına iletilmesini sağlar. İstemci, aracıya bağlanan ve bilgilere erişmek için konuları yayınlayabilen veya bunlara abone olabilen herhangi bir aygıttır. Bir konu, aracı için yönlendirme bilgilerini içerir. Mesaj göndermek isteyen her müşteri belirli bir konuya yayınlar ve mesaj almak isteyen her müşteri belirli bir konuya abone olur.

ThingSpeak MQTT kullanarak yayınlayın ve abone olun

  • Kanal besleme kanallarında yayınlama /yayınlama/
  • Belirli bir alana yayınlama kanalları /yayınla/alanlar/alan/
  • Kanal alanı kanallarına abone olun /abone olun//
  • Özel kanal besleme kanallarına abone olun //abone olun/alanlar/alan/
  • Bir kanalın tüm alanlarına abone olun. kanallar//abone ol/alanlar/feild /

geçersiz görevWiFiCallback()

{

Serial.println("taskWiFiCallbackStarted");

Serial.print("Bu görev için zaman aşımı: \t");

Serial.println(tWiFi.getTimeout());

if(!mqttCli.connected())

{

Serial.println("İstemci bağlı değil");

yeniden bağlanMQTT();

}

String topicString ="channels/"+String(channelID)+"/publish/"+String(writeAPIKey);

int topicLength = topicString.length()+1;

char konuBuffer[konuUzunluğu];

topicString.toCharArray(topicBuffer, topicLength+1);

Serial.println(topicBuffer);

String dataString = String("field1="+ String(tempC, 1) + "&field2=" + String(tempF, 1) + "&field3=" + String(nemli, 1));

int dataLength = dataString.length()+1;

bayt dataBuffer[veriUzunluğu];

dataString.getBytes(dataBuffer, dataLength);

mqttCli.beginPublish(topicBuffer, dataLength, false);

Serial.println(mqttCli.write(dataBuffer, dataLength) ? "yayınlandı": "yayınlanamadı");

mqttCli.endPublish();

//mqttCli.loop();

}

7. Adım: Hava Durumu E-posta Bildirimi

Hava Durumu E-posta Bildirimi
Hava Durumu E-posta Bildirimi
Hava Durumu E-posta Bildirimi
Hava Durumu E-posta Bildirimi

Kullanıcıya gerçek zamanlı hava durumu raporu E-posta bildirimi vermek için IFTTT uygulamalarını kullanıyoruz. Böylece, ThingSpeak aracılığıyla uyguladık. Sıcaklık ve nemin 5-fay değerlerinin ortalamasını alıyoruz. Son girişin değeri ortalama değerden büyük olduğunda. "Bu sıcak bir gün" bir e-posta bildirimini tetikleyecektir. ve ortalama değerden daha düşük olduğunda. "Ne güzel bir gün" e-posta bildirimini tetikleyecektir. Her gün saat 10:00 civarında (IST) bir e-posta bildirimi alacağız

kanal kimliği= ******;

iftttURL='https://maker.ifttt.com/**************';

nemData=thingSpeakRead(channelID, 'Alanlar', 3, 'NumDays', 5); tempData = şeySpeakRead(channelID, 'Alanlar', 1, 'NumDays', 5);

perNem=maks(moistureData)-min(moistureData);

humidValue=0,1*nem başına+min(nemVerisi);

perTemp=maks(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));

if (lastTempValue

if (lastTempValue>tempValue || lastHumidValue>humidValue)

plantMessage=' Sıcak bir gün.'; webwrite(iftttURL, 'değer1', plantMessage, 'değer2', lastTempValue, 'değer3', lastHumidValue); son

Adım 8: Genel Kod

Genel Kod
Genel Kod
Genel Kod
Genel Kod
Genel Kod
Genel Kod

Genel Kod

Genel kod bu GitHub deposunda mevcuttur

sınırlamalar

  • Büyük miktarda veri için bir yöntem yayınlayarak verileri yayınlamayla ilgili bazı sorunlar var. Bu sorunu çözmek için write() işlevini kullanıyoruz.
  • SPIFFS, yeni verileri SPIFFS'ye yüklemeden önce biçimlendirilmelidir.
  • delay() işlevini kullanmamalısınız. delay() arka plan işlemini engeller. Bunun yerine, yalnızca gerekliyse millis() işlevini kullanarak gecikmeler oluşturun

Kredi

  • ESP826WebSunucusu
  • Görev Zamanlayıcısı
  • SHT 25
  • ThingSpeak MQTT API'si
  • IFTTT
  • PubSubClient

Önerilen: