Spisu treści:

Aplikacja pogodowa przy użyciu Esp8266: 7 kroków
Aplikacja pogodowa przy użyciu Esp8266: 7 kroków

Wideo: Aplikacja pogodowa przy użyciu Esp8266: 7 kroków

Wideo: Aplikacja pogodowa przy użyciu Esp8266: 7 kroków
Wideo: Stacja Pogodowa za 25zł (na ESP8266) 2024, Listopad
Anonim
Aplikacja internetowa z pogodą za pomocą Esp8266
Aplikacja internetowa z pogodą za pomocą Esp8266

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

Wymagany sprzęt
Wymagany sprzęt
Wymagany sprzęt
Wymagany sprzęt
Wymagany sprzęt
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

Połączenia sprzętowe
Połączenia sprzętowe
Połączenia sprzętowe
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.

  1. 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.
  2. jeden przewód jest używany do Vcc, drugi przewód do GND, a pozostałe dwa odpowiednio do SDA i SCL.
  3. 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

Kod do hostingu serwera WWW
Kod do hostingu serwera WWW
Kod do hostingu serwera WWW
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

Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do Thing Speak
Kod do wysyłania danych do 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: