İçindekiler:

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: 11 Adım

Video: NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi: 11 Adım

Video: NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi: 11 Adım
Video: AKILLI EVİ MÜKEMMELLEŞTİRMENİN SIRRI: TEMA & HACS KURULUMU 2024, Kasım
Anonim
NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi
NodeMCU Kullanan Akıllı Dağıtılmış IoT Hava Durumu İzleme Sistemi

Hepiniz geleneksel meteoroloji istasyonunun farkında olabilirsiniz; ama gerçekte nasıl çalıştığını hiç merak ettiniz mi? Geleneksel meteoroloji istasyonu maliyetli ve hacimli olduğundan, bu istasyonların birim alan başına yoğunluğu çok daha azdır ve bu da verilerin yanlış olmasına katkıda bulunur. Size nasıl olduğunu açıklayacağım: Bir şehrin ortasında bir istasyon olduğunu ve 'x' metre yarıçapında bulunan tek istasyon olduğunu varsayalım, civarda kirliliğe neden olan herhangi bir ajan varsa kolayca önyargılı olabilir. Tüm alanın hava durumu verilerini belirlemekten tek istasyon sorumlu olduğundan, tüm 'x' metre yarıçaplı alanı kirli olarak gösteren istasyonun.

Bu sorunun üstesinden gelmek için, modüllerin yoğunluğunun arttırılması gerekir, bu ancak modüllerin daha ucuz olması ve mevcut olandan daha az yer kaplaması durumunda mümkündür.

Bu, önerilen çözümümün bu sorun için mükemmel çözüm olmasının nedenidir, Maliyeti 10 dolardan daha azdır ve ayrıca avucumda kolayca durur.

Nasıl çalışır…

Bu projenin 3 ana bölümü var.

Cihaz tarafı:

Cihaz, hava durumu verilerini her 'x' zaman aralığında sunucuya gönderen, resimde gösterilen bir IoT modülüdür. Veriler, gerçek hava durumu verilerini, modülün coğrafi konumunu; yani koordinatları, MAC adresi; cihazı benzersiz bir şekilde tanımlamak için, şu anda üzerinde çalıştığı üretici yazılımı sürümü. Cihaz tarafı, sunucuya aktif olarak veri katkıda bulunan alana dağıtılmış N-modülleri içerir.

Sunucu tarafı:

Adından da anlaşılacağı gibi, modüllerden veri alıp veri tabanında depolamak, modülü daha eski bir sürümde çalışıyorsa en son firmware ile güncellemek, hava durumu verilerini göndermek gibi birçok işlemi yapan merkezi sunucudur. müşteri istek üzerine.

İstemci/Kullanıcı tarafı:

Sunucudan hava durumu verilerini isteyen son kullanıcıdır. İstemci mevcut konumu gönderir ve konuma göre sunucu, istemci ile tüm modüller arasındaki mesafeyi hesaplar ve en yakın modülün hava durumu verilerini doğru kabul edilen istemciye gönderir.

