W tym wpisie pokażę jak podłączyć czujnik temperatury DHT11 do płytki WeMos D1 oraz stworzyć prosty serwer HTTP, który będzie wyświetlał aktualną temperaturę na stronie internetowej.
Jeśli jesteś nowy w programowaniu, na początku możesz mieć trudnośći. Ale, jeśli jesteś gotowy na wyzwanie, zyskasz nową całkiem przydatną wiedzę. Programowałeś wcześniej w Arduino IDE, to też świetnie małe ćwiczenie przyda Ci sie do utrwalenia wiedzy!
Aby zbudować ten mini projekt, potrzebujesz następujących elementów:
1 x WeMos D1 mini | |
1 x Czujnik DHT1 | |
1 x Mini Płytka Prototypowa | |
1 x Zestaw Kabli Połączeniowych | |
1 x Kabel USB do Komputera | |
1. Podłącz Wemos do komputera za pomocą kabla micro-USB

2. Utwórz nowy szkic i skonfiguruj Adruino IDE

- Z narzędzi wybierz kolejno Płytka -> ESP8266 Boards (3.0.2) -> LOLIN(WEMOS D1 mini Lite)

- Następnie z Narzędzi wybierz Zarządaj Bibliotekami

- W Menedżerze Bibliotek wszukaj biblioteke DHT11 adafruit i zainstaluj ją.

- Instalujemy wszystko

3. Zaprogramuj działanie w IDE
W tej części omówimy Kod naszego programu.
- Import Bibliotek
1 2 3 4 5 6 7 |
// Import Bibliotek #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <DHT.h> |
Sekcja w której zaimportowane są biblioteki potrzebne do komunikacji z WiFi, serwerem HTTP oraz czujnikiem temperatury DHT11.
- Definiowanie zmiennych
8 9 10 11 12 13 |
// Uwaga! DHTPIN 2 - to na Wemosie d1 mini GPIO4 !!! #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); |
W tej sekcji definiujemy stałe, takie jak pin, na którym podłączony jest czujnik DHT11 oraz typ czujnika i na tej podstawie tworzymy obiektu DHT
Ważne aby przed podłączeniem czujnika sprawdzić dokładnie pinout Wemosa i czujnika
- Wifi oraz serwer
14 15 16 17 18 19 |
// Ustawianie połaczenia Wifi oraz tworzenie obiektu serwera const char* ssid = "Moja sieć wifi"; const char* haslo = "Hasło"; ESP8266WebServer server(80); |
Na lini 16 i 17 tworzymy zmienne ssid i haslo, które przechowują nazwę sieci WiFi oraz hasło. Dalej tworzymy obiektu serwera HTTP na porcie 80.
- Funkcja setup
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// Interfejs szeregowy Połączenie z Wifi oraz serwer void setup() { Serial.begin(115200); delay(10); dht.begin(); WiFi.begin(ssid, haslo); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Łącze z wifi....."); } Serial.println("Połączono z siecią"); server.on("/", stronka); server.begin(); Serial.println("Serwer HTTP uruchomiony"); } |
Funkcja setup() to specjalna funkcja, która jest uruchamiana raz po załadowaniu kodu na płytkę. Służy ona do inicjalizacji różnych elementów konstrukcyjnych, takich jak interfejs szeregowy, czujnik DHT11, połączenie z siecią WiFi, serwer HTTP.
Zaczynamy od inicjalizowania interfejsu szeregowego w nawiasie podajemy prędkość Serial.begin(115200);. Pozwoli nam to na komunikacje płytki z Arduino i ewentualny debug w przypadku problemów. Dodajemy opóźnienie 10ms: delay(10); tak na wszelki wypadek 🙂 .W następnym kroku przygotowujemy czujnik DHT do pracy odwołując sie do biblioteki Adafruit którą wcześniej ściągneliśmy – w lini 25 używamy metody dht.begin();.
Kolejnym przystankiem będzie połaczenie sie wifi WiFi.begin(ssid, haslo); – pobieramy wcześniej zdefiniowane zmienne ssid oraz haslo i inicjalizujemy połącznie.
Pętla while pozwoli nam sprawdzić status połącznia a metoda Serial.println() wyświetli nam status w Monitorze portu szeregowego Arduino IDE.
W lini 32 za pomocą metody server z biblioteki ESP8266WebServer ustawiamy endpoint, który będzie obsługiwany przez funkcję stronka(), odpowiedzialna jest ona za generowanie i wysyłanie treści strony HTML.
Na deser server.begin(); uruchomi serwer na porcie 80 który zdefiniowaliśmy w sekcji Wifi oraz serwer
- Funkcja loop()
37 38 39 40 |
void loop() { server.handleClient(); } |
Funkcja loop() jest specjalną funkcją wykonywaną w pętli po zakończeniu funkcji setup(). Będzie nam służyć do odczytywania aktualnej wartości z czujnika.
Funkcja handleClient() jest metodą z biblioteki ESP8266WebServer i pozwala serwerowi na obsługę klientów, którzy łączą się z serwerem HTTP.
Jeśli klient wysłał żądanie, serwer przeszuka swoją listę endpointów ustawionych w funkcji setup(), jeśli znajdzie odpowiedni endpoint o nazwie stronka i wywoła funkcje o tej samej nazwie.
- Funkcja stronka
41 42 43 44 45 46 47 48 49 50 51 |
void stronka() { float hum = dht.readHumidity(); float temp = dht.readTemperature(); String content = "<html><body>"; content += "<h1>Temperatura i wilgotność</h1>"; content += "<p>Temperatura: " + String(temp) + " ℃</p>"; content += "<p>Wilgotność: " + String(hum) + " %</p>"; content += "</body></html>"; server.send(200, "text/html", content); } |
Kod funkcji stronka() działa w następujący sposób:
Odczytujemy wartości wilgotności oraz temperatury i zapisujemy do zmiennych float hum i temp.
Tworzymy odpowiedź w formacie HTML linie od 44 do 48.
Wysyłamy odpowiedź do klienta server.send(200, “text/html”, content)
4. Podłącz swój czujnik do Wemos-a
Podłącz czujnik DHT11 do płytki Wemos zgodnie z poniższym schematem połączeń:
- Pin 1 (VCC) czujnika DHT11 do pinu 5V na Wemos
- Pin 2 (Data) czujnika DHT11 do pinu D2 czyli GPIO4 na Wemos d1 w wersji mini
- Pin 4 (GND) czujnika DHT11 do pinu GND na Wemos

Jeśli nie jesteś pewny swojej wersji wemosa d1 mini odwiedź stronę wemos.cc
5. Kompiluj, prześlij, uruchom
Oto nasz cały kod w arduino IDE Teraz skompilujemy go i prześlemy do naszej płytki.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// Import Bibliotek #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <DHT.h> // Uwaga! DHTPIN 2 - to na Wemosie d1 mini GPIO4 !!! #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // Ustawianie połaczenia Wifi oraz tworzenie obiektu serwera const char* ssid = "Moja sieć wifi"; const char* haslo = "Hasło"; ESP8266WebServer server(80); // Interfejs szeregowy Połączenie z Wifi oraz serwer void setup() { Serial.begin(115200); delay(10); dht.begin(); WiFi.begin(ssid, haslo); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Łącze z wifi....."); } Serial.println("Połączono z siecią"); server.on("/", stronka); server.begin(); Serial.println("Serwer HTTP uruchomiony"); } void loop() { server.handleClient(); } void stronka() { float hum = dht.readHumidity(); float temp = dht.readTemperature(); String content = "<html><body>"; content += "<h1>Temperatura i wilgotność</h1>"; content += "<p>Temperatura: " + String(temp) + " ℃</p>"; content += "<p>Wilgotność: " + String(hum) + " %</p>"; content += "</body></html>"; server.send(200, "text/html", content); } |
- Przesyłamy szkic do wemosa z menu Szkic wybieramy Prześlij

- Uruchamiamy Monitor portu szeregowego

- Sprawdzamy status

Zwracamy uwagę na ustawienie szybkości portu szeregowego , powinno być 115200.
Jeśli w monitorze portu widoczne jest Serwer HTTP uruchomiony to prawdopodobnie wszystko działa.
6. Świętuj sukces !
Teraz pozostaje nam odnaleźć nasze urządzenie w sieci, używamy do tego swojego ulubionego oprogramowania np: Advanced Ip Scanner lub korzystamy z routera aby ustalić IP Wemosa.
Otwieramy przeglądarke i wpisujemy IP

Podsumowanie
W tym poradniku nauczyliśmy się jak połączyć płytkę Wemos z czujnikiem DHT11. Sami zaprogramowaliśmy nasz mikrokontroler, a przy okazji dowiedzieliśmy się jak skonfigurować połączenie WiFi oraz jak utworzyć prosty serwer HTTP. Poznaliśmy także podstawy obsługi czujnika DHT11 z biblioteki Adafruit oraz jak generować odpowiedzi HTTP dla klientów. Zaimplementowaliśmy wyświetlanie aktualnej temperatury na stronie www.
Stworzyliśmy projekt który jest dobrym punktem wyjścia do rozbudowy o dodatkowe funkcjonalności.
Dzięki za poświęcenie czasu mam nadzieje że nauczyłeś się czegoś nowego!