Innehållsförteckning:

Väderrapport med ThingSpeak MQTT och IFTTT Applets: 8 steg
Väderrapport med ThingSpeak MQTT och IFTTT Applets: 8 steg

Video: Väderrapport med ThingSpeak MQTT och IFTTT Applets: 8 steg

Video: Väderrapport med ThingSpeak MQTT och IFTTT Applets: 8 steg
Video: Hur fastställer man egentligen en väderprognos? 2024, November
Anonim
Väderrapport med ThingSpeak MQTT och IFTTT applets
Väderrapport med ThingSpeak MQTT och IFTTT applets

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

Specifikationer för hårdvara och programvara
Specifikationer för hårdvara och programvara
Specifikationer för hårdvara och programvara
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

Lagra användarupter
Lagra användarupter
Lagra användarupter
Lagra användarupter

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

  1. Ladda ner verktyget:
  2. Skapa verktygskatalog i din Arduino -skissbokskatalog om den inte finns ännu
  3. Packa upp verktyget i verktygskatalogen (sökvägen kommer att se ut som /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Starta om Arduino IDE
  5. Öppna en skiss (eller skapa en ny och spara den)
  6. Gå till skisskatalogen (välj Skiss> Visa skissmapp)
  7. 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
  8. Se till att du har valt ett kort, en port och en stängd seriell bildskärm
  9. 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

Avläsning av temperatur- och luftfuktighetsvärden från SHT25
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

Publicera värden till ThingSpeak med hjälp av ThingSpeak MQTT API
Publicera värden till ThingSpeak med hjälp av 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

Väderrapport E -postavisering
Väderrapport E -postavisering
Väderrapport E -postavisering
Väderrapport E -postavisering

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
Övergripande kod
Övergripande kod
Övergripande kod
Övergripande kod
Ö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: