Innehållsförteckning:
- Steg 1: Specifikationer för hårdvara och programvara
- Steg 2: Lagra användaruppgifter
- Steg 3: Konfigurera din webbformulär i SPIFFS
- Steg 4: Uppgiftsplanering
- Steg 5: Avläsning av temperatur- och luftfuktighetsvärden från SHT25
- Steg 6: Publicera värden till ThingSpeak med ThingSpeak MQTT API
- Steg 7: E -postmeddelande om väderrapport
- Steg 8: Övergripande kod
Video: Väderrapport med ThingSpeak MQTT och IFTTT Applets: 8 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Introduktion
En molnbaserad väderapplikation som tillhandahåller dagliga väderrapporter som e-postavisering. Denna webbapplikation mäter temperatur och luftfuktighet med SHT25 och Adafruit Huzzah ESP8266. Det ger oss realtidsdata för temperatur och luftfuktighet och analys per timme. Data skickas med ThingSpeak MQTT API och senare skickar vi ett e -postmeddelande till användaren när temperaturen når den tilldelade tröskeln med IFTTT -protokoll. SHT25 är en temperatur- och fuktighetssensorer gjorda av Sensirion. SHT25 ger en hög noggrannhet kring ± 2% RF. Dess luftfuktighetsintervall är mellan 0 till 100% och temperaturintervallet är mellan -40 till 125 ° C. Det är mycket mer tillförlitligt och snabbt med 8 sekunder sensorresponstid.
Funktioner
- Ger dig realtidsanalyser och statistik med Thing Speak MQTT API
- Ett e -postmeddelande ges till användaren vid en tilldelad tid med IFTTT
- Task Scheduler används för att schemalägga uppgiften som att hämta data från sensorer, publicera sensoravläsningarna, prenumerera på MQTT -ämne
- Den använder I2C -protokollet för att hämta sensoravläsningen som är mer exakt, utbyggbar och skalbar
- viloläge när enheten är inaktiv eller ingen uppringning av uppringning görs.
- effektiv uppgiftsplanering ger problemfri användning
- En separat webbsida är värd där användaren måste tillhandahålla sina användaruppgifter för att undvika att din enhet blinkar varje gång när den är tillgänglig för andra wifi -nätverk
- SPIFFS används för att lagra vår webbsida för att göra vår kod läsbar och mindre klumpig
Steg 1: Specifikationer för hårdvara och programvara
Hårdvaruspecifikation
- Adafruit esp8266 Huzzah -bräda
- Huzzah Board Shield
- SHT25 Sensormodul
- I2C -kabel
Programvaruspecifikation
- Arduino IDE
- IFTTT Thing Speak
- MQTT API
Steg 2: Lagra användaruppgifter
Här använder vi SHT25 I2C-sensorn för att läsa realtidsvärdet av temperatur och relativ luftfuktighet och publicera detta värde i molnet. För att få det uppdaterade sensorvärdet då och då och för att lägga upp dessa uppdateringar samtidigt använder vi Arduinos Task Scheduler Library. För molndrift använder vi ThingSpeak MQTT API. Senare tillhandahåller vi väderrapport i realtid till användaren med IFTTT-appletar. Du kan följa dessa steg för att skapa din egen väderstation. Så, DIY.
Innan du går vidare. Vi måste spara användaruppgifterna. För detta ändamål är vi värd för en webbserver på 192.169.1.4. Vi har lagrat vårt webbformulär i SPIFFS. När enheten startar är den värd för en webbserver i 60 sekunder. Användaren bör följa dessa steg.
- Anslut till AP ESPuser, Detta är listat i din tillgängliga wifi -nätverkslista. Anslut till detta AP och ange lösenordet "*******"
- När den är ansluten, gå till din webbläsare och ange IP 192.168.1.4.
- Ange SSID och lösenord för din lokala WiFi i inmatningsfälten och ange SKICKA
- Dessa uppgifter sparas i EEPROM
- Efter 60 sek kopplas enheten automatiskt från AP
- Nästa gång du slår på enheten behöver användaren inte följa den här proceduren. Enheten hämtar automatiskt användaruppgifterna från EEPROM och fortsätter med att få sensoravläsningarna från I2C -gränssnittet och publicera det i molnet
// --------- AP config ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Konfigurera åtkomstpunkt …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Konfigurera användaruppgifter");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
medan (millis ()-APTimer <APInterval) {
server.handleClient ();
}
// **************************** HANDTELRÖT ******************* ********* // void handleRoot () {
if (server.hasArg ("ssid") && server.hasArg ("lösenord"))
{
// Om alla formulärfält innehåller dataanrop
handelSubmit ()
handleSubmit (); }
annat {
// Visa formuläret igen
// läs filen som finns i spiffs
Filfil = SPIFFS.open ("/webform.html", "r");
server.streamFile (fil, "text/html");
// glöm inte att stänga filen
file.close ();
}}
// Kontrollera statusen att den har argumenten ssid och lösenord
// Skriv sedan referenser till ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("lösenord")))
Steg 3: Konfigurera din webbformulär i SPIFFS
SPIFFS
Seriellt perifert gränssnitt Flash File System, eller SPIFFS för kort. Det är ett lättviktigt filsystem för mikrokontroller med ett SPI-flashchip. Det inbyggda flashchipet på ESP8266 har gott om plats för dina webbsidor, särskilt om du har 1 MB, 2 MB eller 4 MB versionen. Vi har också lagrat vår webbsida i Flash System. Det finns några steg vi måste följa för att ladda upp data till spiffs
- Ladda ner verktyget:
- Skapa verktygskatalog i din Arduino -skissbokskatalog om den inte finns ännu
- Packa upp verktyget i verktygskatalogen (sökvägen kommer att se ut som /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Starta om Arduino IDE
- Öppna en skiss (eller skapa en ny och spara den)
- Gå till skisskatalogen (välj Skiss> Visa skissmapp)
- Skapa en katalog som heter data och alla filer du vill ha i filsystemet där. Vi har laddat upp vår HTML -sida med namnet webform.html
- Se till att du har valt ett kort, en port och en stängd seriell bildskärm
- Välj Verktyg> ESP8266 Sketch Data Upload. Detta bör börja ladda upp filerna till ESP8266 flash -filsystemet. När det är gjort visar IDE -statusfältet SPIFFS Image Uploaded -meddelande.
Filfil = SPIFFS.open ("/webform.html", "r");
server.streamFile (fil, "text/html");
// glöm inte att stänga filen
file.close ();
Steg 4: Uppgiftsplanering
I denna handledning utför vi två operationer:
- Läs data från SHT25 med I2C -protokollet
- Lägg upp uppdaterade data till molnet med ThingSpeak MQTT API
För att uppnå detta använder vi TaskScheduler -biblioteket. Vi har planerat två olika uppgifter som avser två olika kontrolloperationer. detta görs enligt följande
- Uppgift 1 är för avläsning av sensorvärdet, den här uppgiften körs i 1 sekund tills den når timeout på 10 sekunder.
- När uppgift1 når sin timeout Vi ansluter till lokal Wifi- och MQTT -mäklare.
- Nu är uppgift 2 aktiverad och vi inaktiverar uppgift 1 Uppgift 2 är för att publicera sensordata till Thing Speak MQTT -mäklaren, den här uppgiften körs i 20 sekunder tills den når timeout på 20 sekunder
- När uppgiften 2 når sin timeout aktiveras uppgift 1 igen och uppgift 2 inaktiveras. här igen, vi får det uppdaterade värdet och processen fortsätter
- när ingen återuppringning anropas eller enheten är inaktiv går den till Light Sleep och sparar därmed ström.
// --------- prototyp för återuppringning av uppgifter ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Uppgifter ------------ //
Uppgift tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Uppgift tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// aktivera tI2C tI2C.enable ();
Steg 5: Avläsning av temperatur- och luftfuktighetsvärden från SHT25
I2C är ett tvåtrådigt gränssnitt som endast använder två ledningar för att kommunicera med masterenheten. Den ena är SCL (Serial Clock) och den andra är SDA (Serial Data). Varje slavenhet har en unik adress. SHT 25 har också en 8-bitars adress och kan nås med en 0x44-adress. den har 8 bitar av adressen där 7 bitar är verklig adress och medan längst till höger LSB bit 0 används för att signalera läsning från eller skrivning till enheten. Om bit 0 är inställd på 1 läser masterenheten från slaven I2C -enheten. I2C är mycket mer pålitlig, skalbar och snabb och även den har många driftsätt som gör den mycket mer energieffektiv
Vi använder Wire.h -biblioteket för att läsa temperatur- och luftfuktighetsvärden. Detta bibliotek underlättar i2c -kommunikation mellan sensorn och masterenheten. 0x44 är I2C -adressen för SHT25. SHT25 fungerar på ett annat sätt. Du kan hänvisa till databladet för det. Vi använder 0x2C och 0x06 som MSB respektive LSB för enkelskott
Steg 6: Publicera värden till ThingSpeak med ThingSpeak MQTT API
För att lägga upp våra temperatur- och luftfuktighetsvärden i molnet använder vi ThingSpeak MQTT API. ThingSpeak är en IoT -plattform. ThingSpeak är en gratis webbtjänst som låter dig samla in och lagra sensordata i molnet. MQTT är ett vanligt protokoll som används i IoT-system för att ansluta enheter och sensorer på låg nivå. MQTT används för att skicka korta meddelanden till och från en mäklare. ThingSpeak har nyligen lagt till en MQTT -mäklare så att enheter kan skicka meddelanden till ThingSpeak. Du kan följa proceduren för att konfigurera ThingSpeak Channel från detta inlägg
ThingSpeak MQTT
MQTT är en publicerings-/prenumerationsarkitektur som utvecklats främst för att ansluta bandbredd och strömbegränsade enheter över trådlösa nätverk. Det är ett enkelt och lätt protokoll som körs över TCP/IP -uttag eller WebSockets. MQTT via WebSockets kan säkras med SSL. Med publicerings-/prenumerationsarkitekturen kan meddelanden skickas till klientenheterna utan att enheten kontinuerligt behöver polla servern. En klient är en enhet som ansluter till mäklaren och kan publicera eller prenumerera på ämnen för att komma åt informationen. Ett ämne innehåller routningsinformation för mäklaren. Varje klient som vill skicka meddelanden publicerar dem till ett visst ämne, och varje klient som vill ta emot meddelanden prenumererar på ett visst ämne
Publicera och prenumerera med ThingSpeak MQTT
- Publicera till kanalflödeskanaler /publicera /
- Publicera till en viss fältkanal/publicera/fält/fält/
- Prenumerera på kanalfältet/prenumerera //
- Prenumerera på privata kanalflödeskanaler // prenumerera/fält/fält/
- Prenumerera på alla kanaler i en kanal. kanaler // prenumerera/fält/feild/
void taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("timeout för denna uppgift: / t");
Serial.println (tWiFi.getTimeout ());
om (! mqttCli.connected ())
{
Serial.println ("Klienten är inte ansluten");
återanslutaMQTT ();
}
String topicString = "channel/"+String (channelID)+"/publish/"+String (writeAPIKey);
int topicLength = topicString.length ()+1;
char topicBuffer [topicLength];
topicString.toCharArray (topicBuffer, topicLength+1);
Serial.println (topicBuffer);
String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (fuktig, 1));
int dataLength = dataString.length ()+1;
byte dataBuffer [dataLängd];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publicerad": "publicerad misslyckades");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Steg 7: E -postmeddelande om väderrapport
Vi använder IFTTT-appletar för att ge väderrapport i realtid via e-post till användaren. Så, vi har implementerat det genom ThingSpeak. Vi gör ett genomsnitt av 5-fay-värdena för temperatur och luftfuktighet. När värdet för den sista posten är större än medelvärdet. Det kommer att utlösa ett e -postmeddelande "det är en varm dag". och när det är lägre än medelvärdet. Det kommer att utlösa ett e -postmeddelande "Vilken vacker dag". Varje dag runt 10:00 (IST) kommer vi att få ett e -postmeddelande
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
fuktData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = max (fuktData) -min (fuktData);
humidValue = 0,1*perHumid+min (fuktdata);
perTemp = max (tempData) -min (tempData);
tempValue = 0,1*perTemp+min (tempData);
urlTemp = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/1/last.txt');
urlHumid = strcat ('https://api.thingspeak.com/channels/', string (channelID), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));
if (lastTempValue
if (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Det är en varm dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); slutet
Steg 8: Övergripande kod
Övergripande kod
Den övergripande koden är tillgänglig i detta GitHub -arkiv
Begränsningar
- Det finns några problem med att publicera data med publiceringsmetod för den största delen av data. För att lösa detta problem använder vi funktionen write ()
- SPIFFS bör formateras innan de nya data överförs till SPIFFS.
- Du får inte använda funktionen fördröjning (). delay () hindrar bakgrundsoperationen. Skapa istället förseningar med millis () endast om det är nödvändigt
Poäng
- ESP826WebServer
- Schemaläggaren
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Rekommenderad:
Läs el- och gasmätare (belgisk/nederländsk) och ladda upp till Thingspeak: 5 steg
Läs el- och gasmätare (belgisk/nederländsk) och ladda upp till Thingspeak: Om du är orolig för din energiförbrukning eller bara en liten nörd, vill du förmodligen se data från din snygga nya digitala mätare på din smartphone. projekt kommer vi att få aktuell information från en belgisk eller nederländsk digital el
Luftkvalitetsmonitor med MQ135 och extern temperatur- och fuktighetssensor över MQTT: 4 steg
Luftkvalitetsmonitor med MQ135 och extern temperatur- och fuktighetssensor över MQTT: Detta är för teständamål
ThingSpeak, IFTTT, Temp and Humidity Sensor och Google Sheet: 8 steg
ThingSpeak, IFTTT, Temp and Humidity Sensor och Google Sheet: I detta projekt kommer vi att mäta temperatur och luftfuktighet med NCD -temperatur- och fuktsensor, ESP32 och ThingSpeak. Vi kommer också att skicka olika temperatur- och fuktighetsavläsningar till Google Sheet med ThingSpeak och IFTTT för att analysera
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid