Përmbajtje:

Raporti i motit duke përdorur aplikacionet ThingSpeak MQTT dhe IFTTT: 8 hapa
Raporti i motit duke përdorur aplikacionet ThingSpeak MQTT dhe IFTTT: 8 hapa

Video: Raporti i motit duke përdorur aplikacionet ThingSpeak MQTT dhe IFTTT: 8 hapa

Video: Raporti i motit duke përdorur aplikacionet ThingSpeak MQTT dhe IFTTT: 8 hapa
Video: Top News - Befason raporti sekret i CIA-s: Njerëzit mund të udhëtojnë në kohë përmes mendjes! 2024, Nëntor
Anonim
Raporti i motit duke përdorur apletet ThingSpeak MQTT dhe IFTTT
Raporti i motit duke përdorur apletet ThingSpeak MQTT dhe IFTTT

Prezantimi

Një aplikim i motit i bazuar në re që siguron raporte ditore të motit si njoftim me email. Ky ueb aplikacion mat temperaturën dhe lagështinë duke përdorur SHT25 dhe Adafruit Huzzah ESP8266. Na siguron të dhëna të Temperaturës dhe Lagështisë në Kohën Reale dhe analitikë për orë. Të dhënat dërgohen duke përdorur ThingSpeak MQTT API dhe më vonë ne po i japim një njoftim me email përdoruesit sa herë që temperatura arrin pragun e caktuar duke përdorur protokollin IFTTT. SHT25 është një sensor i temperaturës dhe lagështisë i prodhuar nga Sensirion. SHT25 siguron një nivel të lartë saktësie rreth ± 2% RH. Gama e lagështisë së saj është nga 0 në 100% dhe diapazoni i temperaturës është nga -40 në 125 ° C. Muchshtë shumë më i besueshëm dhe i shpejtë me 8 sekonda kohë të përgjigjes së sensorit.

Karakteristikat

  • Ju siguron analiza dhe statistika në kohë reale duke përdorur Thing Speak MQTT API
  • Një Njoftim me Email i jepet përdoruesit në një kohë të caktuar duke përdorur IFTTT
  • Task Scheduler përdoret për të planifikuar detyrën si marrja e të dhënave nga sensorët, Publikimi i leximeve të sensorëve, Abonimi në temën MQTT
  • Ai përdor protokollin I2C për të marrë leximin e sensorit i cili është më i saktë, i zgjerueshëm dhe i shkallëzuar
  • modaliteti i fjetjes kur pajisja është e papunë ose nuk thirret asnjë thirrje në detyrë.
  • planifikimi efektiv i detyrave siguron përdorim pa probleme
  • Pritet një faqe e veçantë në internet ku përdoruesi duhet të sigurojë kredencialet e tij të përdoruesit për të shmangur ndezjen e pajisjes tuaj çdo herë kur jeni në dispozicion të rrjeteve të tjera wifi
  • SPIFFS përdoret për të ruajtur faqen tonë në internet për ta bërë kodin tonë të lexueshëm dhe më pak të ngathët

Hapi 1: Specifikimet e harduerit dhe softuerit

Specifikimet e harduerit dhe softuerit
Specifikimet e harduerit dhe softuerit
Specifikimet e harduerit dhe softuerit
Specifikimet e harduerit dhe softuerit

Specifikimet e harduerit

  • Adafruit esp8266 Bordi Huzzah
  • Mburoja e Bordit Huzzah
  • Moduli i sensorit SHT25
  • Kabllo I2C

Specifikimi i Softuerit

  • Arduino IDE
  • Flisni për IFTTT Thing
  • MQTT API

Hapi 2: Ruajtja e kredencialeve të përdoruesit

Ruajtja e kredencialeve të përdoruesit
Ruajtja e kredencialeve të përdoruesit
Ruajtja e kredencialeve të përdoruesit
Ruajtja e kredencialeve të përdoruesit

Këtu ne po përdorim sensorin SHT25 I2C për të lexuar vlerën në kohë reale të Temperaturës dhe Lagështisë Relative dhe duke i postuar këto vlera në re. Për të marrë herë pas here vlerën e përditësuar të sensorit dhe për t'i postuar këto përditësime njëkohësisht ne po përdorim Bibliotekën e Task Scheduler të Arduino. Për operacionet cloud, ne po përdorim ThingSpeak MQTT API. Më vonë ne po i ofrojmë përdoruesit raporte të motit në kohë reale duke përdorur apletet IFTTT. Ju mund të ndiqni këto hapa për të bërë stacionin tuaj të motit. Pra, DIY.

Para se të vazhdoni më tej. Ne duhet të ruajmë kredencialet e përdoruesit. Për këtë qëllim, ne po presim një server në internet në 192.169.1.4. Ne e kemi ruajtur formularin tonë të uebit në SPIFFS. Pasi pajisja të fillojë, ajo pret një server në internet për 60 sekonda. Përdoruesi duhet të ndjekë këto hapa.

  • Lidhuni me AP ESPuser, Kjo është e shënuar në listën tuaj të rrjeteve wifi të disponueshme. Lidhu me këtë AP dhe fut fjalëkalimin "*******"
  • Pasi të lidhet, shkoni te shfletuesi juaj futni IP 192.168.1.4.
  • Vendosni SSID -in dhe fjalëkalimin e WiFi -it tuaj lokal në fushat e hyrjes dhe futni NUBNSHIRIM
  • Këto kredenciale do të ruhen në EEPROM
  • Pas 60 sekondash Pajisja do të shkëputet automatikisht nga AP
  • Herën tjetër kur të ndizni pajisjen, Përdoruesi nuk duhet të ndjekë këtë procedurë, Pajisja do të marrë automatikisht kredencialet e përdoruesit nga EEPROM dhe do të vazhdojë me marrjen e leximeve të sensorit nga Ndërfaqja I2C dhe postimin e tij në re

// --------- AP config ------------ // IPAdresa ap_local_IP (192, 168, 1, 4); Adresa IP_gateway (192, 168, 1, 254); Adresa IP_subnet (255, 255, 255, 0);

Serial.print ("Konfigurimi i pikës së hyrjes …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print ("Konfigurimi i Kredencialeve të Përdoruesit");

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.filloj ();

APTimer = millis ();

ndërsa (millis ()-APTimer <APInterval) {

server.handleClient ();

}

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

if (server.hasArg ("ssid") && server.hasArg ("fjalëkalim"))

{

// Nëse të gjitha fushat e formularit përmbajnë thirrje të të dhënave

handelSubmit ()

handleSubmit (); }

tjeter {

// Rishfaqni formën

// lexoni skedarin e përmbajtur në spiffs

Skedari i skedarit = SPIFFS.open ("/webform.html", "r");

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

// mos harroni të mbyllni skedarin

file.close ();

}}

// Kontrolloni statusin që ka argumentet ssid dhe fjalëkalimin

// Pastaj shkruani letrat kredenciale në ROM

ROMwrite (String (server.arg ("ssid")), String (server.arg ("fjalëkalim")))

Hapi 3: Vendosja e Formës suaj të Uebit në SPIFFS

SPIFFS

Serial Periferike Ndërfaqja Flash File System, ose shkurt SPIFFS. It'sshtë një sistem skedarësh me peshë të lehtë për mikrokontrolluesit me një çip flash SPI. Çipi flash i ESP8266 ka shumë hapësirë për faqet tuaja në internet, veçanërisht nëse keni versionin 1MB, 2MB ose 4MB. Ne gjithashtu kemi ruajtur faqen tonë në Flash System. Ka disa hapa që duhet të ndjekim për të ngarkuar të dhëna në spiffs

  1. Shkarkoni mjetin:
  2. Në drejtorinë tuaj të skicave Arduino, krijoni drejtorinë e mjeteve nëse nuk ekziston ende
  3. Shpaketoni mjetin në drejtorinë e mjeteve (rruga do të duket si /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Rinisni Arduino IDE
  5. Hapni një skicë (ose krijoni një të re dhe ruajeni)
  6. Shkoni te drejtoria e skicave (zgjidhni Skicë> Shfaq skedarin e skicës)
  7. Krijoni një drejtori të quajtur të dhëna dhe çdo skedar që dëshironi në sistemin e skedarëve atje. Ne kemi ngarkuar faqen tonë HTML me emrin webform.html
  8. Sigurohuni që keni zgjedhur një tabelë, port dhe monitor të mbyllur serial
  9. Zgjidhni Veglat> Ngarkimi i të dhënave të skicës ESP8266. Kjo duhet të fillojë ngarkimin e skedarëve në sistemin e skedarëve flash ESP8266. Kur të mbarojë, shiriti i statusit IDE do të shfaq mesazhin SPIFFS Uploaded Image.

Skedari i skedarit = SPIFFS.open ("/webform.html", "r");

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

// mos harroni të mbyllni skedarin

file.close ();

Hapi 4: Programimi i detyrave

Në këtë tutorial, ne po kryejmë dy operacione:

  • Lexoni të dhënat nga SHT25 duke përdorur protokollin I2C
  • Postoni të dhënat e përditësuara në re duke përdorur ThingSpeak MQTT API

Për ta arritur këtë ne po përdorim bibliotekën TaskScheduler. Ne kemi planifikuar dy detyra të ndryshme duke iu referuar dy operacioneve të ndryshme të kontrollit. kjo bëhet si më poshtë

  • Detyra 1 është për të lexuar vlerën e sensorit, kjo detyrë funksionon për 1 sekondë derisa të arrijë afatin prej 10 sekondash.
  • Kur Task1 arrin afatin kohor Ne jemi duke u lidhur me ndërmjetësin lokal Wifi dhe MQTT.
  • Tani Detyra 2 është e aktivizuar dhe ne po e çaktivizojmë Detyra 1Detyra 2 është për publikimin e të dhënave të sensorit te ndërmjetësi Thing Speak MQTT kjo detyrë funksionon për 20 sekonda derisa të arrijë afatin prej 20 sekondash
  • Kur Task2 arrin afatin e tij Detyra 1 aktivizohet përsëri dhe Task2 është çaktivizuar. këtu përsëri, ne po marrim vlerën e përditësuar dhe procesi vazhdon
  • kur asnjë telefonatë nuk thirret ose pajisja është e papunë shkon te Gjumi i Dritës duke kursyer energji.

// --------- prototip për thirrjen e detyrave ------------ //

void taskI2CCallback ();

void taskI2CDisable ();

void taskWiFiCallback ();

void taskWiFiDisable ();

// --------- Detyrat ------------ //

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

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

// aktivizo tI2C tI2C.aktivizo ();

Hapi 5: Leximi i vlerave të temperaturës dhe lagështisë nga SHT25

Leximi i vlerave të temperaturës dhe lagështisë nga SHT25
Leximi i vlerave të temperaturës dhe lagështisë nga SHT25

I2C është një ndërfaqe me dy tela e cila përdor vetëm dy tela për të komunikuar me pajisjen kryesore. Njëra është SCL (Ora Seriale) dhe tjetra është SDA (Të dhënat Seriale). Çdo pajisje skllevër ka një adresë unike. SHT 25 gjithashtu ka një adresë 8-bit dhe mund të arrihet me një adresë 0x44. ajo ka një 8bit të adresës ku 7 bit janë adresa aktuale dhe ndërsa biti më i drejtë LSB 0 përdoret për të sinjalizuar leximin ose shkrimin në pajisje. Nëse biti 0 është vendosur në 1 atëherë pajisja kryesore do të lexojë nga pajisja skllevër I2C. I2C është shumë më i besueshëm, i shkallëzuar dhe i shpejtë dhe madje ka shumë mënyra funksionimi që e bëjnë atë shumë më efikas në energji

Ne po përdorim bibliotekën Wire.h për të lexuar vlerat e temperaturës dhe lagështisë. Kjo bibliotekë lehtëson komunikimin i2c midis sensorit dhe pajisjes kryesore. 0x44 është adresa I2C për SHT25. SHT25 funksionon në një mënyrë të ndryshme operacionesh. Ju mund t'i referoheni fletës së të dhënave për këtë. Ne po përdorim 0x2C dhe 0x06 si MSB dhe LSB respektivisht për funksionimin me një goditje të vetme

Hapi 6: Publikimi i Vlerave në ThingSpeak Duke përdorur ThingSpeak MQTT API

Publikimi i Vlerave në ThingSpeak Duke Përdorur API ThingSpeak MQTT
Publikimi i Vlerave në ThingSpeak Duke Përdorur API ThingSpeak MQTT

Për të postuar vlerat tona të temperaturës dhe lagështisë në re ne po përdorim ThingSpeak MQTT API. ThingSpeak është një platformë IoT. ThingSpeak është një shërbim falas në internet që ju lejon të mblidhni dhe ruani të dhënat e sensorëve në cloud. MQTT është një protokoll i zakonshëm i përdorur në sistemet IoT për të lidhur pajisje dhe sensorë të nivelit të ulët. MQTT përdoret për të kaluar mesazhe të shkurtra tek dhe nga një ndërmjetës. ThingSpeak kohët e fundit ka shtuar një ndërmjetës MQTT në mënyrë që pajisjet të mund të dërgojnë mesazhe në ThingSpeak. Ju mund të ndiqni procedurën për të ngritur ThingSpeak Channel nga ky postim

ThingSpeak MQTT

MQTT është një arkitekturë publikimi/abonimi që është zhvilluar kryesisht për të lidhur gjerësinë e brezit dhe pajisjet e kufizuara nga fuqia mbi rrjetet pa tel. Shtë një protokoll i thjeshtë dhe i lehtë që kalon nëpër bazat TCP/IP ose WebSockets. MQTT mbi WebSockets mund të sigurohet me SSL. Arkitektura e publikimit/regjistrimit mundëson që mesazhet të shtyhen në pajisjet e klientit pa pasur nevojë që pajisja të anketojë vazhdimisht serverin. Një klient është çdo pajisje që lidhet me ndërmjetësin dhe mund të publikojë ose të regjistrohet në tema për të hyrë në informacion. Një temë përmban informacionin e drejtimit për ndërmjetësin. Çdo klient që dëshiron të dërgojë mesazhe i publikon ato në një temë të caktuar, dhe secili klient që dëshiron të marrë mesazhe regjistrohet në një temë të caktuar

Publikoni dhe Regjistrohuni duke përdorur ThingSpeak MQTT

  • Publikimi në kanale të furnizimit të kanaleve /publikimi /
  • Publikimi në një fushë të caktuar kanale/publiko/fusha/fushë/
  • Regjistrohuni në kanalet e fushës së kanalit/regjistrohuni //
  • Regjistrohuni në kanalet private të transmetimit të kanaleve // abonohuni/fushat/fusha/
  • Regjistrohuni në të gjitha fushat e një kanali. kanalet // abonohu/fushat/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("timeout për këtë detyrë: / t");

Serial.println (tWiFi.getTimeout ());

nëse (! mqttCli.lidhur ())

{

Serial.println ("Klienti nuk është i lidhur");

rilidhjeMQTT ();

}

String topicString = "kanale/"+String (channelID)+"/publiko/"+String (shkruajAPIKey);

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 =" + Varg (i lagësht, 1));

int dataLength = dataString.length ()+1;

byte dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, DataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Botuar": "publikuar dështoi");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Hapi 7: Njoftimi me email i Raportit të Motit

Raporti i motit Njoftimi me email
Raporti i motit Njoftimi me email
Raporti i motit Njoftimi me email
Raporti i motit Njoftimi me email

Ne po përdorim apletet IFTTT për t'i dhënë përdoruesit njoftim me email të motit në kohë reale. Pra, Ne e kemi zbatuar atë përmes ThingSpeak. Ne jemi mesatarisht me vlerat 5-fay të temperaturës dhe lagështisë. Sa herë që vlera e shënimit të fundit është më e madhe se vlera mesatare. Do të shkaktojë një njoftim me email "është një ditë e nxehtë". dhe kur është më e vogël se vlera mesatare. Do të shkaktojë një njoftim me email "Çfarë dite e bukur". Çdo ditë rreth orës 10:00 të mëngjesit (IST) do të marrim një njoftim me email

channelID = ******;

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

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

perHumid = max (lagështiaData) -min (lagështiaData);

humidValue = 0.1*perHumid+min (lagështiData);

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

nëse (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'dayshtë një ditë e nxehtë.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); fund

Hapi 8: Kodi i përgjithshëm

Kodi i përgjithshëm
Kodi i përgjithshëm
Kodi i përgjithshëm
Kodi i përgjithshëm
Kodi i përgjithshëm
Kodi i përgjithshëm

Kodi i përgjithshëm

Kodi i përgjithshëm është i disponueshëm në këtë depo GitHub

Kufizimet

  • Ka disa çështje me publikimin e të dhënave duke përdorur publikimin e një metode për pjesën më të madhe të të dhënave. Për të zgjidhur këtë çështje ne po përdorim funksionin e shkrimit ()
  • SPIFFS duhet të formatohen para se të ngarkoni të dhënat e reja në SPIFFS.
  • Ju nuk duhet të përdorni funksionin e vonesës (). vonesa () pengon funksionimin në sfond. Në vend të kësaj, krijoni vonesa duke përdorur millis () vetëm nëse është e nevojshme

Kredite

  • ESP826WebServer
  • Programi i detyrave
  • SHT 25
  • API i ThingSpeak MQTT
  • IFTTT
  • PubSubClient

Recommended: