BME280 Sıcaklık, Nem, Basınç, Yükseklik Sensörü Arduino ile
BME280 ile bir sonraki Arduino projenize etrafındaki dünyayı algılama yeteneği verin . Bu sensörlerin kullanımı oldukça basittir, önceden kalibre edilmiştir ve ekstra bileşen gerektirmez, böylece bağıl nem, sıcaklık, barometrik basınç ve yakl. hiçbir zaman irtifa.
BME280 Sıcaklık, Nem ve Basınç Sensörü
Modülün merkezinde, Bosch tarafından üretilen yeni nesil dijital sıcaklık, nem ve basınç sensörü - BME280 bulunmaktadır. BMP180, BMP085 veya BMP183 gibi sensörlerin en modernidir.
Bu hassas sensör, bağıl nemi ±% 3 doğrulukla% 0 ila% 100, barometrik basıncı ± 1 hPa mutlak doğrulukla ve -40 ° C ila 85 ° C arasındaki sıcaklığı ± 1.0 ° C doğrulukla ölçebilir.
Basınç ölçümleri o kadar hassastır (0,25 m'lik düşük irtifa gürültüsü), ± 1 metre hassasiyetle altimetre olarak bile kullanabilirsiniz.
Güç Gereksinimi
Modül, yerleşik bir LM6206 3.3V regülatörü ve I2C Voltaj Seviye Çeviricisi ile birlikte gelir, böylece Arduino gibi bir 3.3V veya 5V mantık mikrodenetleyicisi ile endişelenmeden kullanabilirsiniz.
BME280, ölçümler sırasında 1mA'dan daha az ve boşta iken yalnızca 5μA tüketir. Bu düşük güç tüketimi, el cihazları, GPS modülleri veya saatler gibi batarya ile çalışan cihazlarda uygulamaya izin verir.
I2C Arayüzü
Modül, seçtiğiniz herhangi bir mikro denetleyiciyle kolayca arabirim oluşturabilen basit bir iki kablolu I2C arabirimine sahiptir.
BME280 modülünün varsayılan I2C adresidir 0x76 HEX ve 0x77 olarak değiştirilebilir HEX çip yanında lehim jumper ile kolayca.
I2C Adresini Değiştirme Prosedürü
Çipin yanında lehim bağlantı telini bulun. Varsayılan olarak orta bakır ped sol pede bağlanır.
Keskin bir bıçak kullanarak olanların bağlantısını kesmek için orta ve sol bakır ped arasındaki bağlantıyı çizin.
Orta ve sağ bakır ped arasına bir lehim damlası ekleyin. I2C adresini 0x77 HEX ayarlamanıza izin verir .
BME280 Sensör Pin Çıkışı
BME280 modülü, kendisini dış dünyaya arayüzleyen yalnızca 4 pime sahiptir. Bağlantılar aşağıdaki gibidir:
VIN modül için 3.3V ila 5V arasında herhangi bir yerde olabilen güç kaynağıdır.
GND Arduino'nun zeminine bağlanmalıdır
SCL I2C arayüzü için bir seri saat pinidir.
SDA I2C arayüzü için bir seri veri pinidir.
BME280 Modülünü Arduino UNO'ya Kablolama
BME280 modülünü Arduino ya bağlayalım.
Bağlantılar oldukça basit. VIN pinini Arduino'daki 5V çıkışına bağlayarak başlayın ve GND'yi toprağa bağlayın.
Şimdi I2C iletişimi için kullanılan pinlerde kaldık. Her Arduino Board'un uygun şekilde bağlanması gereken farklı I2C pinlerine sahip olduğunu unutmayın. R3 düzenine sahip Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı), AREF pinine yakın pin başlıkları üzerindedir. A5 (SCL) ve A4 (SDA) olarak da bilinirler.
Bir Mega'nız varsa, iğneler farklıdır! Dijital 21 (SCL) ve 20 (SDA) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.
SCL
SDA
Arduino Uno
A5
A4
Arduino Nano
A5
A4
Arduino Mega
21
20
Leonardo / Mikro
3
2
Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.
Gerekli kitaplıkları yükleme
Bir BME280 modülüyle iletişim kurmak bir sürü iştir. Neyse ki, Adafruit BME280 Kütüphanesi , sıcaklık, bağıl nem ve barometrik basınç verilerini okumak için basit komutlar verebilmemiz için tüm karmaşıklıkları gizlemek için yazılmıştır.
Kitaplığı kurmak için Sketch> Dahil Et> Kitaplıkları Yönet'e gidin … Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.
Aramanızı ' bme280 ' yazarak filtreleyin . Birkaç giriş olmalı. Arayın Adafruit BME280 Kütüphanesi tarafından Adafruit . Bu girişe tıklayın ve ardından Yükle'yi seçin.
BME280 sensör kitaplığı, Adafruit Sensör desteği arka ucunu kullanır . Bu nedenle, kütüphane yöneticisinde Adafruit Unified Sensor'ü arayın ve onu da kurun (biraz kaydırmanız gerekebilir)
Arduino Kodu - Sıcaklık, Bağıl Nem ve Barometrik Basınç Okuma
Aşağıdaki taslak, BME280 modülünden sıcaklık, bağıl nem ve barometrik basıncın nasıl okunacağı konusunda size tam bir anlayış verecektir ve daha pratik deneyler ve projeler için temel oluşturabilir.
Ardından, SEALEVELPRESSURE_HPArakımı hesaplamak için gerekli değişkeni tanımlıyoruz ve onunla ilgili işlevlere erişebilmemiz için Adafruit_BME280 kitaplığının bir nesnesini oluşturuyoruz.
Kodun kurulum bölümünde PC ile seri iletişimi başlatıyoruz ve begin()fonksiyonu çağırıyoruz .
begin(I2C_ADDR)İşlev parametre olarak modülün I2C adresi alır. Modülünüzün I2C adresi farklıysa veya değiştirdiyseniz , doğru şekilde belirtmeniz gerekir. Bu işlev, verilen I2C Adresiyle I2C arayüzünü başlatır ve çip kimliğinin doğru olup olmadığını kontrol eder. Ardından, yumuşak sıfırlama kullanarak çipi sıfırlar ve uyandıktan sonra kalibrasyon için sensör için bekler.
Serial.begin(9600);
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Kodun döngü bölümünde, BME280 modülünden sıcaklık, bağıl nem ve barometrik basıncı okumak için aşağıdaki işlevleri kullanıyoruz.
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.
Akıllı telefon hava durumu uygulamalarının veya ticari hava istasyonlarının (sizi kilometrelerce uzaktaki istasyonlardan gelen verilerle besleyen) dış mekan planlarınızı mahvetmesine izin vermeyin. Bu IoT projesi ile kendi hava durumu uzmanınız olabilirsiniz!
Bu proje, mevcut WiFi ağına kolayca bağlanan ve bir Web Sunucusu oluşturan kontrol cihazı olarak ESP8266 NodeMCU'yu kullanır. Bağlı herhangi bir cihaz bu web sunucusuna eriştiğinde, ESP8266 BME280'den sıcaklık, nem, barometrik basınç ve irtifa değerlerini okur ve güzel bir arayüzle bu cihazın web tarayıcısına gönderir.
BME280 Sıcaklık, Nem ve Basınç Sensörü
Öncelikle BME280 modülüne hızlıca bir göz atalım.
BME280, Bosch tarafından üretilen yeni nesil dijital sıcaklık, nem ve basınç sensörüdür. BMP180, BMP085 veya BMP183 gibi sensörlerin halefidir.
BME280 modülünün çalışma voltajı 3,3V ila 5V arasındadır - ESP8266 gibi 3,3V mikro denetleyicilerle arayüz oluşturmak için mükemmeldir.
Modül , iletişim için basit bir iki kablolu I2C arayüzüne sahiptir . BME280 modülünün varsayılan I2C adresi 0x76'dır ve bu prosedürle kolayca 0x77 olarak değiştirilebilir .
BME280 Sensörünün ESP8266 NodeMCU'ya Kablolanması
Bağlantılar oldukça basit. ESP8266 NodeMCU üzerindeki 3,3V çıkışa VIN pinini bağlayarak başlayın ve GND'yi toprağa bağlayın .
Ardından, SCL pinini ESP8266'nızdaki I2C clock D1 pinine bağlayın ve SDA pinini ESP8266'nızdaki I2C data D2 pinine bağlayın.
Aşağıdaki şema, her şeyi nasıl bağlayacağınızı gösterir.
Arduino IDE için, Arduino IDE'yi kullanarak ESP8266 NodeMCU'yu programlamanıza izin veren bir eklenti var.
BME280 için Kitaplığı Yükleme
Bir BME280 modülüyle iletişim kurmak bir sürü iştir. Neyse ki, Adafruit BME280 Kütüphanesi , sıcaklık, bağıl nem ve barometrik basınç verilerini okumak için basit komutlar verebilmemiz için tüm karmaşıklıkları gizlemek için yazılmıştır.
Kitaplığı kurmak için Arduino IDE> Taslak> Kitaplığı Dahil Et> Kitaplıkları Yönet'e gidin… Kitaplık Yöneticisinin kitaplıklar dizinini indirmesini ve kurulu kitaplıkların listesini güncellemesini bekleyin.Aramanızı ' bme280 ' yazarak filtreleyin . Birkaç giriş olmalı. Arayın Adafruit BME280 Kütüphanesi tarafından Adafruit . Bu girişe tıklayın ve ardından Yükle'yi seçin.
BME280 sensör kitaplığı, Adafruit Sensör desteği arka ucunu kullanır . Bu nedenle, kütüphane yöneticisinde Adafruit Unified Sensor'ü arayın ve onu da kurun (biraz kaydırmanız gerekebilir)
ESP8266 Web Sunucusunda Sıcaklık, Nem, Basınç ve Rakımı Görüntüleme
Şimdi, ESP8266'mızı İstasyon (STA) moduna yapılandıracağız ve web sayfalarını mevcut ağ altındaki herhangi bir bağlı istemciye sunmak için bir web sunucusu oluşturacağız.
AP / STA modunda ESP8266 ile bir web sunucusu oluşturmayı öğrenmek istiyorsanız, bu eğiticiye göz atın.Krokiyi yüklemeye başlamadan önce, işinize yaraması için bir değişiklik yapmanız gerekir. ESP8266'nın mevcut ağ ile bağlantı kurabilmesi için aşağıdaki iki değişkeni ağ kimlik bilgilerinizle değiştirmeniz gerekir.
constchar* ssid = "YourNetworkName"; // Enter SSID hereconstchar* password = "YourPassword"; //Enter Password here
Krokiyi yükledikten sonra 115200 baud hızında Seri Monitörü açın. Ve NodeMCU üzerindeki EN düğmesine basın. Her şey yolundaysa, yönlendiricinizden alınan dinamik IP adresini çıkaracak ve HTTP sunucusu başlatıldı mesajını gösterecektir .
Ardından, bir tarayıcı yükleyin ve seri monitörde gösterilen IP adresine yönlendirin. ESP8266, BME280'den sıcaklık, nem, basınç ve rakımı gösteren bir web sayfası sunmalıdır.
Ayrıntılı Kod Açıklaması
Çizim, aşağıdaki kitaplıkları dahil ederek başlar.
ESP8266WebServer.h kitaplığı, ağa bağlanmak için çağırdığımız ESP8266'ya özgü WiFi yöntemlerini sağlar. Ayrıca, düşük seviyeli uygulama ayrıntıları hakkında endişelenmenize gerek kalmadan bir sunucu kurmamıza ve gelen HTTP isteklerini işlememize yardımcı olacak bazı yöntemler de mevcuttur.
Wire.h kitaplığı yalnızca BME280 ile değil, herhangi bir I2C cihazıyla iletişim kurar.
Adafruit_BME280.h & Adafruit_Sensor.h kitaplıkları, daha düşük seviyeli işlevleri işleyen donanıma özgü kitaplıklardır.
ESP8266'yı İstasyon (STA) modunda yapılandırırken, mevcut WiFi ağına katılacaktır. Bu nedenle, ona ağınızın SSID ve Parolasını sağlamamız gerekir. Daha sonra web sunucusunu 80 numaralı bağlantı noktasından başlatıyoruz.
/*Put your SSID & Password*/constchar* ssid = "YourNetworkName"; // Enter SSID hereconstchar* password = "YourPassword"; //Enter Password here
ESP8266WebServer server(80);
İç Kurulum () İşlevi
Kurulum () Fonksiyonu İçinde HTTP sunucumuzu çalıştırmadan önce yapılandırıyoruz.
Öncelikle, PC ile seri iletişimi başlatıyoruz ve begin()fonksiyon kullanarak BME nesnesini başlatıyoruz . Verilen I2C Adresi (0x76) ile I2C arayüzünü başlatır ve çip kimliğinin doğru olup olmadığını kontrol eder. Ardından, yumuşak sıfırlama kullanarak çipi sıfırlar ve uyandıktan sonra kalibrasyon için sensör için bekler.
Gelen HTTP isteklerini işlemek için, bir URL'ye basıldığında hangi kodun çalıştırılacağını belirtmemiz gerekir. Bunu yapmak için yöntem kullanırız . Bu yöntem iki parametre alır. Birincisi bir URL yolu ve ikincisi, o URL'ye ulaşıldığında yürütmek istediğimiz fonksiyonun adıdır.
Aşağıdaki kod, bir sunucu kök ( / ) yolunda bir HTTP isteği aldığında handle_OnConnectişlevi tetikleyeceğini belirtir . Belirtilen URL'nin göreli bir yol olduğuna dikkat edin.
server.on("/", handle_OnConnect);
İstemci, ile belirtilenden farklı bir URL isterse sunucunun ne yapması gerektiğini belirtmedik server.on. Bir HTTP durumu 404 (Bulunamadı) ve kullanıcı için bir mesajla yanıt vermelidir. Bunu da bir işleve koyarız ve server.onNotFoundona belirtilmemiş bir URL için istek aldığında yürütmesi gerektiğini söylemek için kullanırız .server.on
server.onNotFound(handle_NotFound);
Şimdi, sunucumuzu başlatmak için, sunucu nesnesi üzerinde başlangıç yöntemini çağırıyoruz.
server.begin();
Serial.println("HTTP server started");
Inside Loop () Fonksiyonu
Gerçek gelen HTTP isteklerini işlemek için, handleClient()yöntemi sunucu nesnesinde çağırmamız gerekir .
server.handleClient();
Daha sonra, server.onhatırladın mı? İle kök (/) URL'ye eklediğimiz bir işlev oluşturmamız gerekiyor.
Bu fonksiyonun başlangıcında sensörden sıcaklık, nem, basınç ve yükseklik okumalarını alıyoruz. HTTP isteğine yanıt vermek için gönderme yöntemini kullanıyoruz. Yöntem farklı bir bağımsız değişken kümesiyle çağrılabilse de, en basit biçimi HTTP yanıt kodu, içerik türü ve içerikten oluşur.Bizim durumumuzda, Tamam yanıtına karşılık gelen 200 kodunu ( HTTP durum kodlarından biri) gönderiyoruz . Ardından, içerik türünü "text / html" olarak belirliyoruz ve son olarak , sıcaklık, nem, basınç ve yükseklik okumalarını içeren dinamik bir HTML sayfası oluşturan özel işlevi çağırıyoruz .SendHTML()
SendHTML()işlevi, ESP8266 web sunucusu bir web istemcisinden bir istek aldığında bir web sayfası oluşturmaktan sorumludur. Yalnızca HTML kodunu büyük bir dizeye birleştirir ve server.send()daha önce tartıştığımız işleve geri döner . İşlev, HTML içeriğini dinamik olarak oluşturmak için sıcaklık, nem, basınç ve yükseklik okumalarını bir parametre olarak alır.
Her zaman göndermeniz gereken ilk metin, HTML kodu gönderdiğimizi belirten <! DOCTYPE> beyanıdır.
Daha sonra, <meta> görüntü alanı öğesi, web sayfasını herhangi bir web tarayıcısında duyarlı hale getirirken, başlık etiketi sayfanın başlığını belirler.
Ardından, web sayfası görünümünü şekillendirmek için biraz CSS'miz var. Helvetica yazı tipini seçiyoruz, görüntülenecek içeriği satır içi blok olarak tanımlıyoruz ve ortaya hizalıyoruz.
Sıcaklık, nem, basınç ve yükseklik okumalarını dinamik olarak görüntülemek için bu değerleri paragraf etiketine koyarız. Derece sembolünü görüntülemek için HTML entity & deg;
Web Sayfasını Daha Profesyonel Görünecek Şekilde Şekillendirme
Bizim gibi programcılar genellikle tasarımdan korkar - ancak biraz çaba, web sayfanızın daha çekici ve profesyonel görünmesini sağlayabilir. Aşağıdaki ekran görüntüsü size ne yapacağımız hakkında temel bir fikir verecektir.
Oldukça şaşırtıcı, değil mi? Daha fazla uzatmadan, önceki HTML sayfamıza biraz stil uygulayalım. Başlamak için, SendHTML()yukarıdaki çizimden işlevi değiştirmek için aşağıdaki kodu kopyalayıp yapıştırın .
Bu işlevi bir öncekiyle karşılaştırmaya çalışırsanız, bu değişiklikler dışında benzer olduklarını anlarsınız.
Web sayfamız için Google tarafından yaptırılan Open Sans web fontunu kullandık. Cihazda aktif internet bağlantısı olmadan Google yazı tipini göremeyeceğinizi unutmayın. Google yazı tipleri anında yüklenir.
Sıcaklık, nem, basınç ve yükseklik okumalarını görüntülemek için kullanılan simgeler aslında <svg> etiketinde tanımlanan Ölçeklenebilir Vektör Grafikleridir (SVG). SVG oluşturmak, herhangi bir özel programlama becerisi gerektirmez. Sayfanız için grafikler oluşturmak için Google SVG Editör'ü kullanabilirsiniz . Bu SVG simgelerini kullandık.
Kodda İyileştirme - Otomatik Sayfa Yenileme
Kodumuzla yapabileceğiniz iyileştirmelerden biri, sensör değerini güncellemek için sayfayı otomatik olarak yenilemektir.
HTML belgenize tek bir meta etiket eklenerek, tarayıcıya sayfayı belirli bir aralıkta otomatik olarak yeniden yüklemesi talimatını verebilirsiniz.
<meta http-equiv="refresh" content="2" >
Bu kodu belgenizin <head> etiketine yerleştirin, bu meta etiket tarayıcıya her iki saniyede bir yenileme talimatı verecektir. Oldukça şık!
Sensör Verilerini AJAX ile dinamik olarak yükleyin
Yoğun bir web sayfanız varsa bir web sayfasını yenilemek çok pratik değildir. Sayfayı yenilemeden sunucudan eşzamansız olarak (arka planda) veri talep edebilmemiz için Eşzamansız Javascript Ve Xml ( AJAX ) kullanmak daha iyi bir yöntemdir .
XMLHttpRequest JavaScript içindeki nesne genellikle web sayfalarında AJAX çalıştırmak için kullanılır. Sessiz GET isteğini sunucu üzerinde gerçekleştirir ve sayfadaki elemanı günceller. AJAX yeni bir teknoloji veya farklı bir dil değil, sadece yeni şekillerde kullanılan mevcut teknolojilerdir. AJAX, bunun yanı sıra şunları da mümkün kılar:
Sayfa yüklendikten sonra bir sunucudan veri isteyin
Sayfa yüklendikten sonra bir sunucudan veri alın
Arka planda bir sunucuya veri gönderin
İşte kullanacağımız AJAX betiği. Bu komut dosyasını </head> etiketini kapatmadan hemen önce yerleştirin.
Komut dosyası <script> etiketiyle başlar. AJAX betiği bir javascript'ten başka bir şey olmadığı için, onu <script> etiketi ile yazmamız gerekiyor. Bu işlevin tekrar tekrar çağrılması için javascript setInterval()işlevini kullanacağız . İki parametre alır - yürütülecek bir işlev ve işlevin ne sıklıkla çalıştırılacağına ilişkin zaman aralığı (milisaniye cinsinden).
Bu betiğin kalbi bir loadDoc()işlevdir. Bu işlevin içinde bir XMLHttpRequest()nesne oluşturulur. Bu nesne, bir web sunucusundan veri talep etmek için kullanılır.
ptr +="function loadDoc() {\n";
ptr +="var xhttp = new XMLHttpRequest();\n";
xhttp.onreadystatechange()Fonksiyon readyState her değiştirdiğinde denir. ReadyState özelliği, XMLHttpRequest'in durumunu tutar. Aşağıdaki değerlerden birine sahiptir.
0: istek başlatılmadı
1: sunucu bağlantısı kuruldu
2: istek alındı
3: işleme isteği
4: istek tamamlandı ve yanıt hazır
Status özelliği, XMLHttpRequest nesnesinin durumunu tutar. Aşağıdaki değerlerden birine sahiptir.
200: "Tamam"
403 yasak"
404 Sayfa Bulunamadı"
ReadyState 4 ve durum 200 olduğunda, yanıt hazırdır. Şimdi, vücut içeriği (tutma sıcaklığı okumaları) güncellenir.
Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.