İçindekiler:

ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI: 9 Adım
ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI: 9 Adım

Video: ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI: 9 Adım

Video: ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI: 9 Adım
Video: Arduino ESP8266 Kullanımı - Thingspeak Nasıl Kullanılır? 2024, Kasım
Anonim
ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI
ESP8266 KULLANARAK THINGSPEAK SICAKLIK VE NEM UYGULAMASI

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

Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli
Donanım Gerekli

Bu görevi tamamlamak için kullanılan donanım:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. ESP8266 I2C adaptörü
  4. I2C Kablosu

2. Adım: Donanım Bağlantıları

Donanım Bağlantıları
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.

  1. 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.
  2. 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
  3. 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

Görev Zamanlama Kodu
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 Okuma Kodu
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

Web Sunucusu Barındırma Kodu
Web Sunucusu Barındırma Kodu
Web Sunucusu Barındırma Kodu
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 Kurulumu
Thingspeak Kurulumu
Thingspeak Kurulumu
Thingspeak Kurulumu
Thingspeak Kurulumu
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

Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
Thing Speak'e Veri Gönderme Kodu
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: