İçindekiler:
- Adım 1: Donanım Gerekli
- 2. Adım: Donanım Bağlantıları
- 3. Adım: Görev Zamanlama Kodu
- Adım 4: Sıcaklık ve Nem Değerlerini Okuma Kodu
- Adım 5: Web Sunucusu Barındırma Kodu
- 6. Adım: Thing Speak'e Veri Gönderme Kodu
- 7. Adım: Genel Kod
Video: Esp8266 Kullanan Hava Durumu Web Uygulaması: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
SHT 31, Sensirion tarafından üretilen bir Sıcaklık ve Nem Sensörüdür. SHT31, ±%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. İşlevselliği, gelişmiş sinyal işleme ve I2C uyumluluğunu içerir. Enerjiyi verimli hale getiren farklı çalışma modlarına sahiptir.
Bu derste, SHT 31'i Adafruit Huzzah kartı ile arayüzledik. Sıcaklık ve Nem değerlerini okumak için ESP8266 I2C shield kullandık. Bu adaptör, tüm pinlerin kullanıcı tarafından erişilebilir olmasını sağlar ve kullanıcı dostu I2C ortamı sunar.
Adım 1: Donanım Gerekli
Bu görevi tamamlamak için kullanılan donanım:
1. SHT31
2. Adafruit Huzzah ESP8266
3. ESP8266 I2C adaptörü
4. I2C Kablosu
2. Adım: Donanım Bağlantıları
Bu adım, donanım bağlantı kılavuzunu içerir. Bu bölüm temel olarak sensör ve ESP8266 arasında gerekli olan kablo bağlantılarını açıklamaktadır. Bağlantılar aşağıdaki gibidir.
- SHT31, I2C üzerinden çalışır. Yukarıdaki görüntü, ESP8266 ve SHT31 modülü arasındaki bağlantıyı göstermektedir. Bunun için I2C kablosu kullanıyoruz ya da 4 F - F atlama telleri kullanabiliriz.
- bir kablo Vcc için, ikinci kablo GND için ve diğer ikisi sırasıyla SDA ve SCL için kullanılır.
- Bir ESP8266 kartının I2C adaptörüne göre pin2 ve pin 14 sırasıyla SDA ve SCL olarak kullanılır.
3. Adım: Görev Zamanlama Kodu
Bu eğitimde üç işlem gerçekleştiriyoruz.
- I2C protokolünü kullanarak SHT11'den gelen verileri okuyun
- web sunucusunu barındırın ve sensör okumasını web sayfasına gönderin
- sensör okumalarını ThingSpeak API'sine gönderin
Bunu başarmak için TaskScheduler kütüphanesini kullanıyoruz. Üç farklı kontrol işlemine atıfta bulunan üç 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.
- Görev1 zaman aşımına ulaştığında Görev 2 etkinleştirilir ve Görev1 devre dışı bırakılır.
- Bu geri aramada AP'ye bağlanırız, STA ve AP arasındaki geçişi halletmek için iki boole değişkeni alınır
- Görev 2'de 192.168.1.4'te bir web sunucusuna ev sahipliği yapıyoruz. Bu görev, 50 saniye olan zaman aşımına ulaşana kadar her 5 saniyede bir çalışır.
- Görev 2 zaman aşımına ulaştığında Görev 3 etkinleştirilir ve Görev2 devre dışı bırakılır.
- Bu geri aramada STA'ya (yerel IP) bağlanıyoruz
- Görev 3'te sensör okumasını bulut ThingSpeak API'sine gönderiyoruz
- Görev 3, zaman aşımına ulaşana kadar her beş saniyede bir çalışır, yani 50 saniye
- Task3 zaman aşımına ulaştığında Task 1 tekrar etkinleştirilir ve Task3 devre dışı bırakılır.
- Geri arama yapılmadığında veya cihaz boştayken, Hafif Uyku moduna geçerek güç tasarrufu sağlar.
Zamanlayıcı ts;
//i2c için görevler, web sunucusu barındırma ve şey konuşmasında yayınlama
Görev tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); Task tAP(5*TASK_SECOND, TASK_FOREVER, &taskAPCallback, &ts, false, NULL, &taskAPDisable); Görev tWiFi(5* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable); //görevler için zaman aşımı tI2C.setTimeout(10 * TASK_SECOND); tAP.setTimeout(50 * GÖREV_SANİYE); tWiFi.setTimeout(50 * GÖREV_SANİYE); //I2C görevini etkinleştir tI2C.enable();
Adım 4: Sıcaklık ve Nem Değerlerini Okuma Kodu
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, SHT31 için I2C adresidir.
SHT31, 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.
//I2C görev geri çağırma void taskI2CCallback()
{ Serial.println("taskI2CBaşlatıldı"); imzasız int kök[6]; //iletime 0x44'ten başla; Wire.beginTransmission(Adr); //tek seferde yüksek tekrarlanabilirlik iletimi için 0x2C(MSB) ve 0x06(LSB) Wire.write(0x2C); Wire.write(0x06); // iletimi sonlandır Wire.endTransmission(); //0x44 Wire.beginTransmission(Addr)'dan bayt iste; Wire.endTransmission(); Wire.requestFrom(Adr, 6); if(Wire.available() == 6){ //data[0] ve data[1] 16 bit sıcaklık içerir. root[0] = Wire.read(); root[1] =Wire.read(); //data[2] 8 bit CRC kökü içerir[2] = Wire.read(); //data[3] ve data[4] 16 bit nem kökü içerir[3] = Wire.read(); kök[4] = Wire.read(); //data[5] 8 bitlik CRC kökünden oluşur[5] = Wire.read(); } int temp = (kök[0] * 256) + kök[1]; //MSB'yi 8 bit kaydır, LSB ekle float cTemp = -45.0 + (175.0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32.0; //MSB'yi 8 bit kaydır, ona LSB ekle, tam çözünürlüğe göre ayır ve yüzde yüzer nem için *100 = (100.0 * ((root[3] * 256.0) + root[4])) / 65535.0;
sıcaklıkC = cTemp;
sıcaklıkF = fSıcaklık; nemli = nem; Serial.print("Sıcaklık C:\t"); Serial.println(String(cTemp, 1)); Serial.print("Sıcaklık F:\t"); Serial.println(String(fTemp, 1)); Serial.print("Nem:\t "); Serial.println(String(nem, 1)); }
Adım 5: Web Sunucusu Barındırma Kodu
Cihazımızdan bir web sunucusunu statik bir IP üzerinde barındırdık.
- ESP8266WebServer kitaplığı, web sunucusunu barındırmak için kullanılır
- Statik IP'mizi oluşturmak için önce IP adresi, Ağ Geçidi ve alt ağ maskesi tanımlamamız gerekiyor.
- Şimdi Erişim noktanız için ssid ve şifreyi belirtin.
- herhangi bir STA cihazından Erişim noktasına bağlanın
- sunucuyu, internet iletişim protokolü, Köprü Metni Aktarım Protokolü (HTTP) için varsayılan bir bağlantı noktası olan 80 numaralı bağlantı noktasında barındırın
- giriş web sayfası için web tarayıcınıza 192.168.1.4 ve sensör okuma web sayfası için 192.168.1.4/Value girin
//AP için statik IP
IPAdresi ap_local_IP(192, 168, 1, 4);
IPAdresi ap_gateway(192, 168, 1, 254);
IPAdresi ap_subnet(255, 255, 255, 0);//ssid ve STA modunda yerel WiFi için AP
const char WiFissid = "*********";
const char WiFipass = "********";
//ssid ve AP için geçiş
const char APssid = "********";
const char APpass = "********";
ESP8266WebServer sunucusu(80);
geçersiz kurulum{
server.on("/", onHandleDataRoot);
server.on("/Value", onHandleDataFeed);
server.onNotFound(onHandleNotFound);
}
void taskAPCallback(){
Serial.println("taskAP başlatıldı");
server.handleClient();
}
void onHandleDataRoot(){ server.send(200, "text/html", PAGE1); }
geçersiz onHandleDataFeed(){
server.send(200, "metin/html", SAYFA2); }
geçersiz onHandleNotFound(){
String mesajı = "Dosya Bulunamadı\n\n";
mesaj += "URI: ";
mesaj += server.uri();
mesaj += "\nYöntem: ";
mesaj += (server.method() ==
mesaj += "\nArgümanlar: ";
mesaj += server.args();
mesaj += "\n";
server.send(404, "metin/düz", mesaj);}
void reconnectAPWiFi(){
WiFi.mode(WIFI_AP_STA);
gecikme(100);
WiFi.disconnect();
boole durumu = WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet);
if(durum ==doğru){
Serial.print("soft-AP'nin ayarlanması … ");
boole ap = WiFi.softAP(APssid, APpass);
if(ap==doğru){
Serial.print("bağlı:\t");
//IPAdresimIP = WiFi.softAPIP();
Seri.println(WiFi.softAPIP());
}
server.begin();
}
}
6. Adım: Thing Speak'e Veri Gönderme Kodu
Burada sensör okumalarını Thing Speak'e gönderiyoruz. bu görevi tamamlamak için aşağıdaki adımlar gereklidir-
- Şey konuşmasında hesabınızı oluşturun
- Sensör verilerinizi depolamak için kanallar ve alanlar oluşturun
- api'ye GET ve POST isteklerini kullanarak verileri ESP'denthingSpeak'e ve tam tersi şekilde alabilir ve gönderebiliriz.
- verilerimizi ThingSpeak'e aşağıdaki gibi gönderebiliriz
geçersiz görevWiFiCallback(){
WiFiClient wifiClient; if(wifiClient.connect(hostId, 80)){ String postStr = apiKey; postStr +="&field1="; postStr += Dize(nemli); postStr +="&field2="; postStr += Dize(tempC); postStr +="&field3="; postStr += Dize(tempF); postStr += "\r\n\r\n"; wifiClient.print("POST/HTTP/1.1 güncelleme\n"); wifiClient.print("Ana Bilgisayar: api.thingspeak.com\n"); wifiClient.print("Bağlantı: kapat\n"); wifiClient.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); wifiClient.print("İçerik Türü: application/x-www-form-urlencoded\n"); wifiClient.print("İçerik Uzunluğu: "); wifiClient.print(postStr.length()); wifiClient.print("\n\n"); wifiClient.print(postStr); } wifiClient.stop(); }
7. Adım: Genel Kod
Genel kod github depomda mevcut
Kredi:
- Arduino JSON: ArduinoJson
- ESP826WebSunucusu
- Görev Zamanlayıcısı
- 31
- I2C Taraması
- HIH6130 talimatları öğretici
- Tel Arduino
- NCD.io
Ö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
ESP8266'yı Kullanan Çevrimiçi Hava Durumu Görüntüleme Widget'ı: 4 Adım
ESP8266'yı Kullanan Çevrimiçi Hava Durumu Görüntüleme Aracı: Birkaç hafta önce, belirli bir şehir için hava durumu bilgilerini alan ve bir OLED modülünde görüntüleyen çevrimiçi bir hava durumu görüntüleme sisteminin nasıl oluşturulacağını öğrendik. Yeni bir kart olan bu proje için Arduino Nano 33 IoT kartını kullandık