Spisu treści:
- Krok 1: Wymagany sprzęt
- Krok 2: Połączenia sprzętowe
- Krok 3: Kod do planowania zadań
- Krok 4: Kod do odczytu wartości temperatury i wilgotności
- Krok 5: Kod do hostingu serwera WWW
- Krok 6: Kod do publikowania danych w Thing Speak
- Krok 7: Ogólny kod
Wideo: Aplikacja pogodowa przy użyciu Esp8266: 7 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
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:
1. SHT31
2. Adafruit Huzzah ESP8266
3. Adapter ESP8266 I2C
4. 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 odpowiednio 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.
- W tym wywołaniu zwrotnym łączymy się ze STA (lokalny adres IP)
- W zadaniu 3 publikujemy odczyt z czujnika w chmurze 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ę.
Harmonogram ts;
//Zadania dla i2c, hostowanie serwera WWW i publikowanie na thingspeak
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("zadanieI2CRozpoczęto"); 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 identyfikator i hasło do 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 dla protokołu komunikacji internetowej, Hypertext Transfer Protocol (HTTP)
- wpisz 192.168.1.4 w przeglądarce internetowej, aby wyświetlić stronę wprowadzającą i 192.168.1.4/Wartość, aby wyświetlić stronę internetową odczytu czujnika
//statyczny adres IP dla AP
AdresIP ap_local_IP(192, 168, 1, 4);
Adres IP ap_gateway(192, 168, 1, 254);
Adres IP 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);
nieważna konfiguracja{
server.on("/", onHandleDataRoot);
server.on("/Value", onHandleDataFeed);
server.onNotFound(onHandleNotFound);
}
void taskAPCallback(){
Serial.println("zadanieAP uruchomione");
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() ==
wiadomość += "\nArgumenty: ";
wiadomość += serwer.args();
wiadomość += "\n";
server.send(404, "text/plain", wiadomość);}
nieważne ponowne połączenieAPWiFi(){
tryb WiFi (WIFI_AP_STA);
opóźnienie (100);
Wi-Fi.rozłącz();
stan logiczny = WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet);
if(stan ==prawda){
Serial.print("Ustawianie soft-AP … ");
wartość logiczna ap = WiFi.softAP(APssid, APpass);
jeśli(ap==prawda){
Serial.print("podłączony do:\t");
//AdresIP mójIP = WiFi.softAPIP();
Serial.println(WiFi.softAPIP());
}
serwer.początek();
}
}
Krok 6: 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ów
- Twó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
nieważne zadanieWiFiCallback(){
WiFiKlient wifiKlient; 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 7: Ogólny kod
Cały kod jest dostępny w moim repozytorium github
Kredyty:
- Arduino JSON: ArduinoJson
- ESP826Serwer WWW
- Harmonogram zadań
- SHT 31
- Skanowanie I2C
- Samouczek dotyczący instrukcji HIH6130
- Arduino przewodowe
- NCD.io
Zalecana:
Prosta stacja pogodowa przy użyciu ESP8266.: 6 kroków (ze zdjęciami)
Prosta stacja pogodowa korzystająca z ESP8266.: W tym instruktażu podzielę się tym, jak korzystać z ESP8266, aby uzyskać dane, takie jak temperatura, ciśnienie, klimat itp. Oraz dane z YouTube, takie jak subskrybenci i amp; Całkowita liczba wyświetleń. i wyświetlaj dane na monitorze szeregowym i wyświetlaj je na LCD. Dane będą f
Inteligentna stacja pogodowa (przy użyciu Arduino): 5 kroków
Inteligentna stacja pogodowa (przy użyciu Arduino): Stacja pogodowa to obiekt, zarówno na lądzie, jak i na morzu, wyposażony w przyrządy i sprzęt do pomiaru warunków atmosferycznych w celu dostarczania informacji do prognoz pogody oraz badania pogody i klimatu. Wykonane pomiary obejmują temperaturę
Stacja pogodowa Arduino przy użyciu BMP280-DHT11 - temperatura, wilgotność i ciśnienie: 8 kroków
Stacja pogodowa Arduino przy użyciu BMP280-DHT11 - Temperatura, wilgotność i ciśnienie: W tym samouczku dowiemy się, jak zrobić stację pogodową, która będzie wyświetlać TEMPERATURĘ, WILGOTNOŚĆ I CIŚNIENIE na wyświetlaczu LCD TFT 7735Obejrzyj film demonstracyjny
Stacja pogodowa przy użyciu Arduino UNO: 7 kroków
Stacja pogodowa wykorzystująca Arduino UNO: Autor: Hazel YangTen projekt to stacja pogodowa wykorzystująca płytkę Arduino UNO do sterowania przepływem danych, czujnik DHT22 do zbierania danych i ekran OLED do wyświetlania danych
Neopixel Ws2812 Rainbow LED Glow z M5stick-C - Uruchamianie Rainbow na Neopixel Ws2812 przy użyciu M5stack M5stick C przy użyciu Arduino IDE: 5 kroków
Neopixel Ws2812 Rainbow LED Glow z M5stick-C | Uruchamianie Rainbow na Neopixel Ws2812 Używając M5stack M5stick C Używając Arduino IDE: Cześć chłopaki, w tej instrukcji dowiemy się, jak używać neopikselowych ws2812 LED lub taśmy LED lub matrycy LED lub pierścienia LED z płytką rozwojową m5stack m5stick-C z Arduino IDE i zrobimy wzór tęczy z nim