Gereçler

  • DüğümMCU (ESP8266-12E)
  • DHT11 (Nem ve sıcaklık sensörü)
  • BMP180 (Basınç ve Sıcaklık sensörü)
  • MQ-135 (Hava kalitesi indeks sensörü)
  • USB kablosu (programı yüklemek için)
  • 5 voltluk güç kaynağı
  • Kondansatörler (Opsiyonel: Elektrik hattına paralel yerleştirilecek)
  • Arduino IDE (Programda hata ayıklamak ve yüklemek için)
  • POSTMAN uygulaması (isteğe bağlı: API'de hata ayıklamak için)
  • Bir Web Sitesi (PHP ve MySQL sunucusunu barındırmak için)

Adım 1: Tüm Bileşenleri Lehimleyin ve Programı NodeMCU'ya Yükleyin

Tüm Bileşenleri Lehimleyin ve Programı NodeMCU'ya Yükleyin
Tüm Bileşenleri Lehimleyin ve Programı NodeMCU'ya Yükleyin
Tüm Bileşenleri Lehimleyin ve Programı NodeMCU'ya Yükleyin
Tüm Bileşenleri Lehimleyin ve Programı NodeMCU'ya Yükleyin

Tüm bileşenleri, mükemmel bir kart üzerindeki devre şemasında gösterildiği gibi NodeMCU'ya lehimleyin. Ayrıca, aktif olarak veri gönderme ve alma sırasında güç dalgalanmaları olduğundan, güç hatlarına paralel bir kondansatör lehimleyin.

Lehimleme işi bittiğinde, "code.c" dosyasında verilen kodu yükleyin.

Not: Kimlik bilgilerini kendi kimlik bilgilerinizle değiştirmeyi unutmayın. Ayrıca "html_file.h" adlı dosyayı arduino eskiz klasörünün içine yerleştirin. Bu projede kullanılan tüm başlık dosyaları burada bulunabilir.

Kodun özellikleri:

Erişim Noktası: Seri üretimde her modülü kimlik bilgileriyle programlamak zor olduğundan, modül ilk açılışında modüllerin bağlanması gereken WiFi kimlik bilgilerini kabul etmek ve daha sonra kullanmak üzere EEPROM'da saklamak için bir web sayfası barındırır.

Kimlik bilgileri yapılandırıldıktan sonra NodeMCU, kimlik bilgileri için EEPROM'u kontrol eder ve EEPROM'da bulunan WiFi kimlik bilgilerine bağlanır.

WiFi'ye başarılı bir şekilde bağlandıktan sonra, NodeMCU her 'x' zaman aralığında verileri sunucuya yüklemeye başlar, veriler hava durumu verilerini, modülün MAC adresini, bellenimin sürümünü, cihazın coğrafi konumunu içerir.

OTA güncellemesi: Modül ayrıca her gün kodda belirtilen belirli bir zamanda yeni bellenim güncellemesini kontrol eder. Bu özellik yararlıdır çünkü herhangi bir üreticinin herhangi bir değişiklik olması durumunda tek bir modülün programını değiştirmesi ve değiştirmesi mümkün değildir.

Watchdog Timer: Atlast, takılırsa veya çökerse herhangi bir insan müdahalesi olmadan kendini kurtarmanın bir yolu olmalı. Bu, Watchdog zamanlayıcı kullanılarak gerçekleştirilebilir. Bunun çalışma şekli şudur: Her saniye çalışan bir Kesme alt rutini vardır. ISR, her çalıştığında sayacı artırır ve sayacın maksimum sayıma ulaşıp ulaşmadığını kontrol eder. Sayaç maksimum değere ulaştığında, modül çöktüğü varsayılarak kendini sıfırlar. Normal çalışmada, sayaç her zaman maksimum sayıma ulaşmadan sıfırlanır.

Adım 2: SQL Server'ı Yapılandırma

SQL Server'ı Yapılandırma
SQL Server'ı Yapılandırma

SQL Server kurulumu da gerçekten basittir. Sadece SQL sunucusunda bir veritabanı oluşturun ve "database_structure.txt" adlı dosyayı içe aktararak ayarı içe aktarın. Dosyayı bu adımda bulabilirsiniz. Talimat ".sql" dosyalarının yüklenmesine izin vermediğinden, dosyayı ".txt" olarak yeniden adlandırdım.

Not: Dosyayı ".txt" yerine ".sql" olarak yeniden adlandırın.

Adım 3: Dosya Sunucusunu Yapılandırma

Bir web siteniz varsa ve çevrimiçi olarak barındırılıyorsa, sunucuyu yapılandırmak gerçekten kolaydır. Bu eğitimin kapsamı dışında olduğu için bir web sitesi kurma ve barındırma prosedürünün tamamını gözden geçirmeyeceğim. Ancak dosyaların çalışmasını denemek için kendi bilgisayarınızda localhost olarak barındırabilirsiniz.

Instructable PHP dosyalarının yüklenmesine izin vermediğinden, dosyaları ".txt" olarak yeniden adlandırdım.

Not: Lütfen dosyaların uzantısını ".php" olarak yeniden adlandırın. Ayrıca "config.php" dosyasının kimlik bilgilerini değiştirmeyi unutmayın.

Sadece dosyaları sunucuya yükleyin ve hazırsınız.

PHP dosyaları hakkında size kısa bilgiler vereceğim.

db_config.php:

Bu dosyada, SQL sunucusuna bağlanmak için gereken tüm kimlik bilgileri depolanır.

db_connect:

Bu dosyada veritabanı bağlantısı için gerekli sınıf mevcuttur.

insert.php:

NodeMCU, GET yöntemini kullanarak verileri sunucuya yüklemek için bu PHP dosyasını çağırır. Bu dosya aynı verileri SQL sunucusuna depolamaktan da sorumludur.

geri almak.php:

Kullanıcı/İstemci bu PHP'yi GET yöntemini kullanarak çağırır. Sunucu, kullanıcı ile tüm modüller arasındaki mesafeyi hesaplar. Daha sonra en yakın modülün verileri, istemcinin tercihine göre JSON/XML formatında istemciye yanıt olarak gönderilir.

güncelleme.php:

Bu PHP dosyası, modül tarafından her gün belirli bir zamanda, modülün bellenimin en son sürümünü çalıştırıp çalıştırmadığını kontrol etmek için çağrılır. En son ".bin" dosyasını dosya sunucusuna yerleştirin ve dosyanın dizinini dosyanın değişkeninde belirtin.

Bu kadar çok dosya ilk başta göz korkutucu görünüyorsa, bir sonraki adımda kullanıcı belgelerini ekledim.

4. Adım: Kullanıcı Belgeleri

Kullanıcı Belgeleri
Kullanıcı Belgeleri
Kullanıcı Belgeleri
Kullanıcı Belgeleri

Tanıtım:

Hava Durumu API'si, dünya yüzeyindeki konumlar için hava durumu verilerini istemek için basit bir arayüz sağlar. Belirtilen çıktı biçimiyle belirli bir enlem/boylam çifti için hava durumu bilgilerini talep edersiniz. API, istenen konumdan en yakın modül tarafından en son kaydedilen sıcaklık, nem, basınç ve Hava kalitesi indeksini döndürür.

Sen başlamadan önce:

Bu belge, geliştirilmekte olan bir uygulamaya hava durumu bilgilerini eklemek isteyen web sitesi ve mobil geliştiriciler için hazırlanmıştır. Mevcut parametreler üzerinde API ve referans materyali kullanarak kullanımı tanıtır.

Hava Durumu Veri Talepleri:

Hava Durumu API istekleri, bir URL dizesi olarak oluşturulur. API, bir enlem/boylam çifti tarafından belirtilen, dünyadaki bir nokta için hava durumu verilerini döndürür. Hava durumu verilerinin doğruluğunun, bir alana yerleştirilen modüllerin yoğunluğu ile doğru orantılı olduğunu unutmayın.

Bir Hava Durumu API isteği aşağıdaki formu alır:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

Çıktı formatı (format) aşağıdaki değerlerden biri olabilir:

  • JSON (önerilir), JavaScript Object Notation'da (JSON) çıktıyı belirtir; veya
  • XML, düğümün içine sarılmış XML'deki çıktıyı gösterir.

Talep Parametreleri:

Tüm URL'lerde standart olduğu gibi, parametreler ve işareti (&) karakteri kullanılarak ayrılır. Parametrelerin listesi ve olası değerleri aşağıda belirtilmiştir.

Gerekli Parametreler:

  • lat: Aranacak bir konumun enlemini temsil eder. (ör. enlem=19.56875)
  • lon: Aranacak bir konumun boylamını temsil eder. (ör. boylam=72.97568)

Opsiyonel Parametreler:

format: Hava durumu verilerinin yanıt çıktı formatını belirtir. JSON veya XML olabilir. Varsayılan JSON'dur. (ör. format=json veya format=xml)

Hava Durumu Yanıtları:

Her geçerli istek için, saat dilimi hizmeti, istek URL'sinde belirtilen biçimde bir yanıt döndürür. Her yanıt aşağıdaki unsurları içerecektir:

  • başarı: yanıtın durumunu gösteren bir değer.

    • 0: Negatif; isteğin hatalı biçimlendirildiğini gösterir.
    • 1: Olumlu; isteğin başarılı olduğunu gösterir.
  • mesaj: isteğin hatalı biçiminin nedenini gösteren bir dize. Yalnızca durum olumsuz olduğunda kullanılabilir.
  • data: birden fazla hava durumu parametresine sahip bir dizi.

    • sıcaklık: sıcaklık verileri.
    • hum: nem varlığı verileri.
    • pres: mutlak basınç verileri.
    • aqi: mevcut Hava kalitesi endeksi.

Her iki formatın örnek yanıtı resimlerde görülebilir.

Adım 5: Modül Kurulumu

Modül Kurulumu
Modül Kurulumu
Modül Kurulumu
Modül Kurulumu

Aygıt yöneticisinden/kullanıcıdan kimlik bilgilerini almak için bir Erişim noktası oluşturulur ve bir IP adresinde bir web sayfası barındırılır (Varsayılan:192.168.4.1). EEPROM.

Kullanıcının, modülün bağlanmasını istediği SSID ve şifreyi girmesi gerekir. Tarayıcının konuma erişmesine izin verirseniz, enlem ve boylam otomatik olarak doldurulur.

Tüm ayrıntılar girildikten sonra, "GÖNDER" düğmesine tıklayın ve ardından tüm kimlik bilgileri modülün EEPROM'una yazılır.

Modüllerin seri üretimi sırasında tüm modülleri tam konum verileri ve WiFi kimlik bilgileri ile programlamak mümkün olmadığı için bu adım çok önemlidir. Ayrıca, programdaki kimlik bilgilerini sabit kodlamanız tavsiye edilmez, çünkü modülü başka bir yere yerleştirmemiz veya WiFi kimlik bilgilerini değiştirmemiz gerekirse, modülü yeniden programlamamız gerekecek. Bu güçlükten kaçınmak için ilk kurulum işlevi uygulanır.

Adım 6: Şimdi Buluta Veri Katma Zamanı

Şimdi Buluta Veri Katma Zamanı
Şimdi Buluta Veri Katma Zamanı
Şimdi Buluta Veri Katma Zamanı
Şimdi Buluta Veri Katma Zamanı

Önceki tüm adımlar tamamlandıktan sonra, şimdi modülün verileri sunucuya yüklemesine izin verme zamanı. Kimlik bilgilerini kaydettikten sonra otomatik olarak yüklemeye başlar.

GET yönteminde gönderilecek tüm parametreleri geçirerek bir API çağrısı olarak "insert.php"yi çağırır.

Aşağıdaki kod parçacığı, parametrelerin nasıl işlendiğini gösterir.

if (isset($_GET['temp']) && isset($_GET['hum']) && isset($_GET['pres']) && isset($_GET['aqi']) && isset($_GET ['mac']) && isset($_GET['lat']) && isset($_GET['lon '])) 2. { 3. // ana program 4. }

Böylece tüm modüller verileri yüklemeye başlar.

Not: Sunucunun aşırı yüklendiğini düşünüyorsanız, koddaki yükleme sıklığını azaltın.

7. Adım: Kablosuz (OTA) Güncellemesi

Havadan (OTA) Güncelleme
Havadan (OTA) Güncelleme

Modül tamamen kurulduktan ve verileri yüklemeye başladıktan sonra, her gün programda belirtilen belirli bir zamanda ürün yazılımı güncellemelerini kontrol eder. Herhangi birini bulursa, içindeki ikili dosyayı indirir ve yanıp söner. Olmazsa, normal veri yükleme işlemine devam edilir.

Yeni bir güncelleme olup olmadığını kontrol etmek için modül, istek başlığında MAC adresini göndererek "update.php"yi çağırır. Sunucu daha sonra bu belirli MAC adresinin herhangi bir yeni güncellemesi olup olmadığını kontrol eder, evet ise yanıt olarak en son bellenimin ikili dosyasını gönderir.

Ayrıca, modülün temel kimlik doğrulaması için gereken tüm gerekli başlıkları kontrol eder.

Adım 8: Kullanıcı/Müşteri Verilere Nasıl Erişebilir…

Kullanıcı/Müşteri Verilere Nasıl Erişebilir…
Kullanıcı/Müşteri Verilere Nasıl Erişebilir…
Kullanıcı/Müşteri Verilere Nasıl Erişebilir…
Kullanıcı/Müşteri Verilere Nasıl Erişebilir…
Kullanıcı/Müşteri Verilere Nasıl Erişebilir…
Kullanıcı/Müşteri Verilere Nasıl Erişebilir…

Sunucudan verilere erişmek oldukça basittir. Sadece "retrieve.php"yi çağırarak, hava durumu verilerini yanıt olarak JSON formatında alacağız. Bundan sonra, tek tek öğelere erişmek için JSON verilerini ayrıştırmak yeterlidir. XML yanıtı ile benzerdir. Kullanıcı, çalışmak için rahat olduğu tercih edilen yanıt biçimini her zaman belirleyebilir. Kullanıcı biçimi belirtmezse, varsayılan biçim JSON'dur.

API'nin çalışıp çalışmadığını kontrol etmek için POSTMAN aracı kullanılarak örnek bir istek yapılır.

Javascript'te JSON yanıtının ayrıştırılmasına ilişkin bir örnek, aşağıdaki kod parçacığında gösterilmektedir.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";function httpGet(theUrl) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", theUrl, false); // eşzamanlı istek için false xmlHttp.send(null); xmlHttp.responseText döndür; } var myVar = httpGet(url); var obj = JSON.parse(myVar); document.getElementById("aqi").innerHTML = obj.data[0].aqi; document.getElementById("sıcaklık").innerHTML = Math.round(obj.data[0].temp) + "°C"; document.getElementById("temp").innerHTML = Math.round(obj.data[0].temp) + "°C"; document.getElementById("nem").innerHTML = Math.round(obj.data[0].hum) + "%"; document.getElementById("basınç").innerHTML = Math.round(obj.data[0].pres) + " mb";

JSON yanıtını ayrıştıran örnek HTML sayfasının kaynak kodu bu adımın sonunda mevcuttur.

Not: Dosyanın uzantısını ".html" olarak değiştirin.

Adım 9: Bu Projenin Sınırlamaları

  • Proje, verileri göndermek için GET'i kullanır; hassas verilerle uğraşmasa da, kolayca değiştirilebilen ve hatta normal bir cihaz bile sahte olabilen başlıkları kontrol etmek dışında kaynağın gerçekliğini kontrol etmek için herhangi bir mekanizmaya sahip olmadığı için veriler kolayca manipüle edilebilir. bir hava durumu modülü gibi görünmek için.
  • Modül, çoğu durumda diğer kuruluşlara ait olacak verileri göndermek için yalnızca diğer erişim noktalarına (WIFI) dayandığından ve bağımlı olduğundan. Herhangi bir nedenle erişim noktası hizmet dışıysa, modül veri gönderemez.
  • Proje, mevcut sistemin doğruluğunu artırmak için yapılmış olsa da, piyasada bulunan sensör, beklenenden daha az hassastır ve sonuçta asıl amacının başarısız olmasına neden olur.
  • Projeyi planlarken, hata düzeltme için sunucunun konuma göre veri değerinin ortalamasını aldığı bir modu dahil etmeyi planladım. Ancak bu özelliği uyguladıktan sonra, koordinatları coğrafi bölgelere çevirmek için bazı üçüncü taraf API'lere ihtiyaç olduğunu fark ettim.

Adım 10: Bu Projede Yapılabilecek Diğer İyileştirmeler

  • Modülün doğruluğu, piyasada bulunan jenerik modülü kullanmak yerine sensörleri belirli bir amaç için özel olarak uyarlayarak daha da geliştirilebilir.
  • Modül, verileri göndermek için Hücre kuleleri ile kablosuz olarak iletişim kuran ve böylece hata toleransını artıran özel bir çip kullanılarak daha da bağımsız çalışacak şekilde değiştirilebilir.
  • Güneş paneli ve akü sistemi, ESP'nin derin uyku modu ile birlikte kullanılabilir, böylece güç verimliliğini artırır ve harici bir güç kaynağından daha bağımsız hale getirir.
  • POST, her veri iletimi için döngüsel kodlar kullanmak gibi bazı kimlik doğrulama mekanizmalarıyla veri göndermek için kullanılabilir.
  • Prototipleme kartı olan NodeMCU yerine seri üretimde hem maliyeti düşüren hem de sistem kaynaklarını en iyi şekilde kullanan özel bir mikrodenetleyici kullanabiliriz.
  • Google coğrafi konum API'si ile bağlantılı olarak ve mevcut herhangi bir açık WIFI'ye bağlanarak modül, onu yapılandırmadan bile çalışabilir; herhangi bir kurulum gerekmeden fabrikadan veri iletmeye hazır.

Adım 11: İzleyici İçin Birkaç Söz

İzleyiciler İçin Birkaç Söz
İzleyiciler İçin Birkaç Söz

Merhaba arkadaşlar, kapsanması gereken her ayrıntıdan bahsetmediğim için bunun yeni başlayanlar için uygun bir eğitim olmadığının farkındayım. Ayrıca bu proje, bir Eğitilebilir Kitapta ele alınacak gerçekten çok büyük. Yine de, projenin her önemli yönünü ele almak için elimden geleni yaptım. Ayrıca projenin işleyişini gösteren bir videonun gerçekten harika olacağını biliyorum ama bu benim ilk dersim olduğu ve dürüst olmak gerekirse, buna benzer herhangi bir şeyi ilk yayınım olduğu için, önünde olmaktan oldukça gergindim. kamera.

Bu projeyi veya buna benzer bir şeyi yapmak için herhangi bir yardıma ihtiyacınız olursa, bana [email protected] adresinden ulaşın veya her zamanki gibi bir yorum bırakın. Arkadaşlar elimden geldiğince yardımcı olmaya çalışacağım.

Teşekkürler!!

Önerilen: