
Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:02

Podczas majsterkowania przy elektronice wpadłem na pomysł stworzenia internetowej aplikacji pogodowej. Ta aplikacja internetowa wykorzystuje czujnik SHT31 do pobierania danych o temperaturze i wilgotności w czasie rzeczywistym. Nasz projekt wdrożyliśmy na module WiFi ESP8266. Online lub offline! Nie musisz się martwić, niezależnie od tego, czy jesteś online, czy offline, będziesz otrzymywać aktualne informacje o pogodzie z dowolnego miejsca i o każdej porze. Ta aplikacja internetowa publikuje dane na lokalnym serwerze internetowym oraz w chmurze. Do operacji w chmurze używamy ThingSpeak API. SHT31 używa I2C do pobierania danych z czujnika.
SHT 31 to czujniki temperatury i wilgotności firmy Sensirion. SHT31 zapewnia wysoki poziom dokładności około ±2% RH. Jego zakres wilgotności wynosi od 0 do 100%, a zakres temperatury wynosi od -40 do 125 °C. Jest znacznie bardziej niezawodny i szybki dzięki 8-sekundowemu czasowi reakcji czujnika. Jego funkcjonalność obejmuje ulepszone przetwarzanie sygnału i kompatybilność I2C. Posiada różne tryby działania, dzięki czemu jest energooszczędny.
W tym samouczku połączyliśmy SHT 31 z płytą Adafruit Huzzah. Do odczytu wartości temperatury i wilgotności użyliśmy nakładki ESP8266 I2C. Ten adapter sprawia, że wszystkie piny są dostępne dla użytkownika i oferuje przyjazne dla użytkownika środowisko I2C.
Krok 1: Wymagany sprzęt



Sprzęt używany do wykonania tego zadania:
- SHT 31
- Adafruit Huzzah ESP8266
- ESP8266 adapter I2C
- Kabel I2C
Krok 2: Połączenia sprzętowe

Ten krok zawiera przewodnik podłączania sprzętu. Ta sekcja zasadniczo wyjaśnia połączenia okablowania wymagane między czujnikiem a ESP8266. Połączenia są następujące.
- SHT31 działa przez I2C. Powyższy obrazek pokazuje połączenie między ESP8266 a modułem SHT31. Używamy do tego kabla I2C albo możemy użyć 4 przewodów połączeniowych F do F.
- jeden przewód jest używany do Vcc, drugi przewód do GND, a pozostałe dwa do SDA i SCL
- Zgodnie z adapterem I2C pin2 i pin 14 płyty ESP8266 są używane odpowiednio jako SDA i SCL
Krok 3: Kod do planowania zadań

W tym samouczku wykonujemy trzy operacje
- Odczytaj dane z SHT11 za pomocą protokołu I2C
- hostować serwer sieciowy i umieszczać odczyt z czujnika na stronie internetowej
- opublikuj odczyty czujnika w ThingSpeak API
Aby to osiągnąć, korzystamy z biblioteki TaskScheduler. Zaplanowaliśmy trzy różne zadania dotyczące trzech różnych operacji kontrolnych. odbywa się to w następujący sposób
- Zadanie 1 polega na odczytaniu wartości czujnika, to zadanie działa przez 1 sekundę, aż do osiągnięcia limitu czasu 10 sekund.
- Gdy zadanie 1 osiągnie swój limit czasu, zadanie 2 jest włączone, a zadanie 1 jest wyłączone.
- Łączymy się z AP w tym wywołaniu zwrotnym. Dwie zmienne logiczne są brane pod uwagę, aby zająć się przełączaniem między STA i AP
- W Zadaniu 2 hostujemy serwer WWW pod adresem 192.168.1.4. To zadanie jest uruchamiane co 5 sekund, aż do osiągnięcia limitu czasu, który wynosi 50 sekund
-
Gdy zadanie 2 osiągnie limit czasu, zadanie 3 jest włączone, a zadanie 2 jest wyłączone.
- Łączymy się ze STA(lokalne IP) w tym calbackW zadaniu 3 wysyłamy odczyt czujnika do Cloud ThingSpeak API
- Zadanie 3 jest uruchamiane co pięć sekund, aż do osiągnięcia limitu czasu, tj. 50 sekund
- Gdy zadanie 3 osiągnie swój limit czasu, zadanie 1 zostanie ponownie włączone, a zadanie 3 zostanie wyłączone.
- Gdy żadne wywołanie zwrotne nie jest wywoływane lub urządzenie jest bezczynne, przechodzi w stan lekkiego uśpienia, oszczędzając w ten sposób energię.
nieważne zadanieI2Callback();
nieważne zadanieI2CDWyłącz(); nieważne zadanieAPCallback(); void taskAPDisable(); nieważne zadanieWiFiCallback(); void taskWiFiDisable(); //Zadania dla i2c, hosting serwera WWW i publikowanie w thingspeak Zadanie tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); Zadanie tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); Zadanie tAP(5*TASK_SECOND, TASK_FOREVER, &taskAPCallback, &ts, false, NULL, &taskAPDisable); Zadanie tWiFi(5* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable); //timeout dla zadań tI2C.setTimeout(10 * TASK_SECOND); tAP.setTimeout(50 * TASK_SECOND); tWiFi.setTimeout(50 * TASK_SECOND); //włącz zadanie I2C tI2C.enable();
Krok 4: Kod do odczytu wartości temperatury i wilgotności

Używamy biblioteki Wire.h do odczytu wartości temperatury i wilgotności. Ta biblioteka ułatwia komunikację i2c między czujnikiem a urządzeniem nadrzędnym. 0x44 to adres I2C dla SHT31.
SHT31 działa w innym trybie pracy. Możesz odnieść się do arkusza danych. Używamy 0x2C i 0x06 jako odpowiednio MSB i LSB do operacji pojedynczego strzału.
//wywołanie zwrotne zadania I2C void taskI2CCallback(){ Serial.println("taskI2CStarted"); unsigned int root[6]; //rozpocznij transmisję od 0x44; Wire.beginTransmisja(Addr); //do transmisji jednostrzałowej o wysokiej powtarzalności używamy 0x2C(MSB) i 0x06(LSB) Wire.write(0x2C); Wire.write(0x06); //koniec transmisji Wire.endTransmission(); //żądanie bajtów od 0x44 Wire.beginTransmission(Addr); Wire.endTransmission(); Wire.requestFrom(Addr, 6); if(Wire.available() == 6){ //data[0] i data[1] zawierają 16 bitów temperatury. root[0] = Wire.read(); root[1] =Przewód.odczyt(); //data[2] zawiera 8 bitów CRC root[2] = Wire.read(); //data[3] i data[4] zawierają 16 bitów korzenia wilgotności[3] = Wire.read(); root[4] = Wire.read(); //data[5] składa się z 8-bitowego CRC root[5] = Wire.read(); } int temp = (root[0] * 256) + root[1]; //przesuń MSB o 8 bitów dodaj LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); pływak fTemp = (cTemp * 1,8) + 32,0; //przesuń MSB o 8 bitów dodaj LSB do tego podziału przez pełną rozdzielczość i *100 dla procentowej wilgotności float = (100.0 * ((root[3] * 256,0) + root[4])) / 65535.0; tempC = cTemp; tempF = fTemp; wilgotny = wilgotność; Serial.print("Temperatura w C:\t"); Serial.println(String(cTemp, 1)); Serial.print("Temperatura w F:\t"); Serial.println(String(fTemp, 1)); Serial.print("Wilgotność:\t "); Serial.println(String(wilgotność, 1)); }
Krok 5: Kod do hostingu serwera WWW


Hostowaliśmy serwer WWW z naszego urządzenia na statycznym IP.
Biblioteka ESP8266WebServer służy do hostowania serwera WWW
- Najpierw musimy zadeklarować adres IP, bramę i maskę podsieci, aby utworzyć nasz statyczny adres IP
- Teraz zadeklaruj ssid i hasło dla swojego punktu dostępowego. połącz się z punktem dostępowym z dowolnego urządzenia STA
- hostuj serwer na porcie 80, który jest domyślnym portem protokołu komunikacji internetowej, wprowadź w przeglądarce internetowej 192.168.1.4, aby wyświetlić stronę z intro, a 192.168.1.4/Wartość, aby wyświetlić stronę z czujnikami
//statyczny adres IP dla APIPAaddress ap_local_IP(192, 168, 1, 4);IPAddress ap_gateway(192, 168, 1, 254); AdresIP ap_subnet(255, 255, 255, 0); //ssid i AP dla lokalnego Wi-Fi w trybie STA const char WiFissid = "*********"; const char WiFipass = "**********"; //ssid i pass dla AP const char APssid = "********"; const char APpass = "********"; ESP8266serwer WebServer(80); void setup{server.on("/", onHandleDataRoot); server.on("/Value", onHandleDataFeed); server.onNotFound(onHandleNotFound);} void taskAPCallback(){ Serial.println("zadanieAP rozpoczęte"); server.handleClient(); } void onHandleDataRoot(){ server.send(200, "text/html", PAGE1); } void onHandleDataFeed(){ server.send(200, "text/html", PAGE2); } void onHandleNotFound(){ String message = "Nie znaleziono pliku\n\n"; wiadomość += "URI: "; wiadomość += serwer.uri(); wiadomość += "\nMetoda: "; wiadomość += (server.method() == HTTP_GET)?"GET":"POST"; wiadomość += "\nArgumenty: "; wiadomość += serwer.args(); wiadomość += "\n"; server.send(404, "tekst/zwykły", wiadomość); } void reconnectAPWiFi(){ WiFi.mode(WIFI_AP_STA); opóźnienie (100); Wi-Fi.rozłącz(); stan logiczny = WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet); if(status ==true){ Serial.print("Ustawianie soft-AP… "); wartość logiczna ap = WiFi.softAP(APssid, APpass); if(ap==true){ Serial.print("podłączony do:\t"); //AdresIP mójIP = WiFi.softAPIP(); Serial.println(WiFi.softAPIP()); } serwer.początek();
}
Krok 6: Konfiguracja Thingspeak



ThingSpeak to platforma IoT. ThingSpeak to bezpłatna usługa internetowa, która umożliwia zbieranie i przechowywanie danych z czujników w chmurze.
W tym kroku przedstawię Ci krótką procedurę zakładania konta Thing Speak
- Załóż nowe konto użytkownika w ThingSpeak
- Utwórz nowy kanał, wybierając Kanały, Moje kanały, a następnie Nowy kanał
- Edytuj swoje pola
- Te pola zawierają dane z czujnika
- Zwróć uwagę na klucz API zapisu i identyfikator kanału
- Na szkicu Arduino możesz użyć biblioteki ThingSpeak dla Arduino lub możesz bezpośrednio POST danych do ThingSpeak API
- następny krok dotyczy publikowania treści w Thing Speak API
Krok 7: Kod do publikowania danych w Thing Speak




Tutaj publikujemy odczyty czujników do Thing Speak. do wykonania tego zadania potrzebne są następujące kroki:
- Utwórz swoje konto w rzeczy mówUtwórz kanały i pola do przechowywania danych z czujników
- możemy pobierać i przesyłać dane z ESP do thingSpeak i odwrotnie, używając żądań GET i POST do api.
- możemy przesłać nasze dane do ThingSpeak w następujący sposób
id taskWiFiCallback(){ WiFiClient wifiClient; if(wifiClient.connect(hostId, 80)){ String postStr = apiKey; postStr +="&field1="; postStr += String(wilgotny); postStr +="&field2="; postStr += String(tempC); postStr +="&field3="; postStr += String(tempF); postStr += "\r\n\r\n"; wifiClient.print("POST /aktualizacja HTTP/1.1\n"); wifiClient.print("Host: api.thingspeak.com\n"); wifiClient.print("Połączenie: zamknij\n"); wifiClient.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); wifiClient.print("Typ treści: application/x-www-form-urlencoded\n"); wifiClient.print("Długość treści: "); wifiClient.print(postStr.length()); wifiClient.print("\n\n"); wifiClient.print(postStr); } wifiKlient.stop(); }
Krok 8: Ogólny kod
Cały kod jest dostępny w moim repozytorium GitHub
Krok 9: Kredyty
- Arduino JSON
- ESP826Serwer WWW
- Harmonogram zadań
- SHT 31
- Skanowanie I2C
- Samouczek dotyczący instrukcji HIH6130
- Drut
- NCD.io
Zalecana:
Monitorowanie temperatury i wilgotności DHT za pomocą ESP8266 i platformy AskSensors IoT: 8 kroków

Monitorowanie temperatury i wilgotności DHT za pomocą ESP8266 i platformy AskSensors IoT: W poprzedniej instrukcji przedstawiłem przewodnik krok po kroku, jak rozpocząć pracę z nodeMCU ESP8266 i platformą AskSensors IoT. W tym samouczku podłączam czujnik DHT11 do węzła MCU. DHT11 to powszechnie stosowany czujnik temperatury i wilgotności
ThingSpeak, IFTTT, czujnik temperatury i wilgotności oraz arkusz Google: 8 kroków

ThingSpeak, IFTTT, Temp and Humidity Sensor oraz Google Sheet: W tym projekcie będziemy mierzyć temperaturę i wilgotność za pomocą czujnika temperatury i wilgotności NCD, ESP32 oraz ThingSpeak. Wyślemy również różne odczyty temperatury i wilgotności do Arkusza Google za pomocą ThingSpeak i IFTTT do analizy se
ESP8266 NodeMCU Access Point (AP) dla serwera WWW z czujnikiem temperatury DT11 i drukowaniem temperatury i wilgotności w przeglądarce: 5 kroków

ESP8266 NodeMCU Access Point (AP) dla serwera WWW z czujnikiem temperatury DT11 i drukowaniem temperatury i wilgotności w przeglądarce: Cześć, w większości projektów używamy ESP8266, a w większości projektów używamy ESP8266 jako serwera WWW, dzięki czemu można uzyskać dostęp do danych dowolne urządzenie przez Wi-Fi, uzyskując dostęp do serwera WWW obsługiwanego przez ESP8266, ale jedynym problemem jest to, że potrzebujemy działającego routera
Jak korzystać z czujnika temperatury DHT11 z Arduino i temperatury drukowania, ciepła i wilgotności: 5 kroków

Jak używać czujnika temperatury DHT11 z Arduino i drukowania temperatury, ciepła i wilgotności: Czujnik DHT11 służy do pomiaru temperatury i wilgotności. Są bardzo popularnymi hobbystami elektroniki. Czujnik wilgotności i temperatury DHT11 ułatwia dodawanie danych o wilgotności i temperaturze do projektów elektroniki DIY. To za
Zdalne monitorowanie temperatury i wilgotności za pomocą ESP8266 i aplikacji Blynk: 15 kroków

Zdalne monitorowanie temperatury i wilgotności za pomocą ESP8266 i aplikacji Blynk: To był mój pierwszy projekt z chipem ESP8266. Właśnie zbudowałem nową szklarnię w pobliżu mojego domu i ciekawiło mnie, co się tam dzieje w ciągu dnia? Chodzi mi o to, jak zmienia się temperatura i wilgotność? Czy szklarnia jest wystarczająco wentylowana? Więc decyduję