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

Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi: 7 քայլ
Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi: 7 քայլ

Video: Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi: 7 քայլ

Video: Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi: 7 քայլ
Video: Սուրմալուի պայթյունից 4 օր անց թունավոր հետևանքները քամին հասցրել է Կենտրոն համայնք 2024, Հուլիսի
Anonim
Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi
Հետևեք օդի որակին ՝ օգտագործելով Grafana և Raspberry Pi

Ես փնտրում էի մի փոքր փոքրիկ IOT նախագիծ, և ընկերս խորհուրդ տվեց ծանոթանալ այս ձեռնարկին.

dzone.com/articles/raspberry-pi-iot-sensor…

Ես խստորեն խորհուրդ եմ տալիս հետևել ձեռնարկին ՝ մոնիտորինգի համար Raspberry Pi- ի ստեղծման ընթացքում շարունակելու համար: Այս ձեռնարկը կավարտի IoT պարզ սարքի նախագծման հետագա քայլերը, որը թույլ է տալիս բարձր հանդուրժողականություն սխալների նկատմամբ, ինչպես նաև այն, թե որքան օգտակար կարող է լինել Raspberry Pi- ն Arduino- ի հետ զուգակցվելիս:

Մտածում եմ նաև օդային տվիչների MQ* մոդելների արդյունավետության և որոշակի սահմանափակման մասին: MQ* տվիչները էժան են և բավականին արդյունավետ, և դրանք շատ հեշտ է տեղադրվել:

Ընդհանուր առմամբ, դա կօգնի ձեզ սկսել Arduino- ն ինտերնետին միացնել հնարավորինս պարզ ձևով և սահմանել ավելի թեթև ոտնահետքերի մոդուլների օգտագործման ուղին (վեր. ESP8266):

Զվարճանալ!

Քայլ 1: Սարքավորում + կարգավորում

Սարքավորումներ

  • Raspberry Pi- ով տեղադրված Raspberry Pi
  • Raspberry Pi էլեկտրամատակարարում
  • Arduino Uno/համարժեք
  • Արականից արական USB տեսակի B- ից մինչև A տեսակի (պետք է տրամադրվի ձեր Arduino- ի հետ)
  • MQ* սենսորներից որևէ մեկը (ես օգտագործել եմ MQ-2, 4, 5 և 135)
  • Անցումային լարերի տեսականի
  • մինի տախտակ

Կարգավորել

Այս ձեռնարկը նախատեսված է որպես նուրբ ներածություն Arduino- ի և Raspberry Pi- ի օգտագործման համար. Դա կօգնի իմանալ, թե ինչպես օգտագործել linux տերմինալը: Այնուամենայնիվ, ես չեմ ենթադրում Arduino- ի կամ Raspberry Pi- ի վրա աշխատելու մեծ փորձ. Այն, ինչ ձեզ իսկապես պետք է, տրամադրված սարքավորումներն են և հետաքրքրասեր վերաբերմունքը:

  • Դուք պետք է լրացնեք այս ձեռնարկի քայլերը:
  • Խորհուրդ եմ տալիս Raspberry Pi- ի հետ ինտերֆեյսի համար օգտագործել Secure Shell (SSH), քանի որ դա թույլ է տալիս հեշտությամբ մուտքագրել հրամաններ: SSH- ի միջոցով միանալը տարբերվում է ՝ օգտագործում եք Windows, Linux կամ Mac: Linux- ը և Mac- ը բավականին հեշտ է օգտագործել ssh- ի վերաբերյալ (SSH- ի բացման հրամանը բառացիորեն ssh է): Ստուգեք Putty- ը Windows- ի համար: Խորհուրդ եմ տալիս դիտել էկրանը `որպես ծրագրի ընթացքում ձեր նիստը պահպանելու միջոց:
  • Դուք նաև պետք է տեղադրեք Python- ը Raspbian- ի վրա: Երբ ես ավարտեցի այս քայլերը, ես պատրաստեցի հին SD քարտի պատճենը, որը ես գտնվում էի նախորդ նախագծից, որի վրա արդեն տեղադրված էր Python- ը: Եթե NOOBS/Raspbian- ի ձեր բաշխումը չունի Python 3.7 կամ ավելի բարձր տարբերակ, ստուգեք այս քայլերը ՝ աղբյուրից Python կազմելու համար:
  • Getանոթացեք git- ին և տեղադրեք այն, եթե այն արդեն տեղադրված չէ Raspbian- ի ձեր բաշխման մեջ:

Քայլ 2: Շղթայի կարգավորում

Շղթայի կարգավորում
Շղթայի կարգավորում

Կա մեկ շրջան, որը ձեզ հարկավոր է կարգավորել Arduino- ում:

Ես տրամադրել եմ սխեմատիկ տարբերակ, որը կարող եք օգտագործել որպես հղում:

MQ-* գազի բոլոր տվիչների գեղեցկությունն այն է, որ 5 Վոլտ և Գրունտ միացում կատարելուց հետո Arduino- ի անալոգային կապում մուտքային դիմադրությունը թույլ է տալիս սենսորին ճիշտ աշխատել:

Carefulգույշ եղեք, որպեսզի ապահովեք, որ սենսորի անալոգային միացումն անջատիչ տախտակից միացված լինի Arduino- ին և ոչ թե թվային կապին: Եթե փորձարկման ժամանակ բախվում եք արժեքների շատ նեղ շրջանակի, խորհուրդ եմ տալիս նախ ստուգել ձեր կապը այստեղ:

Քայլ 3. Arduino կոդը և ingրամեկուսացում

Այս մեկին հաջորդող քայլում մենք Arduino տախտակը միացնելու ենք Raspberry Pi- ին: Նախքան դա անելը, մենք պետք է Arduino- ն կոդով ծածկենք սենսորը կարդալու համար, ինչպես նաև տվիչների տվյալները փոխանցենք Raspberry Pi- ին: Դա կարելի է անել ցանկացած եղանակով, որով դուք սովորաբար կոդը մղում եք Arduino- ին: Ես օգտագործել եմ երրորդ կողմի գործիք ՝ բացի Arduino IDE- ից, հետևաբար, ես Arduino գրադարանը ներառում եմ վերևում: Սա անհրաժեշտ չէ այլ նախագծերի համար:

Այս բաժնի վերջում ստուգեք պատճենելու/տեղադրելու կոդը:

Ինչ է անում կոդը

Կոդը ստեղծվում է չորս տարբեր սենսորներից տվյալներ ստանալու համար. Եթե դուք օգտագործում եք տարբեր տեսակի տվիչներ, խելամիտ կլինի փոխել Սերիական նավահանգստից ուղարկվող ելքային ազդանշանի անվանումները:

Օղակում մենք ստուգում ենք, արդյոք Raspberry Pi- ն մեզանից տվյալներ է պահանջում: Այսպիսով, մենք օգտագործում ենք շատ պարզ Master/Slave կոնֆիգուրացիա, որտեղ Raspberry Pi- ն անընդհատ տվյալների համար խնդրանքներ է ուղղում Arduino- ին: Սա շատ ավելի պարզ է, քան Arduino ծածկագրում հաշվիչ ունենալը, որովհետև ավելի հեշտ է ստուգել, թե ինչ արժեքներ են աշխատում Raspberry Pi- ից ՝ Arduino- ին նոր արժեքներ թաքցնելու փոխարեն:

Արդուինոն, երբ տվյալների խնդրանք է ստացել, արտադրանքը կձևակերպի որպես GET պարամետր. Սա կապված է HTTP մեթոդների հետ և պարզապես դիզայնի ընտրություն է: Եթե դուք նախագծեիք Arduino- ից սերիական նավահանգստի միջոցով հաղորդակցման սխեմա, ապա հեշտությամբ կարող եք գնալ որևէ այլ բանի, քանի դեռ այն նախագծում եք, որպեսզի տվյալները ողջամիտ տարանջատվեն: Ես ընտրեցի GET- ը, քանի որ այն ծանոթ և ամուր է:

Պարզ փորձարկում…

Arduino- ի առկայծումից և կոդը գործարկելուց հետո բացեք Arduino IDE- ի սերիական մոնիտորը: Եթե դուք ուղարկեք «H» մեկ նիշը (ապահովեք դրա կապիտալը), ապա կստանաք տվյալների բեռնվածություն: Շնորհավորում եմ, աշխատում է:

MQ-* տվյալների նմուշ, ասինքրոն կոլեկցիոներ

#ներառում
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int մուտքայինԲայթ;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/* valuePrint- ը տպում է այս պիտակի արժեքը:
* Ստեղծում է միայն կողմնակի բարդություններ:
*/
voidvaluePrint (լարային պիտակ, int ընթերցում) {
Serial.print (պիտակը);
Serial.print ("=");
Serial.print (ընթերցում);
}
voidloop () {
// տեսնել, թե արդյոք կան մուտքային սերիական տվյալներ.
եթե (Serial.available ()> 0) {
// կարդալ սերիական բուֆերի ամենահին բայթը.
// "Երբ դուք զանգահարում եք Serial.read- ին, բայթը հանվում է ստացման բուֆերից և վերադարձվում ձեր կոդին"
incomingByte = Serial.read ();
// եթե դա մեծատառ H է (ASCII 72), կարդացեք արժեքները և ուղարկեք դրանք ազնվամորու հյուրընկալողին:
// TODO: համոզվեք, որ հաղորդագրությունը միշտ նույն երկարությունն է, ամեն անգամ
եթե (մուտքայինԲայթ == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2 Ընթերցում);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5 Ընթերցում);
Serial.print ("&");
valuePrint ("mq135", mq135 Ընթերցում);
Serial.print ("\ n");
}
}
// սերիալը կարդալ միայն ամեն վայրկյան
ուշացում (1000);
}

դիտել rawmain.cpp- ը, որը տեղակայված է it -ի կողմից GitHub- ի կողմից

Քայլ 4: Raspberry Pi Code

Այժմ, երբ դուք կազմաձևել եք Raspberry Pi- ն ըստ https://dzone.com/articles/raspberry-pi-iot-sensor…, այժմ կարող եք գործարկել Raspberry Client կոդը, որը տվյալներ կուղարկի MQTT- ի միջոցով մեր տվյալների բազային, որը նույնպես միանում է Գրաֆանային:

  1. Համոզվեք, որ ձեր ազնվամորին միացված է ինտերնետին, այնուհետև կատարեք git clone հրաման ՝ ամբողջ ծածկագիրը Raspberry Pi- ին պատճենելու համար: Ձեր հրամանը մի փոքր նման կլինի.

    git կլոն

  2. Ազնվամորու Pi- ի տերմինալում կատարեք գրացուցակի փոփոխման հրամանը (cd) «raspberry_client» - ի մեջ.

    cd raspberry_client.

  3. Դուք պետք է օգտագործեք վիրտուալ միջավայր*: Պարզ. Վազիր

    python3 -m venv env. Սա կստեղծի «env» կոչվող վիրտուալ միջավայր, որը մենք կօգտագործենք կախվածություններ տեղադրելու համար:

  4. Այժմ մենք պետք է մուտք գործենք մեր վիրտուալ միջավայր: Գործարկել:

    աղբյուր env/bin/ակտիվացնել. Այժմ դուք պատրաստ եք տեղադրել նախագծի կախվածությունը:

  5. Փաթեթում, որը դուք պարզապես կլոնավորել եք, կա ֆայլ պահանջներ. Txt: Բացեք այս ֆայլը; կտեսնեք, որ մենք պահանջում ենք paho-mqtt և pyserial փաթեթները, ինչպես նաև դրանց համապատասխան տարբերակները: Գործողության միջոցով կարող եք դիտել ֆայլի բովանդակությունը

    կատվի պահանջները. txt. Այս փաթեթները տեղադրելու համար ru

    pip install -r պահանջները. txt.

  6. Սա ավարտում է կազմաձևը:

Բառացիորեն յուրաքանչյուր ձեռնարկ, որը օգտագործում է Python- ը, նշում է Վիրտուալ env- ը, և նույնիսկ այս փոքր նախագծի համար ես նշում կանեմ: Վիրտուալ միջավայրը թույլ է տալիս առանձնացնել կախվածության տարբերակները, ինչպես նաև առանձնացնել ձեր Python- ի աշխատանքային հոսքը. Դա ձեր Python- ի աշխատանքային տարածքները կարգի բերելու գեղեցիկ միջոց է: Եթե առաջին անգամ եք օգտագործում վիրտուալ միջավայրեր, կարճ կարդացեք դրանք այստեղ:

Ի՞նչ է անում ծածկագիրը…

Client.py ֆայլը ներմուծելու է գրադարանների մի շարք, ներառյալ մեր սեփական arduinosensor- ը: Հիմնական գործառույթում մենք կստանանք արժեքները Arduino- ից, տվյալները կհրապարակենք MQTT բրոքերին, այնուհետև կքնենք 10 վայրկյան:

Arduinosensor.py ֆայլը օժանդակ մեթոդների շարք է, որոնք պտտվում են paho.mqtt գրադարանում, ինչպես նաև ապահովում են Arduino- ի բեռնվածության հետ հաղորդակցվելու որոշ օգտակար սխեմաներ (տես ՝ parse_payload): Իհարկե, ծածկագիրը կցված է այս բաժնի վերջում:

Պարզ հաճախորդ, որը arduino- ի հետ շփվում է սերիական մոնիտորի միջոցով: Ակնկալեք, որ այստեղ կգտնեք ծածկագիրը, երբ այն հրապարակվի ՝

fromimportlibimportimport_module
ներմուծողներ
ներմուծման ժամանակը
ներմուծողduinosensor
defmain ():
# բաց սահմանված հաճախորդ
start_time = time.time ()
իսկ ճշմարիտ:
ընթերցում = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", payload = ընթերցում)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
հիմնական ()

դիտել rawclient.py- ն, որը տեղակայված է it -ի կողմից GitHub- ի կողմից

Քայլ 5: Ամեն ինչ միասին դնել

Մենք ունենք Raspberry Python կոդը, և մենք ունենք Arduino հաճախորդի կոդը: Եկեք անցնենք երկու սուբյեկտների միասին միացմանը:

Նախ, եկեք միացնենք Arduino- ն և ստեղծենք ճիշտ կազմաձևը.

  1. Ձեր Raspberry Pi տերմինալում աշխատեք

    python -m serial.tools.list_ports. Սա կցուցադրի սերիական հաղորդակցություն ապահովող բոլոր USB պորտերը:

  2. Այժմ միացրեք ձեր Arduino- ն և սպասեք մոտ 2 վայրկյան, մինչև Ազնվամորին ճանաչի այն: Մուտքագրում

    python -m serial.tools.list_ports ևս մեկ անգամ նորից ցույց կտա նավահանգիստները: Դուք կարող եք տեսնել լրացուցիչ ցուցակ, եթե դա իսկապես այդպես է, ապա այս նոր մուտքն այն մուտքն է, որին միացված է ձեր Arduino- ն: Սա, ամենայն հավանականությամբ, կլինի «/dev/ttyUSB0»:

  3. Փորձեք գործարկել python ծածկագիրը ձեր վիրտուալ միջավայրում ՝ գործարկելով python3.7 client.py: Սպասեք մի քանի վայրկյան (առավելագույնը տասը). Եթե բացառության եք հանդիպում, դա նշանակում է, որ մենք պետք է փոխենք ազնվամորի pi- ի մեր com port- ի արժեքը: Եթե տեսնում եք, որ ծածկագիրը տպում է տող ՝ սկսած «Ուղարկված է հետևյալ բեռնվածությունից …» տառով, ապա լավ կլինի, որ Գրաֆանայի հետ անցնեք վերջին քայլին: Հուշում. Համոզվեք, որ վազում եք

    էկրան -S python նախքան python հաճախորդին գործարկելը, հակառակ դեպքում, երբ դադարեցնեք ձեր կապը ձեր ազնվամորի pi- ի հետ, դուք կկորցնեք ձեր գործող python ծրագիրը: Տեխնիկապես, ձեզ հարկավոր չէ խստորեն օգտագործել «python» - ը որպես վերջին պարամետր, բայց ինձ դուր է գալիս իմ էկրանի նիստերին համապատասխան անուններ տալը:

    1. COM նավահանգստի արժեքը փոխելու համար, նախքան ծածկագիրը գործարկելը, ստիպված կլինեք սահմանել միջավայրի փոփոխական: Դուք պետք է փորձեք սա յուրաքանչյուր հնարավոր արժեքի համար, որը ստացել եք python -m serial.tools.list_ports- ով աշխատելիս: Օրինակ, եթե իմ ստացած գրառումների քանակը երկու լիներ և հետևյալը լինեին.

      • /dev/ttyUSB6
      • /dev/acm0

ապա այն հրամանները, որոնք ես կաշխատեի, հետևյալն էին.

PORT = "/dev/ttyUSB6" python3.7 client.py, և եթե դա չաշխատեր, ես հետագայում կխախտեի

PORT = "/dev/acm0" python3.7 client.py

Այս քայլերն ավարտելուց հետո ծածկագիրը տվյալներ կհատկացնի մեր fluxdb տվյալների բազայի օրինակին, որը Grafana- ին միանալիս թույլ կտա դիտել մեր վահանակը:

Քայլ 6: Grafana կազմաձևում և վահանակի դիտում

Grafana կազմաձևում և վահանակի դիտում
Grafana կազմաձևում և վահանակի դիտում

Լավ, մենք այժմ գտնվում ենք վերջին փուլում: Այժմ մենք կօգտագործենք Grafana- ն ՝ պարզ վահանակ ստեղծելու համար:

  1. Միացեք ձեր Grafana- ի օրինակին: Քանի որ դուք հետևել եք dzone- ի սկզբնական հոդվածի քայլերին, դուք պետք է կարողանաք մուտք գործել ձեր ադմինիստրատոր օգտագործողի հետ: Շարունակեք և մուտք գործեք:
  2. Ձախ վահանակի վրա սավառնել «վահանակների» պատկերակի վրա `չորս քառակուսիներ: Կտտացրեք «Կառավարել»:
  3. Նոր էջում կտտացրեք «Նոր վահանակ»: Ավելին, կտտացրեք «Ավելացնել նոր վահանակ»:
  4. Սա բացում է Grafana խմբագիրը: Մենք կստեղծենք մի պարզ տեսք, որը ցույց է տալիս մեկ չափիչ:

    1. Աջ վահանակում վահանակի վերնագիրը փոխեք իմաստալից մի բանի, օրինակ ՝ «Խոհանոցի ընթերցումներ»: Կարող եք նաև մուտքագրել կամայական նկարագրություն:
    2. Ներքևի ձախ մասում ՝ «Հարցում», մենք կավելացնենք մեկ ժամանակային շարք: Grafana- ն իսկապես փայլում է այստեղ, քանի որ մենք կարող ենք հեշտությամբ ստեղծել SQL հայտարարություններ կտտացման վրա հիմնված ինտերֆեյսով: «Լռելյայն» բաժնում ընտրեք InfluxDB:
    3. Այժմ, «Ա» կարդալու համար, «FROM» կետից ընտրեք «airtestt» չափումը: Եթե նայեք arduinosensor.py- ի get_values ֆունկցիայի սկզբնական պիթոնի կոդին, կտեսնեք, որ մենք սահմանում ենք այս airtestt աղյուսակը կոդի ներսում:
    4. Նմուշի համար եկեք գնանք «ԸՆՏՐԵԼ» կետ և ընտրեք դաշտը (mq4): Սկզբնապես մեր վահանակը մեզ կտա «միջին ()» ընտրությունը ՝ կտտացրեք այս ընտրության վրա և ընտրեք «Հեռացնել»: ապա կտտացրեք գումարած նշանի վրա և «Համախմբումներ» բաժնում ընտրեք «տարբեր ()»: Սա ցույց կտա կոնկրետ ժամանակային կետեր: Մենք կարող ենք ընտրել այլ միջոցներ, բայց առայժմ մեր վահանակը ցույց կտա mq4- ի հստակ ընթերցումներ:
    5. Կտտացրեք Պահել վերևի աջ կողմում, և դուք ավարտված եք:

Խնդիր առաջանալու դեպքում կարող եք հաստատել ձեր կարգավորումները կցված էկրանի նկարում:

Քայլ 7: Ամփոփեք

Փաթեթավորեք
Փաթեթավորեք

Այս ձեռնարկում դուք կարողացաք ստեղծել հզոր MQTT ցանց, որը բաղկացած է մեկ հանգույցից և միջնորդից: Դուք կարողացաք նաև պատկերացնել ձեր IOT տվյալները Grafana- ի միջոցով: Վերջապես, դուք կարողացաք կազմել այս պարզ համակարգի ճարտարապետությունը (հուսանք) ձեր դիտարկիչի և համակարգչի հարմարավետությունից ՝ SSH կապի միջոցով:

Կան որոշ բաներ, որոնց վրա գուցե ցանկանանք բարելավել:

  • Մեր գրաֆիկի սենսորների ընթերցումները իրականում ճշգրիտ սենսորային ընթերցումներ չեն. Դրանք մեր սենսորից ելքային լարումն են: Նրանք պետք է ճշգրտվեն, ավելի մանրամասն ծանոթանալու համար այցելեք այս բլոգային գրառումը:
  • Մեր ազնվամորու pi կոնֆիգուրացիան կարող է շատ ավելի թեթևացվել ՝ օգտագործելով arduino- ին միացված ESP8266 տախտակը և ամբողջությամբ հեռացնելով pi- ն: Դիտեք ESP8266 մոդուլի ներածությունը:
  • Հնարավոր է, որ մենք ցանկանանք որոշակի իրադարձությունների վերաբերյալ ահազանգեր ավելացնել: Բարեբախտաբար, Գրաֆանան առաջարկում է դա անելու եղանակ:

Ես որոշ այլ ընթերցումներ կթողնեմ `ձեր երևակայությունը գայթակղելու համար IOT աշխարհով: Անհամբերությամբ սպասում եմ ձեզ հաջորդ ուսանելի ձեռնարկում:

Լրացուցիչ ընթերցումներ.

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