Turinys:
- 1 žingsnis: Aparatūros ir programinės įrangos specifikacija
- 2 veiksmas: saugokite vartotojo kredencialus
- 3 veiksmas: žiniatinklio formos nustatymas naudojant SPIFFS
- 4 žingsnis: užduočių planavimas
- 5 žingsnis: Temperatūros ir drėgmės reikšmių skaitymas iš SHT25
- 6 veiksmas: verčių paskelbimas „ThingSpeak“naudojant „ThingSpeak MQTT“API
- 7 veiksmas: pranešimas apie orų prognozę el. Paštu
- 8 žingsnis: bendras kodas
Video: Orų prognozė naudojant „ThingSpeak MQTT“ir „IFTTT“programėles: 8 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Į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 į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
Č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
- Atsisiųskite įrankį:
- „Arduino“eskizų knygos kataloge sukurkite įrankių katalogą, jei jo dar nėra
- Išpakuokite įrankį į įrankių katalogą (kelias atrodys kaip /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Iš naujo paleiskite „Arduino IDE“
- Atidarykite eskizą (arba sukurkite naują ir išsaugokite)
- Eikite į eskizų katalogą (pasirinkite Eskizas> Rodyti eskizo aplanką)
- Ten sukurkite katalogą, pavadintą „Duomenys“, ir visus norimus failus. Įkėlėme savo HTML puslapį pavadinimu webform.html
- Įsitikinkite, kad pasirinkote plokštę, prievadą ir uždarytą nuoseklųjį monitorių
- 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
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
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
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 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:
Profesionali orų stotis naudojant „ESP8266“ir „ESP32 pasidaryk pats“: 9 žingsniai (su nuotraukomis)
Profesionali orų stotis, naudojant „pasidaryk pats“ESP8266 ir ESP32: „LineaMeteoStazione“yra visiška orų stotis, kurią galima sujungti su profesionaliais „Sensirion“jutikliais ir kai kuriais „Davis“prietaiso komponentais (lietaus matuoklis, anemometras)
Mini orų stotis naudojant „Arduino“ir „ThingSpeak“: 4 žingsniai
Mini orų stotis naudojant „Arduino“ir „ThingSpeak“: Sveiki visi. Šioje instrukcijoje nurodysiu, kaip sukurti personalizuotą mini orų stotį. Be to, mes naudosime „ThingSpeak“API, kad įkeltume orų duomenis į jų serverius, kitaip - koks yra oro sąlygų tikslas
Kaip sukurti orų stotį naudojant „XinaBox“ir „Ubidots“naudojant HTTP: 7 veiksmai
Kaip sukurti orų stotį naudojant „XinaBox“ir „Ubidots“naudojant HTTP: Sužinokite, kaip sukurti savo orų stotį „Ubidots“naudojant „XinaBox xChips“(IP01, CW01 ir SW01) ESP8266 Core ir „Wi-Fi“modulis („xChip CW01“) leidžia vartotojams siųsti duomenis iš „XinaBox“modulinių „xChips“į debesį. Šiuos duomenis galima stebėti nuotoliniu būdu
Profesionaliai atrodančios programėlės: 7 žingsniai (su nuotraukomis)
Profesionaliai atrodantys dalykėliai: ar jums patinka gaminti elektrinius dalykėlius? Skaitykite toliau, kad sužinotumėte, kaip padaryti juos niekuo nesiskiriančius nuo profesionalios parduotuvėje pirktos įrangos, turintį tik purškiamų klijų skardinę ir kai kuriuos OHP skaidres. Nesvarbu, ar tik kuriate žibintuvėlį
Sukurkite šaunias programėles iš mirusios fluorescencinės lempos: 8 žingsniai
Padarykite šaunias programėles iš mirusios fluorescencinės lempos: ar turite mirusių fluorescencinių lempų? Jei taip, vis tiek galite perdirbti kai kurias jo žarnas, kad sukurtumėte paprastas, bet tinkamas naudoti grandines