Indholdsfortegnelse:

Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets: 8 trin
Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets: 8 trin

Video: Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets: 8 trin

Video: Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets: 8 trin
Video: Overview of Syncopal Disorders 2024, November
Anonim
Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets
Vejrmelding ved hjælp af ThingSpeak MQTT og IFTTT applets

Introduktion

En skybaseret vejrprogram, der leverer daglige vejrrapporter som e-mail-meddelelse. Denne webapplikation måler temperatur og fugtighed ved hjælp af SHT25 og Adafruit Huzzah ESP8266. Det giver os data om temperatur og luftfugtighed i realtid og timeanalyser. Dataene sendes ved hjælp af ThingSpeak MQTT API, og senere sender vi en e -mail -meddelelse til brugeren, når temperaturen når den tildelte tærskel ved hjælp af IFTTT -protokol. SHT25 er en temperatur- og fugtighedssensorer fremstillet af Sensirion. SHT25 giver en høj nøjagtighed omkring ± 2% RF. Dens fugtighedsområde er mellem 0 til 100% og temperaturområdet er mellem -40 til 125 ° C. Det er meget mere pålideligt og hurtigt med 8 sekunders sensor responstid.

Funktioner

  • Giver dig analyse og statistik i realtid ved hjælp af Thing Speak MQTT API
  • En e -mail -meddelelse gives til brugeren på et bestemt tidspunkt ved hjælp af IFTTT
  • Task Scheduler bruges til at planlægge opgaven som at hente data fra sensorer, offentliggøre sensoraflæsninger, abonnere på MQTT -emne
  • Den bruger I2C -protokol til at hente sensoraflæsning, som er mere præcis, udvidelig og skalerbar
  • dvaletilstand, når enheden er inaktiv, eller der ikke kaldes til tilbagekald til opgave.
  • effektiv opgaveplanlægning giver problemfri brug
  • En separat webside er hostet, hvor brugeren skal angive sine brugeroplysninger for at undgå at blinke din enhed hver gang, når den er i nærheden af andre wifi -netværk
  • SPIFFS bruges til at gemme vores webside for at gøre vores kode læsbar og mindre klodset

Trin 1: Specifikationer for hardware og software

Hardware- og softwarespecifikation
Hardware- og softwarespecifikation
Hardware- og softwarespecifikation
Hardware- og softwarespecifikation

Hardware specifikation

  • Adafruit esp8266 Huzzah board
  • Huzzah Board Shield
  • SHT25 Sensormodul
  • I2C kabel

Softwarespecifikation

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

Trin 2: Lagring af brugeroplysninger

Lagring af brugeroplysninger
Lagring af brugeroplysninger
Lagring af brugeroplysninger
Lagring af brugeroplysninger

Her bruger vi SHT25 I2C-sensor til at aflæse realtidsværdien af temperatur og relativ luftfugtighed og sende denne værdi til skyen. For at få den opdaterede sensorværdi tid til anden og for at sende disse opdateringer samtidigt bruger vi Arduinos Task Scheduler Library. Til skyoperationer bruger vi ThingSpeak MQTT API. Senere leverer vi vejrrapport i realtid til brugeren ved hjælp af IFTTT-applets. Du kan følge disse trin for at lave din egen vejrstation. Så DIY.

Inden man går videre. Vi skal gemme brugeroplysninger. Til dette formål er vi vært for en webserver på 192.169.1.4. Vi har gemt vores webformular i SPIFFS. Når enheden starter, er den vært for en webserver i 60 sekunder. Brugeren skal følge disse trin.

  • Opret forbindelse til AP ESPuser, Dette er angivet på din tilgængelige wifi -netværksliste. Opret forbindelse til denne AP og indtast adgangskoden "*******"
  • Når den får forbindelse, skal du gå til din browser og indtaste IP 192.168.1.4.
  • Indtast SSID og adgangskode for din lokale WiFi i inputfelterne, og indtast SEND
  • Disse legitimationsoplysninger gemmes i EEPROM
  • Efter 60 sekunder afbrydes enheden automatisk fra AP
  • Næste gang du tænder enheden, skal brugeren ikke følge denne procedure. Enheden henter automatisk brugeroplysningerne fra EEPROM og fortsætter med at få sensoraflæsningerne fra I2C -grænsefladen og sende den til 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 ("Konfiguration af adgangspunkt …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Opsætning af brugeroplysninger");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

mens (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// *************************** HÅNDTAG ROOT ******************* ********* // void handleRoot () {

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

{

// Hvis alle formularfelter indeholder datakald

handelSubmit ()

handleSubmit (); }

andet {

// Genvis formularen

// læs filen indeholdt i spiffs

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

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

// glem ikke at lukke filen

file.close ();

}}

// Kontroller status for, at den har argumenterne ssid og adgangskode

// Skriv derefter legitimationsoplysningerne til ROM

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

Trin 3: Opsætning af din webformular i SPIFFS

SPIFFS

Serielt perifert interface Flash File System, eller SPIFFS for kort. Det er et let filsystem til mikrokontrollere med en SPI-flashchip. Den indbyggede flashchip i ESP8266 har masser af plads til dine websider, især hvis du har 1 MB, 2 MB eller 4 MB versionen. Vi har også gemt vores webside i Flash System. Der er et par trin, vi skal følge for at uploade data til spiffs

  1. Download værktøjet:
  2. Opret værktøjskatalog i din Arduino -skitsebogskatalog, hvis den ikke findes endnu
  3. Pak værktøjet ud i værktøjskataloget (stien vil ligne /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Genstart Arduino IDE
  5. Åbn en skitse (eller opret en ny og gem den)
  6. Gå til skitsemappen (vælg Skitse> Vis skitsemappe)
  7. Opret et bibliotek med navnet data og eventuelle filer, du ønsker i filsystemet der. Vi har uploadet vores HTML -side med navnet webform.html
  8. Sørg for, at du har valgt et kort, en port og en lukket seriel skærm
  9. Vælg Værktøjer> ESP8266 Upload af skitsedata. Dette skulle begynde at uploade filerne til ESP8266 flash -filsystemet. Når det er gjort, viser IDE -statuslinjen SPIFFS Image Uploaded -meddelelse.

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

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

// glem ikke at lukke filen

file.close ();

Trin 4: Opgaveplanlægning

I denne vejledning udfører vi to operationer:

  • Læs dataene fra SHT25 ved hjælp af I2C -protokol
  • Send de opdaterede data til skyen ved hjælp af ThingSpeak MQTT API

For at opnå dette bruger vi TaskScheduler bibliotek. Vi har planlagt to forskellige opgaver, der refererer til to forskellige kontroloperationer. dette gøres som følger

  • Opgave 1 er til aflæsning af sensorværdien, denne opgave kører i 1 sekund, indtil den når timeout på 10 sekunder.
  • Når opgave1 når sin timeout, opretter vi forbindelse til lokal Wifi- og MQTT -mægler.
  • Nu er Opgave 2 aktiveret, og vi deaktiverer Opgave 1 Opgave 2 er til at offentliggøre sensordata til Thing Speak MQTT -mægler, denne opgave kører i 20 sekunder, indtil den når timeout på 20 sekunder
  • Når opgaven 2 når sin timeout, er opgave 1 aktiveret igen, og opgave 2 er deaktiveret. her igen får vi den opdaterede værdi, og processen fortsætter
  • når der ikke kaldes et tilbagekald, eller enheden er inaktiv, går den til Light Sleep og sparer dermed strøm.

// --------- prototype til opgaveopkald ------------ //

ugid taskI2CCallback ();

ugid taskI2CDisable ();

ugid taskWiFiCallback ();

ugid taskWiFiDisable ();

// --------- Opgaver ------------ //

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

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

// aktiver tI2C tI2C.enable ();

Trin 5: Aflæsning af temperatur- og fugtighedsværdier fra SHT25

Læsning af temperatur og fugtighedsværdier fra SHT25
Læsning af temperatur og fugtighedsværdier fra SHT25

I2C er et to-leder interface, der kun bruger to ledninger til at kommunikere med master-enheden. Den ene er SCL (Serial Clock) og den anden er SDA (Serial Data). Hver slaveenhed har en unik adresse. SHT 25 har også en 8-bit adresse og kan tilgås med en 0x44 adresse. den har en 8 -bit af adressen, hvor 7 bits er den faktiske adresse, og mens LSB -bit 0 til højre bruges til at signalere læsning fra eller skrivning til enheden. Hvis bit 0 er indstillet til 1, læser master -enheden fra slave I2C -enheden. I2C er meget mere pålidelig, skalerbar og hurtig, og selv den har mange driftsmåder, som gør den meget mere energieffektiv

Vi bruger Wire.h bibliotek til at læse temperatur og fugtighedsværdier. Dette bibliotek letter i2c -kommunikation mellem sensoren og master -enheden. 0x44 er I2C -adressen til SHT25. SHT25 fungerer på en anden måde. Du kan henvise til databladet for det. Vi bruger 0x2C og 0x06 som henholdsvis MSB og LSB til enkeltskud

Trin 6: Publicering af værdier til ThingSpeak ved hjælp af ThingSpeak MQTT API

Publicering af værdier til ThingSpeak ved hjælp af ThingSpeak MQTT API
Publicering af værdier til ThingSpeak ved hjælp af ThingSpeak MQTT API

Til at sende vores temperatur- og fugtighedsværdier til skyen bruger vi ThingSpeak MQTT API. ThingSpeak er en IoT -platform. ThingSpeak er en gratis webtjeneste, der lader dig indsamle og gemme sensordata i skyen. MQTT er en almindelig protokol, der bruges i IoT-systemer til at forbinde enheder på lavt niveau og sensorer. MQTT bruges til at videregive korte beskeder til og fra en mægler. ThingSpeak har for nylig tilføjet en MQTT -mægler, så enheder kan sende beskeder til ThingSpeak. Du kan følge proceduren for at konfigurere ThingSpeak -kanal fra dette indlæg

ThingSpeak MQTT

MQTT er en publish/subscribe-arkitektur, der primært er udviklet til at forbinde båndbredde og strømbegrænsede enheder over trådløse netværk. Det er en enkel og let protokol, der kører over TCP/IP -sockets eller WebSockets. MQTT over WebSockets kan sikres med SSL. Publicerings-/abonnementsarkitekturen gør det muligt at skubbe meddelelser til klientenhederne, uden at enheden kontinuerligt behøver at polle serveren. En klient er enhver enhed, der opretter forbindelse til mægleren og kan udgive eller abonnere på emner for at få adgang til oplysningerne. Et emne indeholder routingsoplysninger for mægleren. Hver klient, der ønsker at sende meddelelser, udgiver dem til et bestemt emne, og hver klient, der ønsker at modtage beskeder, abonnerer på et bestemt emne

Udgiv og tilmeld dig ved hjælp af ThingSpeak MQTT

  • Udgivelse til kanalfeedkanaler /publish /
  • Udgivelse til et bestemt felt kanaler/publish/fields/field/
  • Abonner på kanalfeltet kanaler/abonnér //
  • Abonner på de private kanalfeedkanaler // subscribe/fields/field/
  • Abonner på alle felter på en kanal. kanaler // abonnere/felter/feild/

ugid taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

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

Serial.println (tWiFi.getTimeout ());

hvis (! mqttCli.connected ())

{

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

tilslut igen 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 (fugtig, 1));

int dataLength = dataString.length ()+1;

byte dataBuffer [dataLængde];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Udgivet": "offentliggjort mislykkedes");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Trin 7: E -mail -meddelelse om vejrmelding

E -mail -meddelelse om vejrmelding
E -mail -meddelelse om vejrmelding
E -mail -meddelelse om vejrmelding
E -mail -meddelelse om vejrmelding

Vi bruger IFTTT-applets til at give vejrrapport i realtid via e-mail til brugeren. Så vi har implementeret det gennem ThingSpeak. Vi er i gennemsnit 5-fay-værdierne for temperatur og fugtighed. Når værdien af den sidste post er større end gennemsnitsværdien. Det vil udløse en e -mail -meddelelse "det er en varm dag". og når den er mindre end gennemsnitsværdien. Det vil udløse en e -mail -meddelelse "Sikke en smuk dag". Hver dag omkring kl. 10:00 (IST) modtager vi en e -mail -meddelelse

channelID = ******;

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

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

perHumid = max (moistData) -min (moistData);

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

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

Trin 8: Overordnet kode

Samlet kodeks
Samlet kodeks
Samlet kodeks
Samlet kodeks
Samlet kodeks
Samlet kodeks

Samlet kodeks

Den samlede kode er tilgængelig i dette GitHub -lager

Begrænsninger

  • Der er nogle problemer med at offentliggøre data ved hjælp af offentliggør en metode til den største del af data. For at løse dette problem bruger vi skrivefunktionen ()
  • SPIFFS skal formateres, før de nye data uploades til SPIFFS.
  • Du må ikke bruge funktionen delay (). forsinkelse () hindrer baggrundsoperationen. I stedet skal du kun oprette forsinkelser ved hjælp af millis (), hvis det er nødvendigt

Credits

  • ESP826WebServer
  • Opgaveplanlægger
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Anbefalede: