ESP32 Kullanarak Web Tabanlı Hava İstasyonu Oluşturma
İçinde bulunduğumuz yüzyılda, her şey WiFi'ye kaydırılıyor. Piyasada WiFi üzerinden çalıştırılabilen ve evlerde kullanılabilen birçok Hava durumu istasyonu bulunmaktadır. Bunlar hava istasyonları İnternete bağlı ve bazı sensörler içeriyorlar. Bu istasyonlar sıcaklığı, nemi veya basıncı algılar ve bunları cihazda zaten mevcut olan ekranda görüntüler ve verileri WiFi aracılığıyla bir mobil uygulamaya gönderir. Bu Sensörler çok maliyetlidir, bu nedenle çoğu insan bunları karşılayamaz. Evde de verimli ve ekonomik olacak bir hava istasyonu yapacağız. Piyasada kolaylıkla bulunabilen bileşenleri kullanarak evde yapmak çok kolaydır.
Bu yazıda, kullanarak bir meteoroloji istasyonu yapacağız. ESP32 ve BME280 sensörler. Sensör, ilgili parametreyi algılayacak ve yerel bir WiFi bağlantısı üzerinden bir web sayfasına gönderecektir. Bunun için kod yazıp mikrodenetleyici kartına yazacağız.
ESP32 ve BME280 Kullanarak Hava İstasyonu Nasıl Yapılır?
Artık projenin özetini bildiğimiz için, devam edelim ve proje üzerinde çalışmaya başlamak için daha fazla bilgi toplayalım.
Adım 1: Bileşenleri Toplama
Herhangi bir projeye başlamak için en iyi yaklaşım, bileşenlerin bir listesini yapmak ve bu bileşenlerin kısa bir incelemesini yapmaktır çünkü hiç kimse eksik bir bileşen yüzünden bir projenin ortasında kalmak istemeyecektir. Bu projede kullanacağımız bileşenlerin bir listesi aşağıda verilmiştir:
Adım 2: HTML'de Tablo Oluşturma
Şimdi, bir tablonun Köprü Metni Biçimlendirme Dili'nde (HTML) nasıl yapıldığını ve web tarayıcısında nasıl görüntülendiğini görelim. HTML, web sayfalarının yapısını oluşturmak için kullanılan bir dildir. Tarayıcıya sayfadaki şeyleri nasıl görüntüleyeceğini söyleyen bir dizi öğeden oluşur. Bu öğeler etiketlerle temsil edilir. Tarayıcı, HTML ile yazılmış kodu okur ve ekrandaki içeriği etiketleri görüntülemeden işler.
Tarayıcıda bir tablo oluşturmak için kullanacağız
değerini ölçtüğümüz miktar.
ÖLÇÜM | DEĞER |
---|---|
Sıcaklık Santigrat | --- * C |
Sıcaklık Fahrenheit | --- * F |
Basınç | --- hPa |
Yaklaşık. Rakım | --- metre |
Nem | --- % |
Yukarıdaki kodda, ilk sütunların iki hücresi Ölçü ve Değer olarak adlandırılmıştır. Bunun altında altı sıra oluşturulur ve her biri ölçülecek farklı miktar içindir. Bu kodu not defterine yazın. Tıkla Dosya ekranın sol üst köşesindeki menü. Tıklamak Farklı kaydet ve dosyanızı uzantısıyla adlandırın .html.Şimdi Farklı Kaydetme Türünü olarak değiştirin HERŞEY.Dosyayı kaydetmek için kaydet düğmesine tıklayın. Metin dosyasının yerleştirildiği klasörde bir tarayıcı oluşturulacaktır. Tablonuzu tarayıcıda görüntülemek için bu dosyaya tıklayın.
Dosyayı tarayıcıda açacağınız zaman aşağıdaki resim gibi görünecektir. Bu tabloda stiller dahil edilmemiştir. Kendi seçtiğiniz şık bir tablo yapmak için bir çerçeve eklemek istiyorsanız, içine CSS eklemeniz gerekecektir. CSS eklemek için burayı tıklayın.
3. Adım: Bileşenleri Birleştirme
Şimdi devam edelim ve sensörü ESP32 yazı tahtası. Bu bağlantıları yapmadan önce, Sensörün pimlerinin konfigürasyonunun kısa bir incelemesinden geçmek daha iyidir.
Bir BME280 sensörün üzerinde yedi pim vardır. Bir Pin, sensöre güç vermek için kullanılan Vcc pinidir ve ikincisi ise bir topraklama pinidir. Vcc pinine uygulanan giriş kaynağı 1.8V ile 3.6V aralığında olmalıdır. Ben2C Seri veri iletimi (çift yönlü), SDA ve SCL toplu iğne. SCK iletim sürecinde saat hattı için kullanılır. SDO BME280 sensöründen çıkan veriler için pin kullanılır. SDI pin BME280 sensöründen çıkan veriler için kullanılır. Seçilen aktif-düşük çip, CS toplu iğne.
Bu projede kullanacağımız protokol BME280 sensör modülü ile 12C haberleşmesidir. Bu amaçla, kullanacağız SDA ve SCL sensörün pimi. ESP32'nin 21 numaralı pini sensörün SDA pinine bağlanır ve ESP32'nin pimi 22 sensörün SCL'sine bağlanır.
Tüm bağlantılar yapıldığında mikrodenetleyici kartını bilgisayara bağlayın ve içindeki kodu yazın. Başlatmak için Etkinleştir düğmesine basın. Diyagramın bağlantıları şöyle görünecektir:
4. Adım: ESP32'ye Başlarken
Daha önce Arduino IDE üzerinde çalışmadıysanız endişelenmeyin çünkü Arduino IDE'yi kurmak için adım adım adımlar aşağıda gösterilmiştir.
- Arduino IDE'nin en son sürümünü Arduino'dan indirin.
- Arduino kartınızı PC'ye bağlayın ve Kontrol Panelini açın. Tıklamak Donanım ve ses.Şimdi aç Cihazlar ve Yazıcı ve kartınızın bağlı olduğu bağlantı noktasını bulun. Benim durumumda COM14ancak farklı bilgisayarlarda farklıdır.
- Dosya'ya ve ardından Tercihler'e tıklayın. Aşağıdaki bağlantıyı kopyalayın Ek Kurul Yöneticisinin URL'si. "https://dl.espressif.com/dl/package_esp32_index.json ”
- Şimdi, ESP32'yi Arduino IDE ile kullanmak için, ESP32'ye kod yazmamıza ve kullanmamıza izin verecek özel kütüphaneleri içe aktarmamız gerekiyor. bu iki kitaplık aşağıda verilen bağlantıya eklenmiştir. Kitaplığı dahil etmek için gidin Eskiz> Kitaplığı Dahil Et> ZIP Kitaplığı Ekle. Bir kutu görünecektir. Bilgisayarınızda ZIP klasörünü bulun ve klasörleri dahil etmek için Tamam'ı tıklayın. Bu kitaplık, aşağıdaki bağlantıdaki kodla birlikte eklenmiştir.
- Şimdi git Eskiz> Kitaplığı Dahil Et> Kitaplıkları Yönet.
- Bir Menü açılacaktır. Arama çubuğuna yazın adafruit bme280. Bu paket entegre etmek için kullanılacak BME280 sensör ve ondan okumalar alın. Paket ekranda görünecektir. Paketi yükle düğmesine tıklayarak kurun.
- Aynı Kütüphane Yöneticisinde şunu arayın: Adafruit Birleşik Sensör.Bu kitaplık ayrıca BME280 sensörünün ESP32 ile kullanılmasına yardımcı olur. Kutuda bir liste görünecektir. Listenin sonuna gidin ve aşağıdaki resimde gösterilen kitaplığı seçin. Kitaplığı kurmak için kur düğmesine tıklayın.
- Bir Menü açılacaktır. Arama çubuğuna yazın Arduino JSON.Bir liste görünecektir. Yüklemek Benoit Blanchon tarafından Arduino JSON.
- Şimdi tıklayın Araçlar.Bir açılır menü görünecektir. Panoyu şuna ayarlayın: ESP Dev Modülü.
- Araç menüsünü tekrar tıklayın ve daha önce kontrol panelinde gözlemlediğiniz bağlantı noktasını ayarlayın.
- Şimdi aşağıdaki bağlantıya ekli olan kodu yükleyin ve kodu ESP32 mikro denetleyicisine yazmak için yükle düğmesine tıklayın.
Yani şimdi kodu yüklediğinizde bir hata meydana gelebilir. Bu, Arduino IDE'nin ve Arduino JSON'un yeni bir sürümünü kullanıyorsanız ortaya çıkabilecek en yaygın hatadır. Ekranda görebileceğiniz hatalar aşağıdadır.
C: \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C'den alınan dosyada : \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 14: 11: error: StaticJsonBuffer, ArduinoJson'dan bir sınıftır 5. Programınızı ArduinoJson'a nasıl yükselteceğinizi öğrenmek için lütfen arduinojson.org/upgrade adresine bakın sürüm 6 StaticJsonBufferjsonBuffer; ^ C: \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C: \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 65: 11: error: StaticJsonBuffer, ArduinoJson'dan bir sınıftır 5. Programınızı nasıl yükselteceğinizi öğrenmek için lütfen arduinojson.org/upgrade adresine bakın. ArduinoJson sürüm 6 StaticJsonBuffer döndürür () .parseObject (_data); ^ "WiFi.h" için birden fazla kitaplık bulundu Kullanılan: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ libraries \ WiFi Kullanılmıyor: C: \ Program Files ( x86) \ Arduino \ libraries \ WiFi Klasördeki 1.0 sürümünde kütüphane WiFi kullanarak: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ libraries \ WiFi IOXhop_FirebaseESP32-master kitaplık kullanarak klasörde: C: \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master (eski) Klasördeki 1.2 sürümünde kitaplık HTTPClient kullanma: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ libraries \ HTTPClient Şu klasörde sürüm 1.0'da WiFiClientSecure kitaplığını kullanma: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ libraries \ WiFiClientSecure sürüm 6.12.0 klasöründe: C: \ Users \ Pro \ Documents \ Arduino \ libraries \ ArduinoJson çıkış durumu 1 Kart ESP32 Dev Modülü için derleme hatası.
Endişelenecek bir şey yok çünkü bazı basit adımları izleyerek bu hataları ortadan kaldırabiliriz. Bu hatalar, Arduino JSON'un yeni sürümünün yerine başka bir sınıfa sahip olduğu için ortaya çıkıyor. StaticJsonBuffer.Bu JSON 5 sınıfıdır. Dolayısıyla, Arduino IDE'mizin Arduino JSON versiyonunu düşürerek bu hatayı ortadan kaldırabiliriz. Basitçe gidin Eskiz> Kitaplığı Dahil Et> Kitaplıkları Yönet.AramakBenoit Blanchon tarafından Arduino JSONdaha önce kurduğunuz. Önce onu kaldırın ve ardından sürümünü şu şekilde ayarlayın: 5.13.5. Şimdi Arduino JSON'un eski bir sürümünü ayarladığımız için, tekrar kurun ve kodu yeniden derleyin. Bu sefer kodunuz başarıyla derlenecektir.
Kodu indirmek için burayı tıklayın.
Adım 5: Kodu Anlama
Bu projenin kodu çok basit ve iyi yorumlanmış. Ancak yine de kod aşağıda kısaca açıklanmıştır.
1. Başlangıçta, ESP32 kartının evdeki veya ofisteki yerel WiFi bağlantısına bağlanabilmesi için kitaplıklar dahil edilmiştir. ESP32'nin BME280 sensörünü onunla entegre etmesine yardımcı olan kitaplıklar da dahildir. Ardından ESP32'nin Wifi'ye bağlanabilmesi için yerel wifi bağlantınızın adı ve şifresi tanımlanır.
// Wi-Fi kitaplığını yükle #include// wifi kullanmak için libray #include #Dahil etmek // BME280 sensörünü kullanmak için kitaplık #include // BME280 sensörünü kullanmak için kitaplık
2. Bundan sonra bazı satırlar yorumlanır. Sensörün iletişimi için SPI protokolü kullanıyorsanız bu satırlar kullanılacaktır. Onları yorumda tutacağız çünkü 12C protokolünü kullanıyoruz.
/*#Dahil etmek#define BME_SCK 18 #define BME_MISO 19 #define BME_MOSI 23 #define BME_CS 5 * /
3. Deniz seviyesi basıncının değerini hektopaskal olarak kaydetmek için bir değişken oluşturulur. 1 hektopaskal, bir milibar ile eşdeğerdir. Verilen basıncın rakımı tahmin edilir ve ardından bu değişken bunu deniz seviyesi basıncıyla karşılaştırır. Bundan sonra, bmedaha fazla kullanım için oluşturulmuş bir nesnedir.
#define SEALEVELPRESSURE_HPA (1013.25) // bulunan basıncı deniz seviyesiyle karşılaştırmak için değişken Adafruit_BME280 bme; // I2C
4. Bundan sonra, WiFi bağlantınızın adı ve gücü koda eklenir, böylece ESP32 WiFi'ye bağlanabilir. Daha sonra, port numarası web sunucusuyla iletişim kuracak şekilde ayarlanır ve HTTP isteğini saklamak için bir değişken bildirilir.
const char * ssid = "SSID SİZİN"; // Yerel wifi bağlantınızın adı const char * password = "ŞİFRENİZ"; // Yerel wifi bağlantınızın WiFiServer sunucunuzun şifresi (80); // Web sunucusu bağlantı noktası numarasını 80 String başlığına ayarlayın; // HTTP isteğini depolamak için değişken
5. geçersiz kurulum ()INPUT veya OUTPUT pinlerini başlattığımız bir fonksiyondur. Bu işlev ayrıca baud hızını da ayarlar. Serial.begin () komut. Baud Hızı, mikro denetleyicinin iletişim hızıdır. ESP32'yi yerel wifi bağlantısına bağlamak için buraya bazı kod satırları eklenir. Pano yerel wifi bağlantısına bağlanmaya çalışacak ve yazdıracaktır. "bağ." seri monitörde. Yazdıracak "Bağlı" bağlantı kurulduğunda. Bu nedenle, bunu izlemek için, seri monitörü açıp orada durumunu kontrol etmek daha iyidir.
geçersiz kurulum () {Serial.begin (115200); // baud hızı bool durumunu ayarlama; // varsayılan ayarlar // (ayrıca & Wire2 gibi bir Wire kitaplığı nesnesini de iletebilirsiniz) // status = bme.begin (); if (! bme.begin (0x76)) {// sensör arızalı mı kontrol ediliyor Serial.println ("Geçerli bir BME280 sensörü bulunamadı, kabloları kontrol edin!"); while (1); } // SSID ve şifre Serial.print ile Wi-Fi ağına bağlanın ("Bağlanılıyor"); Serial.println (ssid); WiFi.begin (ssid, şifre); while (WiFi.status ()! = WL_CONNECTED) {gecikme (500); Seri.baskı ("."); } // Yerel IP adresini yazdırın ve web sunucusunu başlatın Serial.println (""); Serial.println ("WiFi bağlı."); Serial.println ("IP adresi:"); // seri monitörde ip adresini yazdır Serial.println (WiFi.localIP ()); server.begin (); }
6. geçersiz döngü ()bir döngüde tekrar tekrar çalışan bir işlevdir. Bu döngüde, mikrodenetleyici panosuna hangi görevleri ve nasıl yapacağını söyleyen bir kod yazıyoruz. Bu kodda önce yeni bir müşteri ile bağlantı kurulur. Bağlantı kurulursa, web sayfası tarayıcıda görüntülenir. Daha sonra tablo yapılır ve sensör okumaları bu tabloya doldurulur. Masa dolduğunda bağlantı kapanır.
void döngü () {WiFiClient client = server.available (); // Gelen istemcileri dinle if (istemci) {// Yeni bir istemci bağlanırsa, Serial.println ("Yeni İstemci."); // seri bağlantı noktasında bir mesaj yazdırın String currentLine = ""; // (client.connected ()) {// istemci bağlıyken (client.available ()) {// istemciden okunacak baytlar varsa, char c = client.read (); // bir bayt okuduktan sonra Serial.write (c); // seri monitör başlığını yazdır + = c; if (c == '\ n') {// bayt bir yeni satır karakteriyse // mevcut satır boşsa, bir satırda iki yeni satır karakteri var demektir. // bu, istemci HTTP isteğinin sonudur, bu nedenle bir yanıt gönderin: if (currentLine.length () == 0) {// HTTP üstbilgileri her zaman bir yanıt koduyla başlar (ör. HTTP / 1.1 200 OK) // ve bir içerik türü böylece istemci ne olacağını bilir, ardından boş bir satır: client.println ("HTTP / 1.1 200 OK"); client.println ("İçerik türü: metin / html"); client.println ("Bağlantı: kapat"); client.println (); // HTML web sayfası client.println (""); client.println (""); client.println (""); // Tabloyu biçimlendirmek için CSS client.println ("BME280 ile ESP32
"); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println ("
ÖLÇÜM | DEĞER |
---|---|
Sıcaklık Santigrat | "); client.println (bme.readTemperature ()); client.println (" * C |
Sıcaklık Fahrenheit | "); client.println (1.8 * bme.readTemperature () + 32); client.println (" * F |
Basınç | "); client.println (bme.readPressure () / 100.0F); client.println (" hPa |
Yaklaşık. Rakım | "); client.println (bme.readAltitude (SEALEVELPRESSURE_HPA)); client.println (" m |
Nem | "); client.println (bme.readHumidity ()); client.println ("% |
Donanım bileşenlerini piyasadan topladıktan ve kendinizinkini yapmaya başladıktan sonra, ESP32 kullanarak bir meteoroloji istasyonunun nasıl yapılacağının tüm prosedürü buydu. İyi şanslar!