Innholdsfortegnelse:

Værmelding ved bruk av ThingSpeak MQTT og IFTTT Applets: 8 trinn
Værmelding ved bruk av ThingSpeak MQTT og IFTTT Applets: 8 trinn

Video: Værmelding ved bruk av ThingSpeak MQTT og IFTTT Applets: 8 trinn

Video: Værmelding ved bruk av ThingSpeak MQTT og IFTTT Applets: 8 trinn
Video: Мега шестерня в моем станке. Оживление 676-го. 2024, November
Anonim
Værmelding ved bruk av ThingSpeak MQTT og IFTTT applets
Værmelding ved bruk av ThingSpeak MQTT og IFTTT applets

Introduksjon

En skybasert værprogram som gir daglige værmeldinger som e-postvarsel. Denne nettapplikasjonen måler temperatur og fuktighet ved bruk av SHT25 og Adafruit Huzzah ESP8266. Det gir oss sanntids temperatur- og fuktighetsdata og timeanalyse. Dataene sendes ved hjelp av ThingSpeak MQTT API, og senere sender vi en e -postvarsel til brukeren når temperaturen når den tildelte terskelen ved hjelp av IFTTT -protokollen. SHT25 er en temperatur- og fuktighetssensorer laget av Sensirion. SHT25 gir en høy nøyaktighet rundt ± 2% RH. Luftfuktighetsområdet er mellom 0 til 100% og temperaturområdet er mellom -40 til 125 ° C. Det er mye mer pålitelig og rask med 8 sekunder sensorresponstid.

Funksjoner

  • Gir deg sanntidsanalyse og statistikk ved hjelp av Thing Speak MQTT API
  • En e -postvarsel gis til brukeren på et bestemt tidspunkt ved bruk av IFTTT
  • Oppgaveplanlegger brukes til å planlegge oppgaven som å hente data fra sensorer, publisere sensoravlesningene, abonnere på MQTT -emne
  • Den bruker I2C -protokoll for å hente sensoravlesningen som er mer nøyaktig, utvidbar og skalerbar
  • hvilemodus når enheten er inaktiv eller det ikke ringes opp en tilbakeringing.
  • effektiv oppgaveplanlegging gir problemfri bruk
  • En egen webside er vert der brukeren må oppgi brukerlegitimasjon for å unngå å blinke enheten din hver gang når den er tilgjengelig for andre wifi -nettverk
  • SPIFFS brukes til å lagre nettsiden vår for å gjøre koden vår lesbar og mindre klønete

Trinn 1: Spesifikasjon for maskinvare og programvare

Maskinvare- og programvarespesifikasjon
Maskinvare- og programvarespesifikasjon
Maskinvare- og programvarespesifikasjon
Maskinvare- og programvarespesifikasjon

Maskinvarespesifikasjon

  • Adafruit esp8266 Huzzah -brett
  • Huzzah Board Shield
  • SHT25 Sensormodul
  • I2C -kabel

Programvarespesifikasjon

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

Trinn 2: Lagre brukerlegitimasjon

Lagre brukeropplysninger
Lagre brukeropplysninger
Lagre brukeropplysninger
Lagre brukeropplysninger

Her bruker vi SHT25 I2C-sensor til å lese sanntidsverdien av temperatur og relativ fuktighet og legge ut denne verdien til skyen. For å få den oppdaterte sensorverdien tid til annen og for å legge ut disse oppdateringene samtidig bruker vi Arduinos Task Scheduler Library. For skyoperasjoner bruker vi ThingSpeak MQTT API. Senere leverer vi værmelding i sanntid til brukeren ved hjelp av IFTTT-appletter. Du kan følge disse trinnene for å lage din egen værstasjon. Så, DIY.

Før du går videre. Vi må lagre brukerens legitimasjon. For dette formålet er vi vert for en webserver på 192.169.1.4. Vi har lagret nettskjemaet vårt i SPIFFS. Når enheten starter, er den vert for en webserver i 60 sekunder. Brukeren bør følge disse trinnene.

  • Koble til AP ESPuser, Dette er oppført i listen over tilgjengelige wifi -nettverk. Koble til denne AP -en og skriv inn passordet "*******"
  • Når den blir tilkoblet, går du til nettleseren din og skriver inn IP 192.168.1.4.
  • Skriv inn SSID og passord for din lokale WiFi i inndatafeltene og skriv inn SEND
  • Disse legitimasjonene blir lagret i EEPROM
  • Etter 60 sekunder kobler enheten seg automatisk fra AP
  • Neste gang du slår på enheten, trenger ikke brukeren å følge denne prosedyren. Enheten vil automatisk hente brukeropplysningene fra EEPROM og fortsette med å få sensoravlesningene fra I2C -grensesnittet og legge det ut i skyen

// --------- 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 ("Konfigurere tilgangspunkt …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Sette opp brukerlegitimasjon");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// *************************** HANDTELROT ******************* ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("passord"))

{

// Hvis alle skjemafelt inneholder dataanrop

handelSubmit ()

handleSubmit (); }

annet {

// Vis skjemaet på nytt

// les filen som finnes i spiffs

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

server.streamFile (fil, "tekst/html");

// ikke glem å lukke filen

file.close ();

}}

// Kontroller statusen for at den har argumentene ssid og passord

// Skriv deretter legitimasjonen til ROM

ROMwrite (String (server.arg ("ssid")), String (server.arg ("passord")))

Trinn 3: Konfigurere nettskjemaet ditt i SPIFFS

SPIFFS

Serielt perifert grensesnitt Flash File System, eller SPIFFS for kort. Det er et lett filsystem for mikrokontrollere med en SPI-flash-brikke. Den innebygde flash -brikken til ESP8266 har god plass til nettsidene dine, spesielt hvis du har 1 MB, 2 MB eller 4 MB versjon. Vi har også lagret nettsiden vår i Flash System. Det er noen få trinn vi må følge for å laste opp data til spiffs

  1. Last ned verktøyet:
  2. I din Arduino skissebok -katalog, opprett verktøykatalog hvis den ikke eksisterer ennå
  3. Pakk ut verktøyet i verktøykatalogen (banen vil se ut som /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Start Arduino IDE på nytt
  5. Åpne en skisse (eller lag en ny og lagre den)
  6. Gå til skisse -katalogen (velg Skisse> Vis skisse -mappe)
  7. Lag en katalog som heter data og eventuelle filer du vil ha i filsystemet der. Vi har lastet opp HTML -siden vår med navnet webform.html
  8. Sørg for at du har valgt et kort, port og lukket seriell skjerm
  9. Velg Verktøy> ESP8266 Sketch Data Upload. Dette bør begynne å laste opp filene til ESP8266 flash -filsystemet. Når dette er gjort, vil IDE -statuslinjen vise SPIFFS Image Uploaded -melding.

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

server.streamFile (fil, "tekst/html");

// ikke glem å lukke filen

file.close ();

Trinn 4: Oppgaveplanlegging

I denne opplæringen utfører vi to operasjoner:

  • Les dataene fra SHT25 ved hjelp av I2C -protokollen
  • Legg ut de oppdaterte dataene til skyen ved hjelp av ThingSpeak MQTT API

For å oppnå dette bruker vi TaskScheduler -biblioteket. Vi har planlagt to forskjellige oppgaver som refererer til to forskjellige kontrolloperasjoner. dette gjøres som følger

  • Oppgave 1 er for å lese sensorverdien denne oppgaven kjører i 1 sekund til den når timeout på 10 sekunder.
  • Når oppgave1 når sin timeout Vi kobler til lokal Wifi- og MQTT -megler.
  • Nå er oppgave 2 aktivert og vi deaktiverer oppgave 1 oppgave 2 er for å publisere sensordata til Thing Speak MQTT -megler, denne oppgaven kjører i 20 sekunder til den når timeout på 20 sekunder
  • Når oppgave 2 når sin tidsavbrudd, blir oppgave 1 aktivert igjen og oppgave 2 er deaktivert. her igjen, vi får den oppdaterte verdien, og prosessen fortsetter
  • når det ikke ringes tilbake eller enheten er inaktiv, går den til Light Sleep og sparer strøm.

// --------- prototype for tilbakeringing av oppgaver ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

// --------- Oppgaver ------------ //

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

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

// aktiver tI2C tI2C.enable ();

Trinn 5: Lesing av temperatur- og fuktighetsverdier fra SHT25

Lesing av temperatur- og fuktighetsverdier fra SHT25
Lesing av temperatur- og fuktighetsverdier fra SHT25

I2C er et to-leder grensesnitt som bare bruker to ledninger for å kommunisere med hovedenheten. Den ene er SCL (Serial Clock) og den andre er SDA (Serial Data). Hver slaveenhet har en unik adresse. SHT 25 har også en 8-biters adresse og kan nås med en 0x44-adresse. den har en 8 -bit av adressen der 7 biter er den faktiske adressen, og mens høyre LSB -bit 0 brukes til å signalisere lesing fra eller skriving til enheten. Hvis bit 0 er satt til 1, vil master -enheten lese fra slave I2C -enheten. I2C er mye mer pålitelig, skalerbar og rask, og selv den har mange driftsmåter som gjør den mye mer energieffektiv

Vi bruker Wire.h -biblioteket til å lese temperatur- og fuktighetsverdiene. Dette biblioteket muliggjør i2c -kommunikasjon mellom sensoren og hovedenheten. 0x44 er I2C -adressen til SHT25. SHT25 opererer i en annen modus. Du kan referere til databladet for det. Vi bruker 0x2C og 0x06 som henholdsvis MSB og LSB for enkeltskuddsoperasjon

Trinn 6: Publisere verdier til ThingSpeak ved hjelp av ThingSpeak MQTT API

Publisere verdier til ThingSpeak ved hjelp av ThingSpeak MQTT API
Publisere verdier til ThingSpeak ved hjelp av ThingSpeak MQTT API

For å legge våre temperatur- og fuktighetsverdier til skyen bruker vi ThingSpeak MQTT API. ThingSpeak er en IoT -plattform. ThingSpeak er en gratis webtjeneste som lar deg samle og lagre sensordata i skyen. MQTT er en vanlig protokoll som brukes i IoT-systemer for å koble til enheter og sensorer på lavt nivå. MQTT brukes til å sende korte meldinger til og fra en megler. ThingSpeak har nylig lagt til en MQTT -megler, slik at enheter kan sende meldinger til ThingSpeak. Du kan følge prosedyren for å sette opp ThingSpeak Channel fra dette innlegget

ThingSpeak MQTT

MQTT er en publiser/abonner-arkitektur som først og fremst er utviklet for å koble båndbredde og strømbegrensede enheter over trådløse nettverk. Det er en enkel og lett protokoll som kjører over TCP/IP -kontakter eller WebSockets. MQTT over WebSockets kan sikres med SSL. Publiser/abonner -arkitekturen gjør det mulig å skyve meldinger til klientenhetene uten at enheten trenger å polle serveren kontinuerlig. En klient er en hvilken som helst enhet som kobles til megleren og kan publisere eller abonnere på emner for å få tilgang til informasjonen. Et emne inneholder ruteinformasjon for megleren. Hver klient som ønsker å sende meldinger, publiserer dem til et bestemt emne, og hver klient som ønsker å motta meldinger, abonnerer på et bestemt emne

Publiser og abonner med ThingSpeak MQTT

  • Publisering til kanalfeedkanaler /publish /
  • Publisering til et bestemt felt kanaler/publish/fields/field/
  • Abonner på kanalfeltet kanaler/abonner //
  • Abonner på kanalene for private kanal // abonnere/felter/felt/
  • Abonner på alle feltene på en kanal. kanaler // abonnere/felter/feild/

ugid taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("timeout for denne oppgaven: / t");

Serial.println (tWiFi.getTimeout ());

hvis (! mqttCli.connected ())

{

Serial.println ("Klienten er ikke tilkoblet");

koble til igjen MQTT ();

}

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 [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publisert": "publisert mislyktes");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Trinn 7: Værmelding via e -post

Værmelding via e -post
Værmelding via e -post
Værmelding via e -post
Værmelding via e -post

Vi bruker IFTTT-appleter for å gi værmelding i sanntid via e-post til brukeren. Så, vi har implementert det gjennom ThingSpeak. Vi gjennomsnitter 5-fay-verdiene av temperatur og fuktighet. Når verdien til den siste oppføringen er større enn gjennomsnittsverdien. Det vil utløse en e -postvarsling "det er en varm dag". og når den er mindre enn gjennomsnittsverdien. Det vil utløse en e -postvarsling "What a beautiful day". Hver dag rundt kl. 10:00 (IST) får vi en e -postvarsel

channelID = ******;

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

moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = maks (fuktighetsdata) -min (fuktighetsdata);

humidValue = 0,1*perHumid+min (fuktighetsdata);

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

hvis (lastTempValue

hvis (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Det er en varm dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); slutt

Trinn 8: Samlet kode

Samlet kode
Samlet kode
Samlet kode
Samlet kode
Samlet kode
Samlet kode

Samlet kode

Den generelle koden er tilgjengelig i dette GitHub -depotet

Begrensninger

  • Det er noen problemer med å publisere dataene ved hjelp av publiseringsmetode for den store mengden data. For å løse dette problemet bruker vi skrive () -funksjonen
  • SPIFFS bør formateres før du laster opp de nye dataene til SPIFFS.
  • Du må ikke bruke funksjonen forsinkelse (). forsinkelse () hindrer bakgrunnsoperasjonen. Opprett i stedet forsinkelser med millis () bare hvis det er nødvendig

Studiepoeng

  • ESP826WebServer
  • Oppgaveplanlegger
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Anbefalt: