Բովանդակություն:

Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով. 8 քայլ
Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով. 8 քայլ

Video: Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով. 8 քայլ

Video: Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով. 8 քայլ
Video: GPS Tools : վերադասավորու ( Rearrange ) 2024, Նոյեմբեր
Anonim
Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով
Եղանակի հաշվետվություն ThingSpeak MQTT և IFTTT հավելվածների միջոցով

Ներածություն

Ամպի վրա հիմնված եղանակային ծրագիր, որը տրամադրում է եղանակի ամենօրյա հաշվետվություններ ՝ որպես էլփոստի ծանուցում: Այս վեբ հավելվածը չափում է ջերմաստիճանը և խոնավությունը ՝ օգտագործելով SHT25 և Adafruit Huzzah ESP8266: Այն մեզ տրամադրում է իրական ժամանակի ջերմաստիճանի և խոնավության տվյալներ և ժամային վերլուծություն: Տվյալներն ուղարկվում են ThingSpeak MQTT API- ի միջոցով, իսկ ավելի ուշ մենք էլեկտրոնային փոստով ծանուցում ենք տրամադրում օգտվողին, երբ ջերմաստիճանը հասնում է նշանակված շեմին ՝ օգտագործելով IFTTT արձանագրությունը: SHT25- ը ջերմաստիճանի և խոնավության տվիչներ է, որը պատրաստվել է Sensirion- ի կողմից: SHT25- ը ապահովում է բարձր ճշգրտություն ± 2% RH- ի սահմաններում: Խոնավության միջակայքը 0 -ից 100% է, իսկ ջերմաստիճանը ՝ -40 -ից 125 ° C: Այն շատ ավելի հուսալի և արագ է ՝ 8 վրկ սենսորային արձագանքման ժամանակ:

Հատկություններ

  • Ձեզ տրամադրում է իրական ժամանակի վերլուծություն և վիճակագրություն ՝ օգտագործելով Thing Speak MQTT API- ն
  • IFTTT- ի միջոցով նշանակված պահին օգտագործողին տրամադրվում է էլ. Փոստի ծանուցում
  • Task Scheduler- ը օգտագործվում է առաջադրանքը պլանավորելու համար, ինչպիսիք են տվիչներից տվյալների վերցնելը, սենսորների ընթերցումների հրապարակումը, MQTT թեմային բաժանորդագրվելը:
  • Այն օգտագործում է I2C արձանագրությունը ՝ սենսորային ընթերցումը բերելու համար, որն ավելի ճշգրիտ է, ընդլայնելի և ընդարձակելի
  • քնի ռեժիմ, երբ սարքն անգործուն է կամ որևէ առաջադրանք չի կանչվում:
  • առաջադրանքների արդյունավետ պլանավորումն ապահովում է առանց դժվարությունների օգտագործումը
  • Տեղադրվում է առանձին վեբ էջ, որտեղ օգտվողը պետք է տրամադրի իր հավատարմագրերը ՝ ձեր սարքը ամեն անգամ չլցնելուց, այլ Wi -Fi ցանցերի հասանելիությունից խուսափելու համար:
  • SPIFFS- ն օգտագործվում է մեր վեբ էջը պահելու համար `մեր կոդը ընթեռնելի և ավելի քիչ անշնորհք դարձնելու համար

Քայլ 1: Սարքավորման և ծրագրակազմի բնութագրում

Սարքավորման և ծրագրակազմի բնութագրում
Սարքավորման և ծրագրակազմի բնութագրում
Սարքավորման և ծրագրակազմի բնութագրում
Սարքավորման և ծրագրակազմի բնութագրում

Սարքաշարի բնութագրում

  • Adafruit esp8266 Huzzah տախտակ
  • Huzzah Board Shield
  • SHT25 սենսորային մոդուլ
  • I2C մալուխ

Softwareրագրաշարի բնութագրում

  • Arduino IDE
  • IFTTT բան խոսիր
  • MQTT API

Քայլ 2: Օգտագործողի հավատարմագրերի պահպանում

Օգտագործողի հավատարմագրերի պահպանում
Օգտագործողի հավատարմագրերի պահպանում
Օգտագործողի հավատարմագրերի պահպանում
Օգտագործողի հավատարմագրերի պահպանում

Այստեղ մենք օգտագործում ենք SHT25 I2C սենսորը ՝ ջերմաստիճանի և հարաբերական խոնավության իրական ժամանակի արժեքը կարդալու և այդ արժեքը ամպի վրա տեղադրելու համար: Սենսորային թարմացված արժեքը ժամանակ առ ժամանակ ստանալու և այս թարմացումները միաժամանակ տեղադրելու համար մենք օգտագործում ենք Arduino- ի առաջադրանքների ժամանակացույցի գրադարանը: Ամպային գործողությունների համար մենք օգտագործում ենք ThingSpeak MQTT API: Հետագայում մենք իրական ժամանակի եղանակային հաշվետվություն ենք տրամադրում օգտվողին `օգտագործելով IFTTT հավելվածները: Դուք կարող եք հետևել այս քայլերին ՝ ձեր սեփական եղանակային կայանը ստեղծելու համար: Այսպիսով, DIY:

Մինչև հետագա քայլեր ձեռնարկելը: Մենք պետք է պահպանենք օգտվողի հավատարմագրերը: Այդ նպատակով մենք հյուրընկալում ենք վեբ սերվերին 192.169.1.4 համարով: Մենք պահել ենք մեր վեբ ձևը SPIFFS- ում: Երբ սարքը գործարկվի, այն վեբ սերվեր է ընդունում 60 վայրկյան: Օգտագործողը պետք է հետևի այս քայլերին:

  • Միացեք AP ESPuser- ին, սա նշված է ձեր հասանելի wifi ցանցերի ցանկում: Միացեք այս AP- ին և մուտքագրեք «*******» գաղտնաբառը
  • Միանալուց հետո, գնացեք ձեր դիտարկիչ, մուտքագրեք IP 192.168.1.4:
  • Մուտքագրման դաշտերում մուտքագրեք ձեր տեղական WiFi- ի SSID- ն ու գաղտնաբառը և մուտքագրեք SUBMIT
  • Այս հավատարմագրերը կպահվեն EEPROM- ում
  • 60 վայրկյան անց Սարքն ինքնաբերաբար կհեռացվի AP- ից
  • Հաջորդ անգամ, երբ սարքը միացնեք, օգտագործողը չպետք է հետևի այս ընթացակարգին: Սարքն ինքնաբերաբար կվերցնի օգտվողի հավատարմագրերը EEPROM- ից և կշարունակի ստանալ սենսորի ընթերցումները I2C ինտերֆեյսից և տեղադրել ամպին:

// --------- AP կոնֆիգուրացիա ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);

Serial.print («Մուտքի կետի կարգավորում …»);

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print («Օգտագործողի հավատարմագրերի կարգավորում»);

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// *************************** ԲՌՆԵԼ ՌՈTՏԸ ********* // անվավեր handleRoot () {

if (server.hasArg ("ssid") && server.hasArg ("գաղտնաբառ"))

{

// Եթե ձևի բոլոր դաշտերը պարունակում են տվյալների կանչ

handelSubmit ()

handleSubmit (); }

ուրիշ {

// Կրկին ցուցադրել ձեւը

// կարդալ spiffs- ում պարունակվող ֆայլը

Ֆայլի ֆայլ = SPIFFS.open ("/webform.html", "r");

server.streamFile (ֆայլ, "text/html");

// մի մոռացեք փակել ֆայլը

file.close ();

}}

// Ստուգեք կարգավիճակը, որ այն պարունակում է ssid և գաղտնաբառ փաստարկներ

// Այնուհետեւ գրեք հավատարմագրերը ROM- ին

ROMwrite (լարային (server.arg ("ssid")), լարային (server.arg ("գաղտնաբառ")))

Քայլ 3: Տեղադրեք ձեր վեբ ձևը SPIFFS- ում

SPIFFS

Սերիական ծայրամասային ինտերֆեյս Flash ֆայլային համակարգ կամ կարճ SPIFFS: Դա թեթև քաշային ֆայլային համակարգ է միկրոկոնտրոլերների համար ՝ SPI ֆլեշ չիպով: ESP8266- ի ֆլեշ չիպը շատ տեղ ունի ձեր վեբ էջերի համար, հատկապես, եթե ունեք 1 ՄԲ, 2 ՄԲ կամ 4 ՄԲ տարբերակ: Մենք նաև մեր կայքը պահել ենք Flash System- ում: Կան մի քանի քայլեր, որոնք մենք պետք է հետևենք ՝ տվյալները spiff- ներ վերբեռնելու համար

  1. Ներբեռնեք գործիքը ՝
  2. Ձեր Arduino էսքիզների գրքույկում ստեղծեք գործիքների գրացուցակ, եթե այն դեռ գոյություն չունի
  3. Գործիքը բացեք գործիքների գրացուցակում (ճանապարհը նման կլինի /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Վերագործարկեք Arduino IDE- ն
  5. Բացեք ուրվագիծը (կամ ստեղծեք նորը և պահեք այն)
  6. Գնացեք ուրվագծերի գրացուցակ (ընտրեք ուրվագիծ> Sուցադրել էսքիզների պանակը)
  7. Ստեղծեք տվյալների անունով գրացուցակ և ցանկացած ֆայլ, որը ցանկանում եք այնտեղ գտնվող ֆայլային համակարգում: Մենք վերբեռնել ենք մեր HTML էջը webform.html անունով
  8. Համոզվեք, որ ընտրել եք տախտակ, նավահանգիստ և փակ սերիական մոնիտոր
  9. Ընտրեք Գործիքներ> ESP8266 Էսքիզ տվյալների վերբեռնում: Սա պետք է սկսի ֆայլերը վերբեռնել ESP8266 ֆլեշ ֆայլային համակարգ: Ավարտելուց հետո IDE կարգավիճակի տողը կցուցադրի SPIFFS Image Uploaded հաղորդագրությունը:

Ֆայլի ֆայլ = SPIFFS.open ("/webform.html", "r");

server.streamFile (ֆայլ, "text/html");

// մի մոռացեք փակել ֆայլը

file.close ();

Քայլ 4: Առաջադրանքների պլանավորում

Այս ձեռնարկում մենք կատարում ենք երկու գործողություն.

  • Կարդացեք SHT25- ի տվյալները `օգտագործելով I2C արձանագրությունը
  • Տեղադրեք թարմացված տվյալները ամպի մեջ ՝ օգտագործելով ThingSpeak MQTT API

Դրան հասնելու համար մենք օգտագործում ենք TaskScheduler գրադարանը: Մենք նախատեսել ենք երկու տարբեր առաջադրանքներ, որոնք վերաբերում են երկու տարբեր վերահսկողության գործողություններին: սա արվում է հետևյալ կերպ

  • Առաջադրանք 1 -ը սենսորի արժեքի ընթերցման համար է: Այս առաջադրանքը կատարվում է 1 վայրկյան, մինչև այն հասնում է 10 վրկ:
  • Երբ Task1- ը հասնի իր ժամկետի ավարտին: Մենք միանում ենք տեղական Wifi և MQTT բրոքերին:
  • Այժմ Առաջադրանք 2 -ը միացված է, և մենք անջատում ենք Առաջադրանք 1 -ը Առաջադրանք 2 -ը սենսորային տվյալները Thing Speak MQTT բրոքերին հրապարակելու համար է: Այս առաջադրանքը տևում է 20 վայրկյան, մինչև այն հասնի 20 վրկ ժամկետի:
  • Երբ Task2- ը լրանում է ժամկետի ավարտին, Առաջադրանք 1 -ը կրկին միացված է, և Task2- ը անջատված է: այստեղ նորից մենք ստանում ենք թարմացված արժեքը, և գործընթացը շարունակվում է
  • երբ հետադարձ կապ չի կանչվում կամ սարքն անգործուն է անցնում այն անցնում է Light Sleep ՝ դրանով իսկ խնայելով էներգիան:

// --------- առաջադրանքի հետադարձման նախատիպ ------------ //

անվավեր taskI2CCallback ();

void taskI2CD անջատելի ();

անվավեր taskWiFiCallback ();

void taskWiFiDisable ();

// --------- Առաջադրանքներ ------------ //

Առաջադրանք tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CD անջատելի);

Առաջադրանք tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

// միացնել tI2C tI2C. ակտիվացնել ();

Քայլ 5. ingերմաստիճանի և խոնավության արժեքների ընթերցում SHT25- ից

Readերմաստիճանի և խոնավության արժեքների ընթերցում SHT25- ից
Readերմաստիճանի և խոնավության արժեքների ընթերցում SHT25- ից

I2C- ը երկալար ինտերֆեյս է, որը միայն երկու լար է օգտագործում հիմնական սարքի հետ հաղորդակցվելու համար: Մեկը ՝ SCL (Սերիական ժամացույց), իսկ մյուսը ՝ SDA (Սերիական տվյալներ): Յուրաքանչյուր ստրուկ սարք ունի յուրահատուկ հասցե: SHT 25-ն ունի նաև 8-բիթանոց հասցե և դրան հասանելի է 0x44 հասցեով: այն ունի 8 բիթ հասցե, որտեղ 7 բիթը փաստացի հասցե է, իսկ աջից LSB բիթ 0 -ն օգտագործվում է սարքից ընթերցման կամ գրելու ազդանշանի համար: Եթե բիթ 0 -ը դրված է 1 -ի, ապա հիմնական սարքը կարդալու է ստրուկ I2C սարքից: I2C- ն շատ ավելի հուսալի, լայնածավալ և արագ է, և նույնիսկ այն ունի բազմաթիվ ռեժիմներ, ինչը դարձնում է այն շատ ավելի էներգաարդյունավետ

Մենք օգտագործում ենք Wire.h գրադարանը `ջերմաստիճանի և խոնավության արժեքները կարդալու համար: Այս գրադարանը հեշտացնում է i2c հաղորդակցությունը սենսորի և հիմնական սարքի միջև: 0x44- ը SHT25- ի I2C հասցեն է: SHT25- ը գործում է այլ ռեժիմով: Դրա համար կարող եք անդրադառնալ տվյալների թերթիկին: Մենք օգտագործում ենք 0x2C և 0x06 համապատասխանաբար որպես MSB և LSB մեկ կրակոցով աշխատելու համար

Քայլ 6. ThingSpeak- ի արժեքների հրապարակում ThingSpeak MQTT API- ի միջոցով

ThingSpeak- ի արժեքների հրապարակումը ThingSpeak MQTT API- ի միջոցով
ThingSpeak- ի արժեքների հրապարակումը ThingSpeak MQTT API- ի միջոցով

Մեր ջերմաստիճանի և խոնավության արժեքները ամպին տեղադրելու համար մենք օգտագործում ենք ThingSpeak MQTT API: ThingSpeak- ը IoT հարթակ է: ThingSpeak- ը անվճար վեբ ծառայություն է, որը թույլ է տալիս հավաքել և պահել սենսորների տվյալները ամպի մեջ: MQTT- ը ընդհանուր արձանագրություն է, որն օգտագործվում է IoT համակարգերում `ցածր մակարդակի սարքերն ու տվիչները միացնելու համար: MQTT- ն օգտագործվում է բրոքերից կարճ հաղորդագրություններ փոխանցելու համար: ThingSpeak- ը վերջերս ավելացրել է MQTT բրոքեր, որպեսզի սարքերը կարողանան հաղորդագրություններ ուղարկել ThingSpeak- ին: Այս գրառումից կարող եք հետևել ThingSpeak ալիքի ստեղծման ընթացակարգին

ThingSpeak MQTT

MQTT- ը հրապարակման/բաժանորդագրության ճարտարապետություն է, որը մշակվել է հիմնականում անլար ցանցերի միջոցով թողունակության և էներգիայով սահմանափակ սարքերը միացնելու համար: Դա պարզ և թեթև արձանագրություն է, որն անցնում է TCP/IP վարդակների կամ WebSockets- ի վրայով: MQTT- ը WebSockets- ի միջոցով կարելի է ապահովել SSL- ով: Հրապարակման/բաժանորդագրության ճարտարապետությունը հնարավորություն է տալիս հաղորդագրությունները մղել դեպի հաճախորդի սարքեր, առանց սարքի ՝ սերվերը շարունակաբար հարցում անելու: Հաճախորդը ցանկացած սարք է, որը միանում է բրոքերին և կարող է տեղեկատվություն մուտք գործելու համար հրապարակել կամ բաժանորդագրվել թեմաների: Թեման պարունակում է միջնորդի համար երթուղղման տեղեկատվություն: Յուրաքանչյուր հաճախորդ, որը ցանկանում է հաղորդագրություններ ուղարկել, դրանք հրապարակում է որոշակի թեմայի շուրջ, և յուրաքանչյուր հաճախորդ, որը ցանկանում է հաղորդագրություններ ստանալ, բաժանորդագրվում է որոշակի թեմայի

Հրապարակեք և բաժանորդագրվեք ThingSpeak MQTT- ի միջոցով

  • Հրապարակում ալիքների հոսքի ալիքներին /հրապարակում /
  • Հրապարակում որոշակի դաշտի ալիքներում/հրապարակում/դաշտեր/դաշտ/
  • Բաժանորդագրվեք ալիքի դաշտային ալիքներին/բաժանորդագրվեք //
  • Բաժանորդագրվեք մասնավոր ալիքների հոսքի ալիքներին // բաժանորդագրվեք/դաշտեր/դաշտ/
  • Բաժանորդագրվեք ալիքի բոլոր ոլորտներին: ալիքներ // բաժանորդագրվել/դաշտեր/feild/

void taskWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print («այս առաջադրանքի համար ընդմիջում ՝ / t»);

Serial.println (tWiFi.getTimeout ());

եթե (! mqttCli.connected ())

{

Serial.println ("Հաճախորդը կապված չէ");

նորից միացնել MQTT ();

}

Լարային թեմաԼար = = ալիքներ/"+Լար (channelID)+"/հրապարակում/"+Լար (գրելAPIKey);

int topicLength = topicString.length ()+1;

char topicBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength+1);

Serial.println (topicBuffer);

Լարային տվյալներ String = Լար ("field1 =" + Լար (tempC, 1) + "& field2 =" + Լար (tempF, 1) + "& field3 =" + Լար (խոնավ, 1));

int dataLength = dataString.length ()+1;

բայթ dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Published": "հրապարակված ձախողվեց");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Քայլ 7. Եղանակի մասին հաշվետվության էլփոստի ծանուցում

Եղանակի հաշվետվություն էլ. Փոստի ծանուցում
Եղանակի հաշվետվություն էլ. Փոստի ծանուցում
Եղանակի հաշվետվություն էլ. Փոստի ծանուցում
Եղանակի հաշվետվություն էլ. Փոստի ծանուցում

Մենք օգտագործում ենք IFTTT հավելվածներ ՝ եղանակային եղանակի մասին հաշվետվություն օգտագործողին էլեկտրոնային փոստով ծանուցելու համար: Այսպիսով, մենք այն իրականացրել ենք ThingSpeak- ի միջոցով: Մենք միջինում գնահատում ենք ջերմաստիճանի և խոնավության 5 ֆեյ արժեքները: Ամեն անգամ, երբ վերջին գրառման արժեքը գերազանցում է միջին արժեքը: Այն կհանգեցնի էլփոստի ծանուցման «տաք օր է»: և երբ այն միջին արժեքից փոքր է: Այն կհանգեցնի էլփոստի ծանուցման «Ինչ գեղեցիկ օր է»: Ամեն օր առավոտյան ժամը 10: 00 -ի սահմաններում (IST) մենք կստանանք էլ. Փոստի ծանուցում

channelID = ******;

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

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

perHumid = առավելագույնը (խոնավության տվյալները) -ին (խոնավության տվյալները);

humidValue = 0.1*perHumid+min (խոնավության տվյալները);

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

tempValue = 0.1*perTemp+րոպե (tempData);

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

urlHumid = strcat ('https://api.thingspeak.com/channels/', տող (channelID), '/fields/3/last.txt'); lastTempValue = str2num (վեբ ընթերցում (urlTemp)); lastHumidValue = str2num (վեբ ընթերցում (urlHumid));

եթե (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Շոգ օր է.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); վերջ

Քայլ 8: Ընդհանուր ծածկագիր

Ընդհանուր ծածկագիր
Ընդհանուր ծածկագիր
Ընդհանուր ծածկագիր
Ընդհանուր ծածկագիր
Ընդհանուր ծածկագիր
Ընդհանուր ծածկագիր

Ընդհանուր ծածկագիր

Ընդհանուր ծածկագիրը հասանելի է այս GitHub շտեմարանում

Սահմանափակումներ

  • Տվյալների հրապարակման հետ կապված որոշ խնդիրներ կան տվյալների մեծ մասի համար հրապարակելու մեթոդով: Այս խնդիրը լուծելու համար մենք օգտագործում ենք գրել () գործառույթը
  • SPIFFS- ը նոր տվյալներ SPIFFS- ում բեռնելուց առաջ պետք է ձևաչափել:
  • Դուք չպետք է օգտագործեք հետաձգման () գործառույթը: ուշացումը () խոչընդոտում է ֆոնային գործողությանը: Փոխարենը, ստեղծեք ուշացումներ, օգտագործելով millis () - ը միայն անհրաժեշտության դեպքում

Վարկեր

  • ESP826WebServer
  • Առաջադրանքների ժամանակացույց
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Խորհուրդ ենք տալիս: