Spisu treści:

Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266: 9 kroków
Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266: 9 kroków

Wideo: Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266: 9 kroków

Wideo: Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266: 9 kroków
Wideo: Zmiana firmware W600/W601, mini WiFi stacja pogodowa DIY z DHT11 z opcją podłączenia Home Assistant 2024, Wrzesień
Anonim
Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266
Podłączanie czujnika DHT11/DHT22 do chmury za pomocą płyty opartej na ESP8266

W poprzednim artykule podłączyłem moją płytkę NodeMCU opartą na ESP8266 z usługą Cloud4RPi. Teraz czas na prawdziwy projekt!

Kieszonkowe dzieci

Wymagania sprzętowe:

  • Dowolna płyta oparta na chipie ESP8266 (na przykład NodeMCU)
  • Czujnik DHT11 lub DHT22

Oprogramowanie i usługi:

  • Biblioteka czujników DHT autorstwa Adafruit - v1.3.7
  • Zunifikowany czujnik Adafruit - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - Panel sterowania w chmurze dla urządzeń IoT
  • PlatformIO IDE dla VSCode

Krok 1: Zmierz temperaturę i wilgotność

Zmierz temperaturę i wilgotność
Zmierz temperaturę i wilgotność

Miałem już czujnik DHT11, więc postanowiłem go wykorzystać do pomiarów temperatury i wilgotności. Wybierzmy bibliotekę Arduino do odczytu danych z czujników.

Rejestr Arduino zawiera kilka bibliotek, z których wybrałem najpopularniejszą.

Zgodnie z ich repozytorium GitHub, jesteśmy również zobowiązani do dodania pakietu Adafruit Unified Sensor.

Krok 2: Utwórz i skonfiguruj projekt

Utwórz i skonfiguruj projekt
Utwórz i skonfiguruj projekt

Opisałem już jak stworzyć projekt PlatformIO i zainstalować biblioteki w pierwszej części. Mój projekt nazywa się „ MyNodeMCU”. Struktura pokazana jest powyżej.

Ten projekt jest nieco zmodyfikowanym przykładem Cloud4RPi. Zdecydowałem się przechowywać token urządzenia i dane uwierzytelniające Wi-Fi w pliku konfiguracyjnym zamiast kodu.

Plik platform.io wygląda następująco:

[platformio]default_envs = nodemcuv2[env:nodemcuv2] platforma = espressif8266 framework = arduino board = nodemcuv2

Krok 3: Zainstaluj biblioteki

Zainstaluj biblioteki
Zainstaluj biblioteki

Instalacja bibliotek jest dość prosta. Możesz to zrobić z interfejsu graficznego IDE lub dodając wymagane nazwy bibliotek do sekcji lib_deps pliku platform.io:

; …lib_deps = cloud4rpi-esp-arduino Biblioteka czujników Adafruit Unified Sensor DHT build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_NAME=\"_YOUR_WIFI_P_ASS_WOO D CLOUD4RPI_TOKEN=\"_TWOJE_URZĄDZENIE_TOKEN_\"

Dodane biblioteki zostaną automatycznie zainstalowane w podfolderze projektu.

Nagłówek main.cpp wygląda następująco:

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

Krok 4: Podłącz czujnik DHT11

Adafruit dostarcza przykład DHTtester.ino podłączenia czujnika.

Ten kod inicjalizuje czujnik i definiuje strukturę do przechowywania wyniku pomiaru (w przypadku, gdyby się powiódł):

#define DHTPIN 2 // Cyfrowy pin podłączony do czujnika DHT#define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.początek(); // … struct DHT_Result { float h; pływak t; }; DHT_Result dhtResult;

Następna funkcja pokazuje, jak odczytać dane z czujnika i zapisać je w opisanej powyżej strukturze danych

void readSensors() { float h = dht.readHumidity(); // Odczytaj temperaturę w stopniach Celsjusza (domyślnie) float t = dht.readTemperature();

// Sprawdź, czy jakiekolwiek odczyty nie powiodły się i wyjdź

if (isnan(h) || isnan(t)) { Serial.println(F("Nie udało się odczytać z czujnika DHT!")); powrót; } dhtResult.h = h; dhtWynik.t = t; }

Krok 5: Wysyłanie danych do chmury

Gdy już mamy te dane, kolejnym krokiem jest przesłanie ich do usługi Cloud4RPi.

Strona Cloud4RPi for Arduino opisuje bibliotekę API, która jest zbiorem metod służących do:

  • tworzyć, czytać i aktualizować zmienne,
  • wyślij wartości zmiennych do chmury za pomocą protokołu MQTT.

Biblioteka obsługuje trzy typy zmiennych: Bool, Numeric i String.

Obieg pracy biblioteki rozpoczyna się od utworzenia instancji API przy użyciu Device Token ze strony cloud4rpi.io (szczegóły w części 1 artykułu).

#jeśli zdefiniowano(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #endif

Następnie zadeklaruj zmienne dla odczytów DHT11:

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

Następnie pobierz dane z czujnika, zapisz je w zmiennych i opublikuj dane w Cloud4RPi:

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

Temperatura i wilgotność nie zmieniają się szybko, więc wysyłanie więcej niż jednej wartości na 5 minut nie jest wymagane.

Krok 6: Diagnostyka

Cloud4RPi obsługuje dane diagnostyczne wraz z wartościami zmiennych. Użyłem uptime, siły sygnału Wi-Fi i adresu IP jako danych diagnostycznych:

c4r.declareDiagVariable("Adres_IP");c4r.declareDiagVariable("RSSI"); // Siła sygnału WiFi c4r.declareDiagVariable("Uptime");

Uwaga: funkcja millis, której używam, aby uzyskać czas pracy bez przestojów, resetuje się do zera co ~50 dni. Co jest więcej niż wystarczające dla mojego projektu.

Poniższy kod ustawia wartości zmiennych diagnostycznych:

c4r.setDiagVariable("RSSI", (String)WiFi. RSSI() + " dBm");c4r.setDiagVariable("Adres_IP", WiFi.localIP().toString()); c4r.setDiagVariable("Uptime", uptimeHumanReadable(currentMillis)); c4r.publishDiag();

Funkcja uptimeHumanReadable konwertuje milisekundy do wygodnej postaci:

String uptimeHumanReadable(unsigned long milisekund) { static char uptimeStr[32]; długie sekundy bez znaku = milisekundy / 1000; długie minuty bez znaku = s / 60; unsigned int godz. = min / 60; unsigned int dni = godziny / 24; sek -= min * 60; min -= godziny * 60; godziny -= dni * 24; sprintf(uptimeStr, "%d dni %2.2d:%2.2d:%2.2d", (bajt)dni, (bajt)godziny, (bajt)minuty, (bajt)sekundy); return String(uptimeStr); }

Funkcja wypisuje ciąg taki jak ten 5 dni 10:23:14 zamiast dziwnie dużej liczby.

Krok 7: Rozpocznij i debuguj projekt

Rozpocznij i debuguj projekt
Rozpocznij i debuguj projekt

Po skompilowaniu utworzonego kodu i wgraniu go do NodeMCU urządzenie łączy się z usługą w chmurze i zaczyna wysyłać dane.

Szczegółowość rejestrowania można zwiększyć, ustawiając zmienną preprocesora CLOUD4RPI_DEBUG na 1 (dodaj -D CLOUD4RPI_DEBUG=1 do sekcji build_flags w pliku platform.io).

Następnie otwórz witrynę cloud4rpi.io i zauważ nowe urządzenie online. Otwórz go, aby zobaczyć wszystkie wartości zmiennych otrzymane z urządzenia: czujnik i diagnostyka.

Krok 8: Konfiguracja pulpitu nawigacyjnego

Konfiguracja pulpitu nawigacyjnego
Konfiguracja pulpitu nawigacyjnego

Na tym etapie połączenie danych z chmurą działa. Teraz skonfigurujmy wizualną reprezentację danych.

Użyłem interfejsu konfiguracji Dashboard do stworzenia następującego dashboardu.

Pulpit nawigacyjny można udostępniać, więc od razu udostępniam go mojemu przyjacielowi.

Krok 9: Wniosek

Wniosek
Wniosek

Pełny kod projektu jest dostępny w segmie.

To wszystko na teraz!

Pytania i sugestie mile widziane w komentarzach.

Zalecana: