Spisu treści:

Raport pogodowy przy użyciu apletów ThingSpeak MQTT i IFTTT: 8 kroków
Raport pogodowy przy użyciu apletów ThingSpeak MQTT i IFTTT: 8 kroków

Wideo: Raport pogodowy przy użyciu apletów ThingSpeak MQTT i IFTTT: 8 kroków

Wideo: Raport pogodowy przy użyciu apletów ThingSpeak MQTT i IFTTT: 8 kroków
Wideo: Manipulacja pogodą jest możliwa! Czym grozi? [DeFacto] 2024, Listopad
Anonim
Raport o pogodzie przy użyciu apletów ThingSpeak MQTT i IFTTT
Raport o pogodzie przy użyciu apletów ThingSpeak MQTT i IFTTT

Wstęp

Oparta na chmurze aplikacja pogodowa dostarczająca codzienne raporty pogodowe jako powiadomienia e-mail. Ta aplikacja internetowa mierzy temperaturę i wilgotność za pomocą SHT25 i Adafruit Huzzah ESP8266. Zapewnia nam dane dotyczące temperatury i wilgotności w czasie rzeczywistym oraz analizy godzinowe. Dane są przesyłane za pomocą ThingSpeak MQTT API, a później wysyłamy powiadomienie e-mailem do użytkownika, gdy temperatura osiągnie wyznaczony próg za pomocą protokołu IFTTT. SHT25 to czujniki temperatury i wilgotności firmy Sensirion. SHT25 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.

Cechy

  • Zapewnia analizy i statystyki w czasie rzeczywistym za pomocą interfejsu API Thing Speak MQTT
  • Powiadomienie e-mail jest dostarczane do użytkownika w wyznaczonym czasie za pomocą IFTTT
  • Harmonogram zadań służy do planowania zadań, takich jak pobieranie danych z czujników, publikowanie odczytów z czujników, subskrybowanie tematu MQTT
  • Wykorzystuje protokół I2C do pobierania odczytu czujnika, który jest dokładniejszy, rozszerzalny i skalowalny
  • tryb uśpienia, gdy urządzenie jest bezczynne lub nie jest wywoływane żadne zadanie zwrotne.
  • efektywne planowanie zadań zapewnia bezproblemowe użytkowanie
  • Hostowana jest osobna strona internetowa, na której użytkownik musi podać swoje dane uwierzytelniające użytkownika, aby uniknąć flashowania urządzenia za każdym razem, gdy jest w zasięgu innych sieci Wi-Fi
  • SPIFFS służy do przechowywania naszej strony internetowej, aby nasz kod był czytelny i mniej niezdarny

Krok 1: Specyfikacja sprzętu i oprogramowania

Specyfikacja sprzętu i oprogramowania
Specyfikacja sprzętu i oprogramowania
Specyfikacja sprzętu i oprogramowania
Specyfikacja sprzętu i oprogramowania

Specyfikacja sprzętu

  • Adafruit esp8266 Deska Huzzah
  • Tarcza planszy Huzzah
  • Moduł czujnika SHT25
  • Kabel I2C

Specyfikacja oprogramowania

  • IDE Arduino
  • IFTTT Rzecz Mów
  • API MQTT

Krok 2: Przechowywanie poświadczeń użytkownika

Przechowywanie poświadczeń użytkownika
Przechowywanie poświadczeń użytkownika
Przechowywanie poświadczeń użytkownika
Przechowywanie poświadczeń użytkownika

Tutaj używamy czujnika SHT25 I2C do odczytu wartości temperatury i wilgotności względnej w czasie rzeczywistym i zaksięgowania tych wartości w chmurze. Aby od czasu do czasu uzyskać zaktualizowaną wartość czujnika i jednocześnie opublikować te aktualizacje, korzystamy z Biblioteki Harmonogramu Zadań Arduino. Do operacji w chmurze używamy ThingSpeak MQTT API. Później dostarczamy użytkownikowi raport o pogodzie w czasie rzeczywistym za pomocą apletów IFTTT. Możesz wykonać następujące kroki, aby stworzyć własną stację pogodową. Więc zrób to sam.

Zanim przejdziemy dalej. Musimy zapisać poświadczenia użytkownika. W tym celu hostujemy serwer WWW pod adresem 192.169.1.4. Zapisaliśmy nasz formularz internetowy w SPIFFS. Po uruchomieniu urządzenie obsługuje serwer WWW przez 60 sekund. Użytkownik powinien wykonać następujące kroki.

  • Połącz się z użytkownikiem AP ESP, który znajduje się na liście dostępnych sieci Wi-Fi. Połącz się z tym AP i wprowadź hasło "********"
  • Po podłączeniu przejdź do przeglądarki wprowadź adres IP 192.168.1.4.
  • Wprowadź identyfikator SSID i hasło lokalnego Wi-Fi w polach wejściowych i wprowadź WYŚLIJ
  • Te poświadczenia zostaną zapisane w EEPROM
  • Po 60 sekundach urządzenie automatycznie rozłączy się z AP
  • Następnym razem, gdy włączysz urządzenie, użytkownik nie musi postępować zgodnie z tą procedurą, urządzenie automatycznie pobierze dane użytkownika z pamięci EEPROM i będzie kontynuować pobieranie odczytów czujnika z interfejsu I2C i przesyłanie ich do chmury

//--------- Konfiguracja AP------------// AdresIP ap_local_IP(192, 168, 1, 4); Adres IP ap_gateway(192, 168, 1, 254); AdresIP ap_subnet(255, 255, 255, 0);

Serial.print("Konfigurowanie punktu dostępu…");

WiFi.softAPConfig(ap_local_IP, ap_gateway, ap_subnet);

Serial.print("Konfigurowanie poświadczeń użytkownika");

WiFi.softAP(ssidAP, passAP);

server.on("/", handleRoot);

server.onNotFound(onHandleNotFound);

serwer.początek();

APTimer = mili();

while(millis()-APTimer < APInterval){

server.handleClient();

}

//****************************** UCHWYT KORZENIA****************** *********//unieważnij obsługęRoot() {

if (server.hasArg("ssid")&& server.hasArg("hasło"))

{

//Jeśli wszystkie pola formularza zawierają wywołanie danych

handelPrześlij()

obsługujWyślij(); }

w przeciwnym razie {

//Ponownie wyświetl formularz

//odczytaj plik zawarty w spiffach

Plik pliku =SPIFFS.open("/webform.html", "r");

server.streamFile(plik, "text/html");

//nie zapomnij zamknąć pliku

plik.zamknij();

}}

// Sprawdź stan, który ma argumenty ssid i hasło

//Następnie zapisz poświadczenia do ROM

ROMwrite(String(server.arg("ssid")), String(server.arg("hasło")))

Krok 3: Konfiguracja formularza internetowego w SPIFFS

SPIFF

Serial Peripheral Interface Flash File System, w skrócie SPIFFS. Jest to lekki system plików dla mikrokontrolerów z układem flash SPI. Wbudowany układ flash w ESP8266 ma dużo miejsca na twoje strony internetowe, zwłaszcza jeśli masz wersję 1 MB, 2 MB lub 4 MB. Zapisaliśmy również naszą stronę internetową w systemie Flash. Jest kilka kroków, które musimy wykonać, aby przesłać dane do spiffów

  1. Pobierz narzędzie:
  2. W katalogu szkicownika Arduino utwórz katalog narzędzi, jeśli jeszcze nie istnieje
  3. Rozpakuj narzędzie do katalogu tools (ścieżka będzie wyglądać jak /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Zrestartuj Arduino IDE
  5. Otwórz szkic (lub utwórz nowy i zapisz)
  6. Przejdź do katalogu szkiców (wybierz Szkic > Pokaż folder szkicu)
  7. Utwórz katalog o nazwie data i dowolne pliki, które chcesz tam umieścić w systemie plików. Przesłaliśmy naszą stronę HTML o nazwie webform.html
  8. Upewnij się, że wybrałeś kartę, port i zamknięty monitor szeregowy
  9. Wybierz opcję Narzędzia > Przesyłanie danych szkicu ESP8266. Powinno to rozpocząć przesyłanie plików do systemu plików flash ESP8266. Po zakończeniu pasek stanu IDE wyświetli komunikat SPIFFS Image Uploaded.

Plik pliku =SPIFFS.open("/webform.html", "r");

server.streamFile(plik, "text/html");

//nie zapomnij zamknąć pliku

plik.zamknij();

Krok 4: Planowanie zadań

W tym samouczku wykonujemy dwie operacje:

  • Odczytaj dane z SHT25 za pomocą protokołu I2C
  • Prześlij zaktualizowane dane do chmury za pomocą ThingSpeak MQTT API

Aby to osiągnąć, korzystamy z biblioteki TaskScheduler. Zaplanowaliśmy dwa różne zadania dotyczące dwóch 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.
  • Kiedy Task1 osiągnie swój limit czasu Łączymy się z lokalnym brokerem Wifi i MQTT.
  • Teraz Zadanie 2 jest włączone i wyłączamy Zadanie 1 Zadanie 2 polega na publikowaniu danych z czujnika do brokera Thing Speak MQTT, to zadanie działa przez 20 sekund, aż przekroczy limit czasu wynoszący 20 sekund
  • Gdy zadanie 2 osiągnie swój limit czasu, zadanie 1 zostanie ponownie włączone, a zadanie 2 zostanie wyłączone. tutaj znowu otrzymujemy zaktualizowaną wartość i proces trwa
  • gdy nie jest wywoływane żadne oddzwonienie lub urządzenie jest bezczynne, przechodzi w stan lekkiego uśpienia, oszczędzając w ten sposób energię.

//---------prototyp wywołania zwrotnego zadania------------//

nieważne zadanieI2Callback();

nieważne zadanieI2CDWyłącz();

nieważne zadanieWiFiCallback();

void taskWiFiDisable();

//---------Zadania------------//

Zadanie tI2C(2 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable);

Zadanie tWiFi(20* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

//włącz tI2C tI2C.włącz();

Krok 5: Odczytywanie wartości temperatury i wilgotności z SHT25

Odczytywanie wartości temperatury i wilgotności z SHT25
Odczytywanie wartości temperatury i wilgotności z SHT25

I2C to dwuprzewodowy interfejs, który wykorzystuje tylko dwa przewody do komunikacji z urządzeniem nadrzędnym. Jeden to SCL (zegar szeregowy), a drugi to SDA (dane szeregowe). Każde urządzenie podrzędne ma unikalny adres. SHT 25 ma również adres 8-bitowy i można uzyskać do niego dostęp za pomocą adresu 0x44. ma 8 bitów adresu, gdzie 7 bitów to rzeczywisty adres, a najbardziej prawy bit 0 LSB służy do sygnalizowania odczytu lub zapisu do urządzenia. Jeśli bit 0 jest ustawiony na 1, wówczas urządzenie nadrzędne będzie odczytywać z urządzenia podrzędnego I2C. I2C jest znacznie bardziej niezawodny, skalowalny i szybki, a nawet posiada wiele trybów pracy, co czyni go znacznie bardziej energooszczędnym

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

Krok 6: Publikowanie wartości w ThingSpeak za pomocą ThingSpeak MQTT API

Publikowanie wartości w ThingSpeak za pomocą ThingSpeak MQTT API
Publikowanie wartości w ThingSpeak za pomocą ThingSpeak MQTT API

Do publikowania naszych wartości temperatury i wilgotności w chmurze używamy ThingSpeak MQTT API. ThingSpeak to platforma IoT. ThingSpeak to bezpłatna usługa internetowa, która umożliwia zbieranie i przechowywanie danych z czujników w chmurze. MQTT to powszechny protokół używany w systemach IoT do łączenia urządzeń i czujników niskiego poziomu. MQTT służy do przekazywania krótkich wiadomości do i od brokera. ThingSpeak niedawno dodał brokera MQTT, aby urządzenia mogły wysyłać wiadomości do ThingSpeak. Możesz postępować zgodnie z procedurą, aby skonfigurować kanał ThingSpeak z tego postu

ThingSpeak MQTT

MQTT to architektura publikowania/subskrybowania, która została opracowana głównie w celu łączenia urządzeń o ograniczonej przepustowości i mocy w sieciach bezprzewodowych. Jest to prosty i lekki protokół, który działa przez gniazda TCP/IP lub WebSockets. MQTT przez WebSockets można zabezpieczyć za pomocą SSL. Architektura publikowania/subskrybowania umożliwia wypychanie komunikatów do urządzeń klienckich bez konieczności ciągłego odpytywania przez urządzenie serwera. Klientem jest dowolne urządzenie, które łączy się z brokerem i może publikować lub subskrybować tematy w celu uzyskania dostępu do informacji. Temat zawiera informacje o routingu dla brokera. Każdy klient, który chce wysyłać wiadomości, publikuje je w określonym temacie, a każdy klient, który chce otrzymywać wiadomości, subskrybuje określony temat

Publikuj i subskrybuj za pomocą ThingSpeak MQTT

  • Publikowanie na kanałach kanałów /publikacja/
  • Publikowanie do poszczególnych kanałów pola /publish/fields/field/
  • Zapisz się do pola kanału kanały /subskrybuj//
  • Subskrybuj kanały kanałów prywatnych //subscribe/fields/field/
  • Subskrybuj wszystkie pola kanału. kanały// subskrybuj/pola/pole/

nieważne zadanieWiFiCallback()

{

Serial.println("zadanieWiFiCallbackUruchomione");

Serial.print("limit czasu dla tego zadania: \t");

Serial.println(tWiFi.getTimeout());

if(!mqttCli.connected())

{

Serial.println("Klient nie podłączony");

połącz ponownieMQTT();

}

Ciąg tematString ="channels/"+String(IDkanału)+"/publish/"+String(writeAPIKey);

int długość tematu = łańcuch tematu.długość()+1;

char bufor tematu[długość tematu];

topicString.toCharArray(topicBuffer, topicLength+1);

Serial.println(bufor tematów);

String dataString = String("field1="+ String(tempC, 1) + "&field2=" + String(tempF, 1) + "&field3=" + String(wilgotny, 1));

int długość_danych = ciąg_danych.długość()+1;

bajt danychBuffer[dataLength];

dataString.getBytes(dataBuffer, dataLength);

mqttCli.beginPublish(topicBuffer, dataLength, false);

Serial.println(mqttCli.write(dataBuffer, dataLength) ? "opublikowane": "opublikowanie nie powiodło się");

mqttCli.endPublish();

//mqttCli.loop();

}

Krok 7: Powiadomienie e-mail z raportem o pogodzie

Powiadomienie e-mail z raportem o pogodzie
Powiadomienie e-mail z raportem o pogodzie
Powiadomienie e-mail z raportem o pogodzie
Powiadomienie e-mail z raportem o pogodzie

Używamy apletów IFTTT, aby w czasie rzeczywistym wysyłać użytkownikowi powiadomienia e-mail z raportem o pogodzie. Tak więc wdrożyliśmy to za pośrednictwem ThingSpeak. Uśredniamy 5-stopniowe wartości temperatury i wilgotności. Zawsze, gdy wartość ostatniego wpisu jest większa niż wartość średnia. Uruchomi to powiadomienie e-mail „jest gorący dzień”. i kiedy jest mniejsza niż wartość średnia. Uruchomi to powiadomienie e-mail „Jaki piękny dzień”. Codziennie około godziny 10:00 (IST) będziemy otrzymywać powiadomienia e-mail

IDkanału= ******;

iftttURL='https://maker.ifttt.com/**************';

wilgoćData=thingSpeakRead(ID kanału, 'Pola', 3, 'Liczba dni', 5); tempData = thingSpeakRead(IDKanału, 'Pola', 1, 'LiczbaDni', 5);

perHumid=max(Dane Wilgotności)-min(Dane Wilgotności);

HumidValue=0.1*perHumid+min(moistureData);

perTemp=max(tempData)-min(tempData);

TempValue=0.1*perTemp+min(tempData);

urlTemp=strcat('https://api.thingspeak.com/channels/', string(IDkanału), '/fields/1/last.txt');

urlHumid = strcat('https://api.thingspeak.com/channels/', string(IDkanału), '/fields/3/last.txt'); lastTempValue=str2num(webread(urlTemp)); lastHumidValue = str2num(webread(urlHumid));

if (lastTempValue

if (lastTempValue>tempValue || lastHumidValue>humidValue)

plantMessage=' To upalny dzień.'; webwrite(iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); kończyć się

Krok 8: Ogólny kod

Ogólny kod
Ogólny kod
Ogólny kod
Ogólny kod
Ogólny kod
Ogólny kod

Ogólny kod

Cały kod jest dostępny w tym repozytorium GitHub

Ograniczenia

  • Istnieją pewne problemy z publikowaniem danych przy użyciu metody publikowania dla dużej ilości danych. Aby rozwiązać ten problem, używamy funkcji write()
  • SPIFFS należy sformatować przed przesłaniem nowych danych do SPIFFS.
  • Nie wolno używać funkcji delay(). delay() utrudnia działanie w tle. Zamiast tego twórz opóźnienia za pomocą millis() tylko wtedy, gdy jest to konieczne

Kredyty

  • ESP826Serwer WWW
  • Harmonogram zadań
  • SHT 25
  • Interfejs API ThingSpeak MQTT
  • IFTTT
  • PubSubClient

Zalecana: