Spisu treści:

APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266: 9 kroków
APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266: 9 kroków

Wideo: APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266: 9 kroków

Wideo: APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266: 9 kroków
Wideo: Multisensor na ESP8266 #1, czyli pomiar temperatury dla Domoticza (i nie tylko) 2024, Lipiec
Anonim
APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266
APLIKACJA TEMPERATURY I WILGOTNOŚCI THINGSPEAK ZA POMOCĄ ESP8266

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

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. SHT 31
  2. Adafruit Huzzah ESP8266
  3. ESP8266 adapter I2C
  4. Kabel I2C

Krok 2: 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 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ń

Kod planowania zadań
Kod 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

Kod do odczytu wartości temperatury i wilgotności
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

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 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

Konfiguracja Thingspeak
Konfiguracja Thingspeak
Konfiguracja Thingspeak
Konfiguracja Thingspeak
Konfiguracja Thingspeak
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

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ó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: