İç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
- Adım 6: Thingspeak Kurulumu
- 7. Adım: Thing Speak'e Veri Gönderme Kodu
- Adım 8: Genel Kod
- 9. Adım: Krediler
Video: ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI: 9 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
Elektronik eşyalarımı kurcalarken aklıma web tabanlı hava durumu uygulaması yapma fikri geldi. Bu web uygulaması, gerçek zamanlı sıcaklık ve nem verilerini almak için SHT31 sensörünü kullanır. Projemizi ESP8266 WiFi modülü üzerinde konuşlandırdık. Çevrimiçi veya çevrimdışı! Endişelenmenize gerek yok, ister çevrimiçi ister çevrimdışı olun, hava durumu güncellemelerini her yerden ve her zaman alacaksınız. Bu web uygulaması, verileri yerel web sunucusuna ve buluta gönderir. Bulut işlemleri için ThingSpeak API kullanıyoruz. SHT31, verileri sensörden almak için I2C'yi kullanır.
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:
- SHT 31
- Adafruit Huzzah ESP8266
- ESP8266 I2C adaptörü
- 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 sunucusunu barındırı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 bildirimde 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.
geçersiz taskI2CCallback();
geçersiz görevI2CDisable(); geçersiz görevAPCallback(); geçersiz görevAPDisable(); geçersiz görevWiFiCallback(); geçersiz görevWiFiDisable(); //i2c için görevler, web sunucusunu barındırma ve şey konuşmada yayınlama Task tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); 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("taskI2CStarted"); 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 şifre belirtin. Herhangi bir STA cihazından Erişim noktasına bağlanın
- sunucuyu internet iletişim protokolü için varsayılan bağlantı noktası olan 80 numaralı bağlantı noktasında barındırın, Köprü Metni Aktarım Protokolü (HTTP) 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/Değer girin
//APIPAdresi için statik IP ap_local_IP(192, 168, 1, 4);IPAdresi ap_gateway(192, 168, 1, 254); IPAdresi ap_subnet(255, 255, 255, 0); // STA modunda yerel WiFi için ssid ve 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); } void onHandleDataFeed(){ server.send(200, "metin/html", SAYFA2); } void onHandleNotFound(){ String iletisi = "Dosya Bulunamadı\n\n"; mesaj += "URI: "; mesaj += server.uri(); mesaj += "\nYöntem: "; mesaj += (server.method() == HTTP_GET)?"GET":"POST"; 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(status ==true){ Serial.print("soft-AP ayarı … "); boole ap = WiFi.softAP(APssid, APpass); if(ap==true){ Serial.print("bağlı:\t"); //IPAdresimIP = WiFi.softAPIP(); Seri.println(WiFi.softAPIP()); } server.begin();
}
Adım 6: Thingspeak Kurulumu
ThingSpeak bir IoT platformudur. ThingSpeak, sensör verilerini bulutta toplamanıza ve saklamanıza izin veren ücretsiz bir web hizmetidir.
Bu Adımda, Thing Speak hesabınızı oluşturmanız için size kısa bir prosedür vereceğim.
- ThingSpeak'te yeni Kullanıcı Hesabı için kaydolun
- Kanallar, Kanallarım ve ardından Yeni Kanal'ı seçerek yeni bir Kanal oluşturun
- Alanlarınızı düzenleyin
- Bu alanlar sensör verilerinizi içerir
- API Anahtarını Yaz ve Kanal Kimliğini not edin
- Arduino taslağınızda Arduino için ThingSpeak kitaplığını kullanabilir veya verileri doğrudan ThingSpeak API'sine POST yapabilirsiniz.
- sonraki adım, içeriğin Thing Speak API'ye gönderilmesi hakkında ayrıntılı bilgi verir
7. 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-
- Hesabınızı bir şey konuşarak 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
id göreviWiFiCallback(){ 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(); }
Adım 8: Genel Kod
Genel kod GitHub depomda mevcut
9. Adım: Krediler
- Arduino JSON'u
- ESP826WebSunucusu
- Görev Zamanlayıcısı
- 31
- I2C Taraması
- HIH6130 talimatları öğretici
- Tel
- NCD.io
Önerilen:
M5STACK Visuino Kullanarak M5StickC ESP32 Üzerinde Sıcaklık, Nem ve Basıncı Görüntüleme - Yapması Kolay: 6 Adım
M5STACK Visuino Kullanarak M5StickC ESP32 Üzerinde Sıcaklık, Nem ve Basıncı Görüntüleme - Yapması Kolay: Bu eğitimde, ESP32 M5Stack StickC'yi Arduino IDE ve Visuino ile ENV sensörünü (DHT12, BMP280, BMM150)
ESP8266 ve AskSensors IoT Platformunu Kullanarak DHT Sıcaklık ve Nem İzleme: 8 Adım
ESP8266 ve AskSensors IoT Platformunu Kullanarak DHT Sıcaklık ve Nem İzleme: Önceki bir talimatta, ESP8266 nodeMCU ve AskSensors IoT platformuna başlamak için adım adım bir kılavuz sundum.Bu eğitimde, bir DHT11 sensörünü bağlıyorum MCU düğümüne. DHT11, yaygın olarak kullanılan bir Sıcaklık ve nem
ATLAS İLETKENLİK SENSÖRÜNÜN OTOMATİK SICAKLIK KOMPANZASYONU: 4 Adım
ATLAS İLETKENLİK SENSÖRÜNÜN OTOMATİK SICAKLIK KOMPANZASYONU: Bu projede Atlas Scientific'in iletkenlik sensörünü otomatik olarak sıcaklık kompanzasyonu yapacağız. Sıcaklık değişiklikleri, sıvıların iletkenliği/toplam çözünmüş katılar/tuzluluğu üzerinde bir etkiye sahiptir ve bunu telafi ederek
Kablosuz Nem Monitörü (ESP8266 + Nem Sensörü): 5 Adım
Kablosuz Nem Monitörü (ESP8266 + Nem Sensörü): Maydanozu saksıda alıyorum ve çoğu gün toprak kuruydu. Bu yüzden, ne zaman su dökmem gerektiğini kontrol etmek için, maydanozlu tencerede toprağın nemini algılamak için bu projeyi yapmaya karar verdim. Sanırım, bu sensör (Kapasitif nem sensörü v1.2) iyi çünkü
DHT 11 İLE SICAKLIK VE NEM ÖLÇÜMÜ: 5 Adım
DHT 11 İLE SICAKLIK VE NEM ÖLÇÜMÜ: Bu projede, Arduino (Nano) kullanarak ortam sıcaklığımızı ve nemi ölçmek için DHT 11 sıcaklık ve nem sensörü kullanıyorum. (ölçüm):0,3 mACUR