İçindekiler:

DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Kartla Bağlama: 9 Adım
DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Kartla Bağlama: 9 Adım

Video: DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Kartla Bağlama: 9 Adım

Video: DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Kartla Bağlama: 9 Adım
Video: ESP8266 ESP01 DHT11 Sıcaklık Nem Sensör Modülünü Programlama | UzakXY | FLProg 2024, Eylül
Anonim
Bir DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Anakartla Bağlama
Bir DHT11/DHT22 Sensörünü Buluta ESP8266 Tabanlı Bir Anakartla Bağlama

Bir önceki yazıda ESP8266 tabanlı NodeMCU kartımı bir Cloud4RPi hizmetine bağlamıştım. Şimdi gerçek bir proje zamanı!

Gereçler

Donanım Gereksinimleri:

  • ESP8266 yongasına dayalı herhangi bir kart (örneğin, NodeMCU)
  • Bir DHT11 veya DHT22 sensörü

Yazılım ve hizmetler:

  • Adafruit'ten DHT sensör kütüphanesi - v1.3.7
  • Adafruit Birleşik Sensör - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - IoT cihazları için bulut kontrol paneli
  • VSCode için PlatformIO IDE

Adım 1: Sıcaklığı ve Nemi Ölçün

Sıcaklık ve Nem Ölçümü
Sıcaklık ve Nem Ölçümü

Zaten bir DHT11 sensörüm vardı, bu yüzden sıcaklık ve nem ölçümleri için kullanmaya karar verdim. Sensör verilerini okumak için bir Arduino kütüphanesi seçelim.

Arduino kayıt defteri, en popüler olanı seçtiğim birkaç kitaplık içeriyor.

GitHub deposuna göre ayrıca bir Adafruit Birleşik Sensör paketi eklememiz gerekiyor.

Adım 2: Proje Oluşturun ve Yapılandırın

Proje Oluştur ve Yapılandır
Proje Oluştur ve Yapılandır

İlk bölümde PlatformIO projesinin nasıl oluşturulacağını ve kitaplıkların nasıl kurulacağını zaten anlatmıştım. Projemin adı “MyNodeMCU”. Yapı yukarıda gösterilmiştir.

Bu proje biraz değiştirilmiş bir Cloud4RPi örneğidir. Cihaz belirtecini ve Wi-Fi kimlik bilgilerini kod yerine yapılandırma dosyasında saklamaya karar verdim.

platform.io dosyası aşağıdaki gibi görünür:

[platformio]default_envs = nodemcuv2[env:nodemcuv2] platform = espressif8266 çerçeve = arduino panosu = nodemcuv2

3. Adım: Kitaplıkları Yükleyin

Kitaplıkları Yükle
Kitaplıkları Yükle

Kütüphanelerin kurulumu oldukça basittir. Bunu IDE'nin grafik arayüzünden veya platform.io dosyasının lib_deps bölümüne gerekli kitaplık adlarını ekleyerek yapabilirsiniz:

; …lib_deps = cloud4rpi-esp-arduino Adafruit Birleşik Sensör DHT sensör kitaplığı build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_NAME=\"_YOUR_WIFI_\" -DASS_WIFI_\" -DASS_WIFI_\" -D MQTT_MAX_TRANSFER_SIZE=128 D CLOUD4RPI_TOKEN=\"_YOUR_DEVICE_TOKEN_\"

Eklenen kitaplıklar, bir projenin alt klasörüne otomatik olarak yüklenecektir.

main.cpp başlığı aşağıdaki gibi görünür:

#include #include #include #include "DHT.h"

Adım 4: Bir DHT11 Sensörü Bağlayın

Adafruit, bir sensör bağlantısının DHTtester.ino örneğini sağlar.

Bu kod, bir sensörü başlatır ve ölçüm sonucunu saklamak için bir yapı tanımlar (başarılı olması durumunda):

#define DHTPIN 2 // DHT sensörüne bağlı dijital pin#define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.begin(); // … struct DHT_Result { float h; yüzer t; }; DHT_Result dhtResult;

Sonraki fonksiyon, sensör verilerinin nasıl okunacağını ve yukarıda açıklanan veri yapısında nasıl saklanacağını gösterir.

void readSensors() { float h = dht.readHumidity(); // Sıcaklığı Celsius (varsayılan) olarak oku float t = dht.readTemperature();

// Herhangi bir okumanın başarısız olup olmadığını kontrol edin ve çıkın

if (isnan(h) || isnan(t)) { Serial.println(F("DHT sensöründen okunamadı!")); dönüş; } dhtResult.h = h; dhtResult.t = t; }

Adım 5: Verileri Buluta Gönderme

Bu verilere sahip olduktan sonraki adım, onu Cloud4RPi hizmetine göndermektir.

Arduino için Cloud4RPi sayfası, aşağıdakiler için kullanılan bir dizi yöntem olan kütüphane API'sini açıklar:

  • değişkenleri oluşturmak, okumak ve güncellemek,
  • MQTT protokolünü kullanarak buluta değişken değerler gönderin.

Kitaplık üç değişken türünü destekler: Bool, Numeric ve String.

Kitaplık iş akışı, cloud4rpi.io web sitesindeki Aygıt Simgesini kullanarak bir API örneği oluşturmakla başlar (ayrıntılar için makalenin 1. bölümüne bakın).

#if tanımlı(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #endif

Ardından, DHT11 okumaları için değişkenleri tanımlayın:

c4r.declareNumericVariable("DHT11_Temp");c4r.declareNumericVariable("DHT11_Hum");

Ardından sensörden veri alın, bunları değişkenlere kaydedin ve verileri Cloud4RPi'de yayınlayın:

c4r.setVariable("DHT11_Temp", dhtResult.t);c4r.setVariable("DHT11_Hum", dhtResult.h); c4r.publishData();

Sıcaklık ve nem hızla değişmez, bu nedenle 5 dakikada birden fazla değer gönderilmesine gerek yoktur.

6. Adım: Teşhis

Cloud4RPi, değişken değerlerle birlikte tanılama verilerini destekler. Tanılama verileri olarak çalışma süresini, Wi-Fi sinyal gücünü ve IP adresini kullandım:

c4r.declareDiagVariable("IP_Address");c4r.declareDiagVariable("RSSI"); // WiFi sinyal gücü c4r.declareDiagVariable("Çalışma Süresi");

Not: Çalışma süresi sıfırlamalarını her ~50 günde bir sıfırlamak için kullandığım millis işlevi. Bu benim projem için fazlasıyla yeterli.

Aşağıdaki kod, tanılama değişkeni değerlerini ayarlar:

c4r.setDiagVariable("RSSI", (String)WiFi. RSSI() + " dBm");c4r.setDiagVariable("IP_Adresi", WiFi.localIP().toString()); c4r.setDiagVariable("Çalışma Süresi", uptimeHumanReadable(currentMillis)); c4r.publishDiag();

uptimeHumanReadable işlevi, milisaniyeleri uygun bir forma dönüştürür:

String uptimeHumanReadable(işaretsiz uzun milisaniye) { static char uptimeStr[32]; imzasız uzun saniye = milisaniye / 1000; imzasız uzun dakika = sn / 60; imzasız int saat = dakika / 60; imzasız int gün = saat / 24; saniye -= dakika * 60; dakika -= saat * 60; saat -= gün * 24; sprintf(uptimeStr, "%d gün %2.2d:%2.2d:%2.2d", (bayt)gün, (bayt)saat, (bayt)dakika, (bayt)sn); dönüş String(uptimeStr); }

İşlev, garip bir büyük sayı yerine 5 gün 10:23:14 gibi bir dize çıkarır.

7. Adım: Projeyi Başlatın ve Hata Ayıklayın

Projeyi Başlatın ve Hata Ayıklayın
Projeyi Başlatın ve Hata Ayıklayın

Oluşturulan kodu derleyip NodeMCU'ya flashladıktan sonra cihaz bir bulut servisine bağlanır ve veri göndermeye başlar.

CLOUD4RPI_DEBUG önişlemci değişkenini 1 olarak ayarlayarak günlük ayrıntı düzeyini artırabilirsiniz (platform.io dosyasındaki build_flags bölümüne -D CLOUD4RPI_DEBUG=1 ekleyin).

Ardından cloud4rpi.io sitesini açın ve yeni cihazı çevrimiçi olarak görün. Cihazdan alınan tüm değişken değerleri görmek için açın: sensör ve teşhis.

Adım 8: Pano Yapılandırması

Pano Yapılandırması
Pano Yapılandırması

Bu adımda, buluta veri bağlantısı çalışır durumdadır. Şimdi, verilerin görsel temsilini yapılandıralım.

Aşağıdaki panoyu oluşturmak için Pano yapılandırma kullanıcı arayüzünü kullandım.

Pano paylaşılabilir, bu yüzden anında arkadaşımla paylaşıyorum.

9. Adım: Sonuç

Çözüm
Çözüm

Tam projenin kodu, özde mevcuttur.

Şimdilik bu kadar!

Sorular ve öneriler yorumlara açıktır.

Önerilen: