İçindekiler:

Esp8266 Kullanan Hava Durumu Web Uygulaması: 7 Adım
Esp8266 Kullanan Hava Durumu Web Uygulaması: 7 Adım

Video: Esp8266 Kullanan Hava Durumu Web Uygulaması: 7 Adım

Video: Esp8266 Kullanan Hava Durumu Web Uygulaması: 7 Adım
Video: JavaScript ile Güncel Hava Durumu Uygulaması - OpenWeather API Kullanımı 2024, Kasım
Anonim
Esp8266 Kullanan Hava Durumu Web Uygulaması
Esp8266 Kullanan Hava Durumu Web Uygulaması

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. SHT31

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ı
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

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

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 ş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

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-

  • Ş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: