Spisu treści:
- Krok 1: Specyfikacja sprzętu i oprogramowania
- Krok 2: Przechowywanie poświadczeń użytkownika
- Krok 3: Konfiguracja formularza internetowego w SPIFFS
- Krok 4: Planowanie zadań
- Krok 5: Odczytywanie wartości temperatury i wilgotności z SHT25
- Krok 6: Publikowanie wartości w ThingSpeak za pomocą ThingSpeak MQTT API
- Krok 7: Powiadomienie e-mail z raportem o pogodzie
- Krok 8: Ogólny kod
Wideo: Raport pogodowy przy użyciu apletów ThingSpeak MQTT i IFTTT: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
- 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
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
- Pobierz narzędzie:
- W katalogu szkicownika Arduino utwórz katalog narzędzi, jeśli jeszcze nie istnieje
- Rozpakuj narzędzie do katalogu tools (ścieżka będzie wyglądać jak /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Zrestartuj Arduino IDE
- Otwórz szkic (lub utwórz nowy i zapisz)
- Przejdź do katalogu szkiców (wybierz Szkic > Pokaż folder szkicu)
- 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
- Upewnij się, że wybrałeś kartę, port i zamknięty monitor szeregowy
- 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
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
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
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
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:
ThingSpeak przy użyciu ESP8266: 8 kroków
ThingSpeak Using ESP8266: To jest instrukcja użycia ESP32 do wysyłania danych do Thing Speak (MQTT Broker) i po prostu zobacz monitorowane dane lub użyj danych na swojej stronie internetowej lub aby rozwinąć swój projekt
MAX7219 Matryca LED MQTT przy użyciu Esp8266: 6 kroków
MAX7219 LED Matrix MQTT Używając Esp8266: Próbowałem podłączyć mój wyświetlacz LED MAX7219 do serwera MQTT i otrzymać tekst z subskrypcji MQTT na wyświetlacz. Ale nie otrzymałem żadnego odpowiedniego kodu w Internecie, więc zacząłem budować własny …i wynik wypada całkiem nieźle…można di
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
Minimalistyczny zegar IoT (przy użyciu ESP8266, Adafruit.io, IFTTT i Arduino IDE): 10 kroków (ze zdjęciami)
Minimalistyczny zegar IoT (przy użyciu ESP8266, Adafruit.io, IFTTT i Arduino IDE): W tym samouczku pokażę, jak zrobić minimalistyczny zegar zsynchronizowany z internetem. Przetestowałem go z dwoma różnymi płytami opartymi na ESP8266: Firebeetle i NodeMCU. Mikrokontroler pobiera aktualny czas z serwera Google i wyświetla go na
DIY lutownica na gorące powietrze przy użyciu 12-18 woltów prądu stałego przy 2-3 amperach: 18 kroków (ze zdjęciami)
DIY lutownica na gorące powietrze przy użyciu 12-18 woltów prądu stałego przy 2-3 amperach: to moja pierwsza publikacja eva artykułu o majsterkowaniu w Internecie. Więc przepraszam za literówki, protokoły itp. Poniższe instrukcje pokazują, jak zrobić PRACOWĄ lutownicę na gorące powietrze odpowiednią do WSZYSTKICH zastosowań wymagających lutowania. To lutowanie gorącym powietrzem