Sisällysluettelo:

Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia: 8 vaihetta
Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia: 8 vaihetta

Video: Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia: 8 vaihetta

Video: Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia: 8 vaihetta
Video: How to create a game in MIT App Inventor 2 2024, Syyskuu
Anonim
Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia
Säätiedotus käyttämällä ThingSpeak MQTT- ja IFTTT -sovelmia

Johdanto

Pilvipohjainen sääsovellus, joka tarjoaa päivittäiset sääraportit sähköposti-ilmoituksena. Tämä verkkosovellus mittaa lämpötilan ja kosteuden käyttämällä SHT25 ja Adafruit Huzzah ESP8266. Se tarjoaa meille reaaliaikaisia lämpötila- ja kosteustietoja sekä tuntikohtaisia analyysejä. Tiedot lähetetään ThingSpeak MQTT API -sovellusliittymän avulla ja myöhemmin lähetämme käyttäjälle sähköposti -ilmoituksen aina, kun lämpötila saavuttaa määritetyn kynnyksen IFTTT -protokollaa käyttäen. SHT25 on Sensirionin valmistama lämpötila- ja kosteusanturi. SHT25 tarjoaa korkean tarkkuuden noin ± 2% RH. Sen kosteusalue on 0-100% ja lämpötila -alue -40-125 ° C. Se on paljon luotettavampi ja nopeampi, kun anturin vasteaika on 8 sekuntia.

ominaisuudet

  • Tarjoaa reaaliaikaisia analyysejä ja tilastoja Thing Speak MQTT -sovellusliittymän avulla
  • Sähköposti -ilmoitus toimitetaan käyttäjälle määrättynä ajankohtana IFTTT: n avulla
  • Tehtävien ajoitustoimintoa käytetään tehtävän ajoitukseen, kuten tietojen noutamiseen antureista, anturilukemien julkaisemiseen, MQTT -aiheen tilaamiseen
  • Se käyttää I2C -protokollaa anturilukeman noutamiseen, joka on tarkempi, laajennettavissa ja skaalautuva
  • lepotilaan, kun laite on käyttämättömänä tai ei soita takaisin tehtävään.
  • tehokas tehtävien ajoitus tarjoaa vaivatonta käyttöä
  • Erillistä verkkosivua isännöidään, jossa käyttäjän on annettava käyttäjätiedot, jotta laite ei vilku aina, kun se on muiden wifi -verkkojen ulottuvilla
  • SPIFFS: ää käytetään verkkosivustomme tallentamiseen, jotta koodimme olisi luettavissa ja vähemmän kömpelö

Vaihe 1: Laitteisto- ja ohjelmistomääritykset

Laitteiston ja ohjelmiston tekniset tiedot
Laitteiston ja ohjelmiston tekniset tiedot
Laitteiston ja ohjelmiston tekniset tiedot
Laitteiston ja ohjelmiston tekniset tiedot

Laitteiston tekniset tiedot

  • Adafruit esp8266 Huzzah -taulu
  • Huzzah Board Shield
  • SHT25 -anturimoduuli
  • I2C -kaapeli

Ohjelmiston tiedot

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT -sovellusliittymä

Vaihe 2: Käyttäjätietojen tallentaminen

Käyttäjätietojen tallentaminen
Käyttäjätietojen tallentaminen
Käyttäjätietojen tallentaminen
Käyttäjätietojen tallentaminen

Tässä käytämme SHT25 I2C -anturia lämpötilan ja suhteellisen kosteuden reaaliaikaisen arvon lukemiseen ja julkaisemme nämä arvot pilveen. Saadaksemme päivitetyn anturin arvon ajoittain ja lähettääksemme nämä päivitykset samanaikaisesti käytämme Arduinon Task Scheduler -kirjastoa. Pilvitoiminnoissa käytämme ThingSpeak MQTT -sovellusliittymää. Myöhemmin tarjoamme käyttäjälle reaaliaikaisen sääraportin IFTTT-sovelmien avulla. Voit tehdä oman sääaseman noudattamalla näitä ohjeita. Joten, DIY.

Ennen kuin jatkat eteenpäin. Meidän on tallennettava käyttäjätiedot. Tätä varten isännöimme verkkopalvelinta osoitteessa 192.169.1.4. Olemme tallentaneet verkkolomakkeemme SPIFFS -tiedostoon. Kun laite käynnistyy, se isännöi verkkopalvelinta 60 sekunnin ajan. Käyttäjän tulee noudattaa näitä ohjeita.

  • Muodosta yhteys AP ESPuseriin, tämä on käytettävissä olevien wifi -verkkojen luettelossa. Yhdistä tähän tukiasemaan ja kirjoita salasana "*******"
  • Kun se on yhdistetty, siirry selaimeesi ja kirjoita IP 192.168.1.4.
  • Kirjoita paikallisen WiFi -verkon SSID ja salasana syöttökenttiin ja kirjoita LÄHETÄ
  • Nämä kirjautumistiedot tallennetaan EEPROMiin
  • 60 sekunnin kuluttua laite katkaisee yhteyden AP: hen automaattisesti
  • Seuraavan kerran, kun käynnistät laitteen, käyttäjän ei tarvitse noudattaa tätä menettelyä, laite hakee automaattisesti käyttäjän tunnistetiedot EEPROMista ja jatkaa anturilukemien hankkimista I2C -käyttöliittymästä ja julkaisemisen pilveen

// --------- AP-asetukset ------------ // IPAdd ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

Serial.print ("Tukiaseman määrittäminen …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Käyttäjätunnusten määrittäminen");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** KAHVAN JUURI ****************** ********* // void handleRoot () {

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

{

// Jos kaikki lomakekentät sisältävät datapuhelun

handelLähetä ()

handleSubmit (); }

muu {

// Näytä lomake uudelleen

// lukee spiffien sisältämän tiedoston

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

server.streamFile (tiedosto, "teksti/html");

// älä unohda sulkea tiedostoa

file.close ();

}}

// Tarkista tila, jossa on argumentit ssid ja password

// Kirjoita sitten kirjautumistiedot ROM -levylle

ROMwrite (Jono (server.arg ("ssid")), String (server.arg ("salasana")))

Vaihe 3: Verkkolomakkeen määrittäminen SPIFFS -muodossa

SPIFFS

Serial Peripheral Interface Flash File System tai lyhyesti SPIFFS. Se on kevyt tiedostojärjestelmä mikro-ohjaimille, joissa on SPI-flash-siru. ESP8266: n sisäisessä flash -sirussa on runsaasti tilaa verkkosivuillesi, varsinkin jos sinulla on 1 Mt, 2 Mt tai 4 Mt versio. Olemme myös tallentaneet verkkosivumme Flash -järjestelmään. Meidän on noudatettava muutamia vaiheita, jotta voimme ladata tietoja spiff -tiedostoihin

  1. Lataa työkalu:
  2. Luo työkaluhakemisto Arduino -luonnoskirjahakemistoosi, jos sitä ei vielä ole
  3. Pura työkalu työkalut -hakemistoon (polku näyttää /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Käynnistä Arduino IDE uudelleen
  5. Avaa luonnos (tai luo uusi ja tallenna se)
  6. Siirry luonnoshakemistoon (valitse Luonnos> Näytä luonnoskansio)
  7. Luo hakemisto nimeltä data ja kaikki tiedostot, jotka haluat siellä olevaan tiedostojärjestelmään. Olemme ladanneet HTML -sivumme, jonka nimi on webform.html
  8. Varmista, että olet valinnut piirilevyn, portin ja suljetun sarjamonitorin
  9. Valitse Työkalut> ESP8266 Sketch Data Upload. Tämän pitäisi aloittaa tiedostojen lataaminen ESP8266 flash -tiedostojärjestelmään. Kun olet valmis, IDE -tilarivillä näkyy SPIFFS Image Uploaded -viesti.

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

server.streamFile (tiedosto, "teksti/html");

// älä unohda sulkea tiedostoa

file.close ();

Vaihe 4: Tehtävien ajoitus

Tässä opetusohjelmassa suoritamme kaksi toimintoa:

  • Lue SHT25: n tiedot I2C -protokollan avulla
  • Lähetä päivitetyt tiedot pilveen ThingSpeak MQTT -sovellusliittymän avulla

Tämän saavuttamiseksi käytämme TaskScheduler -kirjastoa. Olemme suunnitelleet kaksi eri tehtävää, jotka viittaavat kahteen erilaiseen ohjaustoimintoon. tämä tehdään seuraavasti

  • Tehtävä 1 on anturin arvon lukemiseen, tämä tehtävä kestää 1 sekunnin, kunnes se saavuttaa 10 sekunnin aikakatkaisun.
  • Kun Task1 saavuttaa aikakatkaisunsa Yhdistämme paikalliseen Wifi- ja MQTT -välittäjään.
  • Tehtävä 2 on nyt käytössä ja poistamme käytöstä Tehtävä 1 Tehtävä 2 on anturitietojen julkaiseminen Thing Speak MQTT -välittäjälle, tämä tehtävä kestää 20 sekuntia, kunnes se saavuttaa 20 sekunnin aikakatkaisun
  • Kun Task2 saavuttaa aikakatkaisunsa, tehtävä 1 otetaan uudelleen käyttöön ja tehtävä 2 on poistettu käytöstä. täällä taas saamme päivitetyn arvon ja prosessi jatkuu
  • kun takaisinsoittoa ei soiteta tai laite on käyttämättömänä, se siirtyy Light Sleep -tilaan, mikä säästää virtaa.

// --------- tehtävän soittamisen prototyyppi ------------ //

mitätön tehtäväI2CCallback ();

void taskI2CDisable ();

mitätön tehtäväWiFiCallback ();

void taskWiFiDisable ();

// --------- Tehtävät ------------ //

Tehtävä tI2C (2 * TASK_SECOND, TASK_FOREVER ja & taskI2CCallback, & ts, false, NULL ja taskI2CDisable);

Tehtävä tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL ja taskWiFiDisable);

// käyttöön tI2C tI2C.enable ();

Vaihe 5: Lämpötila- ja kosteusarvojen lukeminen SHT25: stä

Lämpötilan ja kosteuden arvojen lukeminen SHT25: stä
Lämpötilan ja kosteuden arvojen lukeminen SHT25: stä

I2C on kaksijohtiminen liitäntä, joka käyttää vain kahta johdinta kommunikoidakseen päälaitteen kanssa. Toinen on SCL (Serial Clock) ja toinen SDA (Serial Data). Jokaisella orjalaitteella on yksilöllinen osoite. SHT 25: llä on myös 8-bittinen osoite, ja siihen pääsee 0x44-osoitteella. sillä on 8 bittiä osoitetta, jossa 7 bittiä ovat todellinen osoite, ja kun taas oikeanpuoleista LSB -bittiä 0 käytetään signaalin lukemiseen laitteesta tai kirjoittamiseen laitteesta. Jos bitti 0 on asetettu arvoon 1, isäntälaite lukee orja I2C -laitteesta. I2C on paljon luotettavampi, skaalautuvampi ja nopeampi, ja jopa sillä on monia toimintatiloja, mikä tekee siitä paljon energiatehokkaampaa

Käytämme Wire.h -kirjastoa lämpötila- ja kosteusarvojen lukemiseen. Tämä kirjasto helpottaa i2c -tiedonsiirtoa anturin ja päälaitteen välillä. 0x44 on SHT25: n I2C -osoite. SHT25 toimii eri toimintatilassa. Voit viitata siihen tietolomakkeeseen. Käytämme 0x2C: tä ja 0x06 MSB: nä ja LSB: nä vastaavasti yhden laukauksen toiminnassa

Vaihe 6: Arvojen julkaiseminen ThingSpeakiin ThingSpeak MQTT -sovellusliittymän avulla

Arvojen julkaiseminen ThingSpeakiin ThingSpeak MQTT -sovellusliittymän avulla
Arvojen julkaiseminen ThingSpeakiin ThingSpeak MQTT -sovellusliittymän avulla

Lämpötila- ja kosteusarvojen lähettämiseen pilveen käytämme ThingSpeak MQTT -sovellusliittymää. ThingSpeak on IoT -alusta. ThingSpeak on ilmainen verkkopalvelu, jonka avulla voit kerätä ja tallentaa anturitietoja pilveen. MQTT on yleinen protokolla, jota käytetään IoT-järjestelmissä matalan tason laitteiden ja antureiden yhdistämiseen. MQTT: tä käytetään välittämään lyhytsanomia välittäjälle ja välittäjältä. ThingSpeak on äskettäin lisännyt MQTT -välittäjän, jotta laitteet voivat lähettää viestejä ThingSpeakille. Voit seurata ThingSpeak -kanavan määrittämistä tästä viestistä

ThingSpeak MQTT

MQTT on julkaisu/tilausarkkitehtuuri, joka on kehitetty ensisijaisesti kaistanleveyden ja tehonrajoitteisten laitteiden yhdistämiseksi langattomien verkkojen kautta. Se on yksinkertainen ja kevyt protokolla, joka toimii TCP/IP -pistorasioiden tai WebSockets -kanavien yli. MQTT WebSocketsin kautta voidaan suojata SSL: llä. Julkaise/tilaa tilausarkkitehtuuri mahdollistaa viestien siirtämisen asiakaslaitteisiin ilman, että laitteen tarvitsee jatkuvasti kysyä palvelinta. Asiakas on mikä tahansa laite, joka muodostaa yhteyden välittäjään ja voi julkaista tai tilata aiheita päästäkseen käsiksi tietoihin. Aihe sisältää välittäjän reititystiedot. Jokainen asiakas, joka haluaa lähettää viestejä, julkaisee ne tiettyyn aiheeseen, ja jokainen asiakas, joka haluaa vastaanottaa viestejä, tilaa tietyn aiheen

Julkaise ja tilaa ThingSpeak MQTT: llä

  • Julkaiseminen kanavasyötteen kanaville /julkaisu /
  • Julkaiseminen tietylle kenttäkanavalle/julkaisu/kentät/kenttä/
  • Tilaa kanavakenttäkanavat/tilaa //
  • Tilaa yksityiset kanavasyötteen kanavat // tilaa/kentät/kenttä/
  • Tilaa kaikki kanavan kentät. kanavat // tilaa/kentät/feild/

tyhjä tehtäväWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("tämän tehtävän aikakatkaisu: / t");

Serial.println (tWiFi.getTimeout ());

jos (! mqttCli.connected ())

{

Serial.println ("Asiakas ei ole yhteydessä");

yhdistä uudelleenMQTT ();

}

String topicString = "kanavat/"+Jono (kanavatunnus)+"/julkaise/"+Jono (writeAPIKey);

int topicPituus = topicString.length ()+1;

char topicBuffer [topicPituus];

topicString.toCharArray (topicBuffer, topicPituus+1);

Serial.println (topicBuffer);

String dataString = Jono ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (kostea, 1));

int dataLength = dataString.length ()+1;

tavu dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Julkaistu": "julkaistu epäonnistui");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Vaihe 7: Sääilmoituksen sähköposti -ilmoitus

Säätiedotuksen sähköposti -ilmoitus
Säätiedotuksen sähköposti -ilmoitus
Säätiedotuksen sähköposti -ilmoitus
Säätiedotuksen sähköposti -ilmoitus

Käytämme IFTTT-sovelmia reaaliaikaisen sääilmoituksen lähettämiseen käyttäjälle sähköpostitse. Olemme siis toteuttaneet sen ThingSpeakin kautta. Laskemme lämpötilan ja kosteuden viiden vaiheen arvot keskimäärin. Aina kun viimeisen merkinnän arvo on keskiarvoa suurempi. Se laukaisee sähköposti -ilmoituksen "on kuuma päivä". ja kun se on pienempi kuin keskiarvo. Se lähettää sähköposti -ilmoituksen "Mikä kaunis päivä". Saamme sähköposti -ilmoituksen joka päivä noin klo 10.00 (IST)

kanavatunnus = ******;

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

kosteustiedot = asiaSpeakRead (kanavan tunnus, 'Kentät', 3, 'NumDays', 5); tempData = thingSpeakRead (kanavan tunnus, 'Kentät', 1, 'NumDays', 5);

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

kosteusarvo = 0,1*perHumid+min (kosteustiedot);

perTemp = max (tempData) -min (tempData);

tempValue = 0,1*perTemp+min (tempData);

urlTemp = strcat ('https://api.thingspeak.com/channels/', merkkijono (kanavan tunnus), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', merkkijono (kanavan tunnus), '/fields/3/last.txt'); lastTempValue = str2num (webread (urlTemp)); lastHumidValue = str2num (webread (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'On kuuma päivä.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); loppuun

Vaihe 8: Yleinen koodi

Yleinen koodi
Yleinen koodi
Yleinen koodi
Yleinen koodi
Yleinen koodi
Yleinen koodi

Yleinen koodi

Yleinen koodi on saatavilla tässä GitHub -arkistossa

Rajoitukset

  • Tietojen julkaisemisessa käyttämällä julkaisumenetelmää suurelle osalle tietoja on ongelmia. Tämän ongelman ratkaisemiseksi käytämme write () -toimintoa
  • SPIFFS on alustettava ennen uusien tietojen lataamista SPIFFS: ään.
  • Älä käytä delay () -toimintoa. delay () estää taustatoiminnon. Luo sen sijaan viiveitä millis () -merkillä vain, jos se on tarpeen

Laajuus

  • ESP826WebServer
  • Tehtävien ajoitus
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Suositeltava: