Turinys:

Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles: 8 žingsniai
Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles: 8 žingsniai

Video: Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles: 8 žingsniai

Video: Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles: 8 žingsniai
Video: Sinoptikai turi gerų žinių: rudenį primenančius orus po truputį keis šiluma 2024, Lapkritis
Anonim
Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles
Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles

Įvadas

Debesimis pagrįsta orų programa, teikianti kasdienes orų ataskaitas kaip el. Pašto pranešimas. Ši žiniatinklio programa matuoja temperatūrą ir drėgmę, naudojant SHT25 ir „Adafruit Huzzah ESP8266“. Jame pateikiami temperatūros ir drėgmės duomenys realiuoju laiku ir valandinė analizė. Duomenys siunčiami naudojant „ThingSpeak MQTT“API, o vėliau vartotojui pateikiame el. Pašto pranešimą, kai temperatūra pasiekia priskirtą slenkstį, naudojant IFTTT protokolą. SHT25 yra temperatūros ir drėgmės jutikliai, pagaminti „Sensirion“. SHT25 užtikrina aukštą tikslumo lygį, apie 2% RH. Drėgmės diapazonas yra nuo 0 iki 100%, o temperatūros diapazonas -nuo -40 iki 125 ° C. Jis yra daug patikimesnis ir greitesnis, nes jutiklio atsako laikas yra 8 sek.

funkcijos

  • Teikia jums analizę ir statistiką realiuoju laiku naudojant „Thing Speak MQTT“API
  • Pranešimas el. Paštu vartotojui pateikiamas priskirtu laiku naudojant IFTTT
  • Užduočių planuotojas naudojamas suplanuoti užduotį, pvz., Gauti duomenis iš jutiklių, paskelbti jutiklių rodmenis, užsiprenumeruoti MQTT temą
  • Jis naudoja I2C protokolą, kad gautų jutiklio rodmenis, kurie yra tikslesni, plečiami ir keičiami
  • miego režimas, kai prietaisas neveikia arba nėra iškviečiamas užduoties atgalinis skambutis.
  • efektyvus užduočių planavimas užtikrina nerūpestingą naudojimą
  • Priglobiamas atskiras tinklalapis, kuriame vartotojas turi pateikti savo vartotojo kredencialus, kad išvengtų jūsų įrenginio mirksėjimo kiekvieną kartą, kai pasiekiamas kitas „Wi -Fi“tinklas
  • SPIFFS naudojamas mūsų tinklalapiui saugoti, kad mūsų kodas būtų įskaitomas ir mažiau gremėzdiškas

1 žingsnis: Aparatūros ir programinės įrangos specifikacija

Techninės ir programinės įrangos specifikacijos
Techninės ir programinės įrangos specifikacijos
Techninės ir programinės įrangos specifikacijos
Techninės ir programinės įrangos specifikacijos

Techninės įrangos specifikacija

  • „Adafruit esp8266 Huzzah“lenta
  • „Huzzah Board Shield“
  • SHT25 jutiklio modulis
  • I2C kabelis

Programinės įrangos specifikacija

  • „Arduino IDE“
  • IFTTT Thing Speak
  • MQTT API

2 veiksmas: saugokite vartotojo kredencialus

Vartotojo kredencialų saugojimas
Vartotojo kredencialų saugojimas
Vartotojo kredencialų saugojimas
Vartotojo kredencialų saugojimas

Čia mes naudojame SHT25 I2C jutiklį, kad nuskaitytume realaus laiko temperatūros ir santykinės drėgmės vertę ir paskelbtume šią vertę debesyje. Norėdami kartkartėmis gauti atnaujintą jutiklio vertę ir vienu metu paskelbti šiuos atnaujinimus, naudojame „Arduino“užduočių planavimo biblioteką. Debesų operacijoms naudojame „ThingSpeak MQTT“API. Vėliau vartotojui pateikiame realaus laiko orų ataskaitas, naudodamiesi IFTTT programėlėmis. Norėdami sukurti savo oro stotį, galite atlikti šiuos veiksmus. Taigi, pasidaryk pats.

Prieš tęsdami toliau. Turime išsaugoti vartotojo kredencialus. Šiuo tikslu mes talpiname žiniatinklio serverį adresu 192.169.1.4. Savo interneto formą išsaugojome SPIFFS. Kai įrenginys paleidžiamas, jame 60 sekundžių priglobiamas žiniatinklio serveris. Vartotojas turėtų atlikti šiuos veiksmus.

  • Prisijunkite prie „AP ESPuser“, tai yra jūsų galimo „Wi -Fi“tinklo sąraše. Prisijunkite prie šios AP ir įveskite slaptažodį „*******“
  • Kai jis bus prijungtas, eikite į savo naršyklę ir įveskite IP 192.168.1.4.
  • Įveskite vietinio „WiFi“SSID ir slaptažodį įvesties laukuose ir įveskite PATEIKTI
  • Šie įgaliojimai bus išsaugoti EEPROM
  • Po 60 sekundžių įrenginys automatiškai atsijungs nuo AP
  • Kitą kartą, kai įjungsite įrenginį, vartotojas neprivalo atlikti šios procedūros, įrenginys automatiškai paims vartotojo kredencialus iš EEPROM ir toliau ims jutiklių rodmenis iš „I2C“sąsajos ir paskelbs juos debesyje

// --------- AP konfigūracija ------------ // IPAddress ap_local_IP (192, 168, 1, 4); „IPAddress ap_gateway“(192, 168, 1, 254); „IPAddress ap_subnet“(255, 255, 255, 0);

Serial.print ("Prieigos taško konfigūravimas …");

„WiFi.softAPConfig“(ap_local_IP, ap_gateway, ap_subnet);

Serial.print („Vartotojo kredencialų nustatymas“);

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = milis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** Rankenų šaknis ****************** ********* // void handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("slaptažodis"))

{

// Jei visuose formos laukuose yra duomenų iškvietimas

handelSubmit ()

handleSubmit (); }

Kitas {

// Iš naujo rodyti formą

// skaityti failą, esantį spiffs

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

server.streamFile (failas, "text/html");

// nepamirškite uždaryti failo

file.close ();

}}

// Patikrinkite būseną, kad ji turi argumentus ssid ir password

// Tada įrašykite kredencialus į ROM

ROMwrite (eilutė (server.arg ("ssid")), eilutė (server.arg ("slaptažodis")))

3 veiksmas: žiniatinklio formos nustatymas naudojant SPIFFS

SPIFFS

„Serial Peripheral Interface Flash File System“arba trumpai SPIFFS. Tai lengva failų sistema, skirta mikrovaldikliams su SPI „flash“mikroschema. ESP8266 integruota „flash“mikroschema turi daug vietos jūsų tinklalapiams, ypač jei turite 1 MB, 2 MB arba 4 MB versiją. Mes taip pat išsaugojome savo tinklalapį „Flash“sistemoje. Norėdami įkelti duomenis į spiffs, turime atlikti kelis veiksmus

  1. Atsisiųskite įrankį:
  2. „Arduino“eskizų knygos kataloge sukurkite įrankių katalogą, jei jo dar nėra
  3. Išpakuokite įrankį į įrankių katalogą (kelias atrodys kaip /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Iš naujo paleiskite „Arduino IDE“
  5. Atidarykite eskizą (arba sukurkite naują ir išsaugokite)
  6. Eikite į eskizų katalogą (pasirinkite Eskizas> Rodyti eskizo aplanką)
  7. Ten sukurkite katalogą, pavadintą „Duomenys“, ir visus norimus failus. Įkėlėme savo HTML puslapį pavadinimu webform.html
  8. Įsitikinkite, kad pasirinkote plokštę, prievadą ir uždarytą nuoseklųjį monitorių
  9. Pasirinkite Įrankiai> ESP8266 Sketch Data Upload. Tai turėtų pradėti įkelti failus į ESP8266 „flash“failų sistemą. Kai tai bus padaryta, IDE būsenos juostoje bus rodomas pranešimas SPIFFS Image Uploaded.

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

server.streamFile (failas, "text/html");

// nepamirškite uždaryti failo

file.close ();

4 žingsnis: užduočių planavimas

Šioje pamokoje mes atliekame dvi operacijas:

  • Perskaitykite duomenis iš SHT25 naudodami I2C protokolą
  • Paskelbkite atnaujintus duomenis į debesį naudodami „ThingSpeak MQTT“API

Norėdami tai pasiekti, naudojame „TaskScheduler“biblioteką. Mes suplanavome dvi skirtingas užduotis, susijusias su dviem skirtingomis valdymo operacijomis. tai daroma taip

  • 1 užduotis skirta skaityti jutiklio vertę; ši užduotis vykdoma 1 sekundę, kol pasibaigs 10 sekundžių skirtasis laikas.
  • Kai Task1 pasiekia skirtąjį laiką, prisijungiame prie vietinio „Wifi“ir „MQTT“brokerio.
  • Dabar 2 užduotis įjungta ir mes išjungiame 1 užduotis
  • Kai 2 užduotis pasiekia savo skirtąjį laiką, 1 užduotis vėl įjungiama ir 2 užduotis išjungiama. vėlgi, mes gauname atnaujintą vertę ir procesas tęsiasi
  • neskambinus atgaliniam skambučiui arba įrenginiui veikiant nenaudojamas, jis pereina į „Light Sleep“režimą ir taip taupo energiją.

// --------- atšaukimo prototipas ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

//---------Užduotys------------//

Užduotis tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL ir taskI2CDisable);

Užduotis tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL ir & taskWiFiDisable);

// įgalinti tI2C tI2C.enable ();

5 žingsnis: Temperatūros ir drėgmės reikšmių skaitymas iš SHT25

Temperatūros ir drėgmės reikšmių skaitymas iš SHT25
Temperatūros ir drėgmės reikšmių skaitymas iš SHT25

I2C yra dviejų laidų sąsaja, kuri naudoja tik du laidus, kad galėtų bendrauti su pagrindiniu įrenginiu. Vienas iš jų yra SCL (serijinis laikrodis), o kitas - SDA (serijiniai duomenys). Kiekvienas vergas turi unikalų adresą. SHT 25 taip pat turi 8 bitų adresą ir jį galima pasiekti 0x44 adresu. jis turi 8 bitus adreso, kur 7 bitai yra tikrasis adresas, o dešiniajame LSB bite 0 naudojamas signalizuoti apie prietaiso skaitymą ar rašymą į jį. Jei bitas 0 nustatytas į 1, pagrindinis įrenginys skaitys iš pavaldinio I2C įrenginio. „I2C“yra daug patikimesnis, keičiamas ir greitas, ir netgi turi daugybę veikimo režimų, todėl jis yra daug efektyvesnis

Temperatūros ir drėgmės vertėms skaityti naudojame „Wire.h“biblioteką. Ši biblioteka palengvina „i2c“ryšį tarp jutiklio ir pagrindinio įrenginio. 0x44 yra SHT25 I2C adresas. SHT25 veikia kitu režimu. Tam galite kreiptis į duomenų lapą. Mes naudojame 0x2C ir 0x06 kaip MSB ir LSB atitinkamai vieno kadro veikimui

6 veiksmas: verčių paskelbimas „ThingSpeak“naudojant „ThingSpeak MQTT“API

„ThingSpeak“verčių paskelbimas naudojant „ThingSpeak MQTT“API
„ThingSpeak“verčių paskelbimas naudojant „ThingSpeak MQTT“API

Norėdami paskelbti savo temperatūros ir drėgmės vertes debesyje, naudojame „ThingSpeak MQTT“API. „ThingSpeak“yra interneto platforma. „ThingSpeak“yra nemokama žiniatinklio paslauga, leidžianti rinkti ir saugoti jutiklių duomenis debesyje. MQTT yra bendras protokolas, naudojamas daiktų interneto sistemose žemo lygio prietaisams ir jutikliams sujungti. MQTT naudojamas trumpoms žinutėms perduoti tarpininkui ir iš jo. „ThingSpeak“neseniai pridėjo MQTT tarpininką, kad įrenginiai galėtų siųsti pranešimus į „ThingSpeak“. Galite sekti procedūrą, kad nustatytumėte „ThingSpeak Channel“iš šio įrašo

„ThingSpeak“MQTT

„MQTT“yra paskelbimo/prenumeratos architektūra, sukurta pirmiausia siekiant sujungti pralaidumą ir ribotos galios įrenginius belaidžiais tinklais. Tai paprastas ir lengvas protokolas, veikiantis per TCP/IP lizdus arba „WebSockets“. MQTT per „WebSockets“gali būti apsaugotas naudojant SSL. Paskelbimo/prenumeratos architektūra leidžia siųsti pranešimus į kliento įrenginius, įrenginiui nereikalaujant nuolat apklausti serverio. Klientas yra bet koks įrenginys, jungiantis prie tarpininko ir galintis paskelbti arba užsiprenumeruoti temas, kad galėtų pasiekti informaciją. Temoje yra brokerio maršruto informacija. Kiekvienas klientas, norintis siųsti pranešimus, skelbia juos tam tikra tema, o kiekvienas klientas, norintis gauti pranešimus, užsisako tam tikrą temą

Paskelbkite ir užsiprenumeruokite naudodami „ThingSpeak MQTT“

  • Skelbiama kanalų sklaidos kanaluose /paskelbti /
  • Skelbimas tam tikrame lauko kanale/paskelbti/laukai/laukas/
  • Prenumeruokite kanalo lauko kanalus/prenumeruokite //
  • Prenumeruokite privataus kanalo sklaidos kanalus // prenumeruoti/laukai/laukas/
  • Prenumeruokite visus kanalo laukus. kanalai // prenumeruoti/laukai/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("šios užduoties skirtasis laikas: / t");

Serial.println (tWiFi.getTimeout ());

jei (! mqttCli.connected ())

{

Serial.println („Klientas neprijungtas“);

reonnectMQTT ();

}

Styginių temos eilutė = "kanalai/"+eilutė (kanalo ID)+"/paskelbti/"+eilutė (writeAPIKey);

int topicLength = topicString.length ()+1;

char temaBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength+1);

Serial.println (topicBuffer);

String dataString = String ("field1 =" + String (tempC, 1) + "& field2 =" + String (tempF, 1) + "& field3 =" + String (drėgnas, 1));

int dataLength = dataString.length ()+1;

baitų dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Paskelbta": "paskelbta nepavyko");

mqttCli.endPublish ();

//mqttCli.loop ();

}

7 veiksmas: pranešimas apie orų prognozę el. Paštu

Pranešimas apie orų pranešimą el. Paštu
Pranešimas apie orų pranešimą el. Paštu
Pranešimas apie orų pranešimą el. Paštu
Pranešimas apie orų pranešimą el. Paštu

Mes naudojame IFTTT programėles, kad galėtume realaus laiko orų pranešimus vartotojui pateikti el. Paštu. Taigi, mes tai įgyvendinome per „ThingSpeak“. Vidutiniškai apskaičiuojame penkių laipsnių temperatūros ir drėgmės vertes. Kai paskutinio įrašo vertė yra didesnė už vidutinę vertę. Jis suaktyvins el. Pašto pranešimą „tai karšta diena“. ir kai jis yra mažesnis už vidutinę vertę. Jis suaktyvins el. Pašto pranešimą „Kokia graži diena“. Kiekvieną dieną apie 10:00 (IST) gausime pranešimą el. Paštu

kanalo ID = ******;

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

drėgmės duomenys = dalykasSpeakRead (kanalo ID, „Laukai“, 3, „NumDays“, 5); tempData = thingSpeakRead (kanalo ID, 'Laukai', 1, 'NumDays', 5);

perHumid = max (drėgmės duomenys) -min (drėgmės duomenys);

humidValue = 0,1*perHumid+min (drėgmės duomenys);

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

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

urlTemp = strcat ('https://api.thingspeak.com/channels/', eilutė (kanalo ID), '/fields/1/last.txt');

urlHumid = strcat ('https://api.thingspeak.com/channels/', eilutė (kanalo ID), '/fields/3/last.txt'); lastTempValue = str2num (žiniatinklio skaitymas (urlTemp)); lastHumidValue = str2num (žiniatinklio skaitymas (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Karšta diena.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); galas

8 žingsnis: bendras kodas

Bendras kodas
Bendras kodas
Bendras kodas
Bendras kodas
Bendras kodas
Bendras kodas

Bendras kodas

Bendras kodas yra šioje „GitHub“saugykloje

Apribojimai

  • Yra keletas problemų skelbiant duomenis naudojant paskelbimo metodą daugumai duomenų. Norėdami išspręsti šią problemą, naudojame funkciją write ()
  • Prieš įkeliant naujus duomenis į SPIFFS, SPIFFS turėtų būti suformatuotas.
  • Jūs neturite naudoti „delay“() funkcijos. delay () trukdo veikti fone. Vietoj to sukurkite vėlavimus naudodami milis () tik tada, kai tai būtina

Kreditai

  • ESP826WebServer
  • Darbų planuotojas
  • SHT 25
  • „ThingSpeak MQTT“API
  • IFTTT
  • PubSubClient

Rekomenduojamas: