İçindekiler:
- Adım 1: Donanım ve Yazılım Spesifikasyonu
- 2. Adım: Kullanıcı Kimlik Bilgilerini Saklama
- 3. Adım: Web Formunuzu SPIFFS'de Ayarlama
- Adım 4: Görev Zamanlama
- Adım 5: SHT25'ten Sıcaklık ve Nem Değerlerinin Okunması
- 6. Adım: ThingSpeak MQTT API Kullanarak Değerleri ThingSpeak'e Yayınlama
- 7. Adım: Hava Durumu E-posta Bildirimi
- Adım 8: Genel Kod
Video: ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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 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
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.
- Aracı indirin:
- Arduino eskiz defteri dizininizde henüz yoksa araçlar dizini oluşturun
- Aracı araçlar dizinine paketinden çıkarın (yol /Arduino/tools/ESP8266FS/tool/esp8266fs.jar gibi görünecektir)
- Arduino IDE'yi yeniden başlatın
- Bir çizim açın (veya yeni bir tane oluşturun ve kaydedin)
- Çizim dizinine gidin (Çizim > Çizim Klasörünü Göster'i seçin)
- Oradaki dosya sisteminde data adında bir dizin ve istediğiniz herhangi bir dosya oluşturun. Webform.html adlı HTML sayfamızı yükledik
- Bir kart, bağlantı noktası ve kapalı Seri Monitör seçtiğinizden emin olun.
- 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ı
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
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
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 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:
NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi: 11 Adım
NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi: Hepiniz geleneksel hava durumu istasyonunu biliyor olabilirsiniz; ama gerçekte nasıl çalıştığını hiç merak ettiniz mi? Geleneksel meteoroloji istasyonu maliyetli ve hantal olduğundan, bu istasyonların birim alan başına yoğunluğu çok daha azdır ve bu da
Raspberry PI ve Cyntech WeatherHAT Kullanan Basit Hava Durumu Göstergesi: 4 Adım
Raspberry PI ve Cyntech WeatherHAT Kullanan Basit Hava Durumu Görüntüsü: * 2019'da Yahoo API'sini değiştirdi ve bu çalışma durdu. Değişiklikten habersizdim. Eylül 2020'de bu proje OPENWEATHERMAP API'sini kullanacak şekilde güncellendi Aşağıdaki güncellenmiş bölüme bakın, bu bilgilerin geri kalanı hala iyi ancak
ESP8266'yı Kullanan Basit Hava Durumu İstasyonu: 6 Adım (Resimlerle)
ESP8266 Kullanan Basit Hava Durumu İstasyonu: Bu Eğitilebilir Tabloda Sıcaklık, Basınç, İklim vb. Verileri ve Aboneler ve YouTube verileri gibi verileri almak için ESP8266'nın nasıl kullanılacağını paylaşacağım. Toplam görüntüleme sayısı. ve verileri Seri monitörde görüntüleyin ve LCD'de görüntüleyin. Veriler f olacak
Java'da BME280 ile Raspberry Pi Kullanan Kişisel Hava Durumu İstasyonu: 6 Adım
Java'da BME280 ile Raspberry Pi Kullanan Kişisel Hava Durumu İstasyonu: Kötü hava her zaman bir pencereden daha kötü görünür. Her zaman yerel hava durumunu ve pencereden ne gördüğümüzü izlemekle ilgilendik. Ayrıca ısıtma ve klima sistemimiz üzerinde daha iyi kontrol sağlamak istedik. Kişisel Hava Durumu İstasyonu inşa etmek harika bir
Raspberry Pi3 ve DHT11 Sensörünü Kullanan Hava Durumu İzleme Sistemi: 4 Adım
Raspberry Pi3 ve DHT11 Sensörünü Kullanan Hava Durumu İzleme Sistemi: Bu derste, DHT11'i Raspberry Pi'ye nasıl bağlayacağınızı ve nem ve sıcaklık okumalarını bir LCD'ye nasıl çıkaracağınızı göstereceğim. DHT11 sıcaklık ve nem sensörü hoş bir küçük modüldür. Dijital sıcaklık ve nem sağlayan