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

IoT եղանակային կայան RPi- ով և ESP8266- ով ՝ 10 քայլ
IoT եղանակային կայան RPi- ով և ESP8266- ով ՝ 10 քայլ

Video: IoT եղանակային կայան RPi- ով և ESP8266- ով ՝ 10 քայլ

Video: IoT եղանակային կայան RPi- ով և ESP8266- ով ՝ 10 քայլ
Video: Ինչպես Գարուն Boot աշխատում եւ ինչ է ավտո-կոնֆիգուրացիա. Կախարդական? 2024, Նոյեմբեր
Anonim
IoT եղանակային կայան RPi- ով և ESP8266- ով
IoT եղանակային կայան RPi- ով և ESP8266- ով

Նախորդ ձեռնարկների վրա մենք խաղում էինք NodeMCU- ի, սենսորների հետ և սովորում, թե ինչպես գրավել և մուտքագրել տվյալները ThingSpeak (բաների ինտերնետ (IoT) հարթակում, որը թույլ է տալիս հավաքել և պահել սենսորային տվյալները ամպի մեջ և մշակել IoT ծրագրեր).

IOT MASE EASY.

Այս նոր ձեռնարկի միջոցով մենք կսովորենք, թե ինչպես անել նույնը, բայց այս պահին ՝ օգտագործելով Raspberry Pi- ն ՝ մի քանի տարբեր սենսորներից տվյալներ գրավելու համար, ինչպես նաև սարքերի և վեբի միջև հաղորդակցության տարբեր եղանակների ուսումնասիրություն.

Սենսորներ և կոմիկականացման տեսակը.

  • DHT22 (ջերմաստիճան և խոնավություն) ==> Թվային հաղորդակցություն
  • BMP180 (ջերմաստիճան և ճնշում) ==> I2C արձանագրություն
  • DS18B20 (ջերմաստիճան) ==> 1-լարային արձանագրություն

Արգելափակման դիագրամը ցույց է տալիս, թե ինչ ենք ստանալու վերջում այս նախագծով.

Պատկեր
Պատկեր

Քայլ 1. BoM - նյութերի հաշիվ

  1. Raspberry Pi V3 - 32,00 ԱՄՆ դոլար
  2. DHT22 peratերմաստիճանի եւ հարաբերական խոնավության ցուցիչ `9.95 ԱՄՆ դոլար
  3. Ռեզիստոր 4K7 օմ
  4. DS18B20 Անջրանցիկ ջերմաստիճանի տվիչ - 5.95 ԱՄՆ դոլար
  5. Ռեզիստոր 4K7 օմ
  6. BMP180 Բարոմետրիկ ճնշման, ջերմաստիճանի և բարձրության ցուցիչ ՝ 6,99 ԱՄՆ դոլար

Քայլ 2: Instերմաստիճանի և խոնավության ցուցիչի տեղադրում

Instերմաստիճանի և խոնավության ցուցիչի տեղադրում
Instերմաստիճանի և խոնավության ցուցիչի տեղադրում

Առաջին սենսորը, որը կտեղադրվի, կլինի DHT22- ը ՝ օդի ջերմաստիճանի և հարաբերական խոնավության մասին տվյալները գրավելու համար: ADAFRUIT կայքը հիանալի տեղեկատվություն է տրամադրում այդ տվիչների մասին: Ստորև, այնտեղից վերցված որոշ տեղեկություններ.

Ակնարկ

Tածր DHT ջերմաստիճանի և խոնավության սենսորները շատ հիմնական և դանդաղ են, բայց հիանալի են այն հոբբիստների համար, ովքեր ցանկանում են որոշ հիմնական տվյալների գրանցում կատարել: DHT սենսորները բաղկացած են երկու մասից ՝ խոնավության հզորության տվիչից և թերմիստորից: Ներսում կա նաև շատ հիմնական չիպ, որը կատարում է անալոգային թվային փոխակերպում և դուրս է բերում թվային ազդանշան ջերմաստիճանի և խոնավության հետ: Թվային ազդանշանը բավականին հեշտ է կարդալ ՝ օգտագործելով ցանկացած միկրոկոնտրոլեր:

DHT22 Հիմնական բնութագրերը.

  • Ցածր գին
  • 3 -ից 5 Վ հզորություն և I/O
  • 2.5 մԱ առավելագույն ընթացիկ օգտագործումը փոխակերպման ընթացքում (տվյալները պահանջելիս)
  • Լավ է 0-100% խոնավության ցուցանիշների համար `2-5% ճշգրտությամբ
  • Լավ է -40 -ից 125 ° C ջերմաստիճանի ընթերցումների համար ± 0.5 ° C ճշգրտության համար
  • Նմուշառման ոչ ավելի, քան 0.5 Հց արագություն (2 վայրկյանը մեկ անգամ)
  • Մարմնի չափը 15.1 մմ x 25 մմ x 7.7 մմ
  • 4 կապում ՝ 0.1 դյույմ տարածությամբ

Սովորաբար, երբ սենսորը կօգտագործեք 20 մ -ից պակաս հեռավորության վրա, 4K7 օհմ ռեզիստոր պետք է միացված լինի տվյալների և VCC կապերի միջև: DHT22 ելքային տվյալների քորոցը միացված կլինի Raspberry GPIO 16 -ին: Ստուգեք վերը նշված էլեկտրական դիագրամը ՝ սենսորը միացնելով RPi կապերին, ինչպես ստորև.

  1. Պին 1 - Vcc ==> 3.3V
  2. Պին 2 - Տվյալներ ==> GPIO 16
  3. Pin 3 - Միացեք
  4. Pin 4 - Gnd ==> Gnd

Չմոռանաք տեղադրել VK և Data կապերի միջև 4K7 ohm ռեզիստորը

Երբ սենսորը միացված է, մենք նաև պետք է տեղադրենք դրա գրադարանը մեր RPi- ի վրա:

DHT գրադարանի տեղադրում

Ձեր Ազնվամորու վրա, սկսած /տնից, անցեք /Փաստաթղթեր

cd Փաստաթղթեր

Ստեղծեք գրադարան ՝ գրադարանը տեղադրելու և այնտեղ տեղափոխվելու համար.

mkdir DHT22_ Սենսոր

cd DHT22_ Սենսոր

Ձեր դիտարկիչում գնացեք Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Ներբեռնեք գրադարանը ՝ աջից սեղմելով ներլցման zip հղումը և բացեք արխիվը ձեր Raspberry Pi- ի վերջերս ստեղծված թղթապանակից: Այնուհետև գնացեք գրադարանի գրացուցակ (ենթապանակ, որն ինքնաբերաբար ստեղծվում է ֆայլը ապակողպելուց հետո) և կատարեք հրամանը.

sudo python3 setup.py տեղադրել

Բացեք թեստային ծրագիր (DHT22_test.py) իմ GITHUB- ից

ներմուծել Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 խոնավություն, ջերմաստիճան = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), եթե խոնավությունը չկա և ջերմաստիճանը չկա f}%'. ձևաչափ (ջերմաստիճան, խոնավություն)) այլ ՝ տպել («Չհաջողվեց կարդալ: Նորից փորձեք»)

Գործարկեք ծրագիրը հրամանով.

python3 DHT22_test.py

Ստորև բերված Տերմինալի տպման էկրանը ցույց է տալիս արդյունքը:

Պատկեր
Պատկեր

Քայլ 3. Տեղադրեք DS18B20 - ջերմաստիճանի տվիչ

DS18B20 - ջերմաստիճանի տվիչի տեղադրում
DS18B20 - ջերմաստիճանի տվիչի տեղադրում
DS18B20 - ջերմաստիճանի տվիչի տեղադրում
DS18B20 - ջերմաստիճանի տվիչի տեղադրում

Սենսորային ակնարկ

Այս ձեռնարկում մենք կօգտագործենք DS18B20 տվիչի անջրանցիկ տարբերակ: Այն շատ օգտակար է հեռավոր ջերմաստիճանի համար խոնավ պայմաններում, օրինակ `խոնավ հողի վրա: Սենսորը մեկուսացված է և կարող է չափումներ կատարել մինչև 125oC (Adafrut- ը խորհուրդ չի տալիս այն օգտագործել 100oC- ից բարձր ՝ իր մալուխային PVC բաճկոնի պատճառով):

DS18B20- ը թվային տվիչ է, ինչը լավ է դարձնում այն օգտագործել նույնիսկ երկար հեռավորությունների վրա: Այս 1-լարային թվային ջերմաստիճանի տվիչները բավականին ճշգրիտ են (± 0.5 ° C միջակայքի մեծ մասում) և կարող են մինչև 12 բիթ ճշգրտություն տալ բորտ թվային-անալոգային փոխարկիչից: Նրանք հիանալի աշխատում են NodeMCU- ի հետ ՝ օգտագործելով մեկ թվային քորոց, և նույնիսկ կարող եք մի քանիսը միացնել միևնույն քորոցին, որոնցից յուրաքանչյուրը գործարանում այրել է յուրահատուկ 64-բիթանոց ID:

Սենսորն աշխատում է 3.0 -ից մինչև 5.0 Վ, ինչը նշանակում է, որ այն կարող է սնուցվել անմիջապես 3.3 Վ -ից, որն ապահովում է Ազնվամորու կապումներից մեկը (1 կամ 17):

Սենսորը ունի 3 լար.

  • Սև: GND
  • Կարմիր ՝ VCC
  • Դեղին ՝ 1-լարային տվյալներ

Այստեղ դուք կարող եք գտնել ամբողջական տվյալները ՝ DS18B20 տվյալների թերթիկ

Սենսորների տեղադրում

Հետևեք վերը նշված սխեմային և կատարեք կապեր.

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Տվյալներ ==> GPIO 4 (կանխադրված գրադարանի համար)

Python գրադարանի տեղադրում

Հաջորդը, եկեք տեղադրենք Python գրադարանը, որը կզբաղվի սենսորով.

sudo pip3 տեղադրել w1thermsensor

Նախքան սենսորը փորձարկելու համար սցենարը գործարկելը, ստուգեք, արդյոք «1-Wire» ինտերֆեյսը միացված է ձեր RPi- ում (տե՛ս վերևի տպման էկրանը)

Մի մոռացեք վերագործարկել ձեր RPi- ն ՝ դրա կազմաձևումը փոխելուց հետո

Սենսորի փորձարկում

Սենսորը փորձարկելու համար կարող է օգտագործվել պարզ պիթոնի սցենար.

ներմուծման ժամանակը

w1thermsensor ներմուծումից W1ThermSensor ds18b20Sensor = W1ThermSensor () մինչդեռ ճշմարիտ:

Քայլ 4: BMP180- ի տեղադրում

BMP180- ի տեղադրում
BMP180- ի տեղադրում
BMP180- ի տեղադրում
BMP180- ի տեղադրում
BMP180- ի տեղադրում
BMP180- ի տեղադրում

Սենսորային ակնարկ

BMP180- ը BMP085- ի իրավահաջորդն է `սպառողական ծրագրերի համար նոր սերնդի բարձր ճշգրտության թվային ճնշման տվիչների: BMP180- ի չափազանց ցածր էներգիայի և ցածր լարման էլեկտրոնիկան օպտիմիզացված է բջջային հեռախոսների, PDA- ների, GPS նավիգացիոն սարքերի և արտաքին սարքավորումների օգտագործման համար: Conversionածր բարձրության աղմուկով `ընդամենը 0.25 մ արագ փոխակերպման ժամանակ, BMP180- ն առաջարկում է գերազանց կատարում: I2C ինտերֆեյսը թույլ է տալիս հեշտությամբ ինտեգրվել միկրոկառավարիչին: BMP180- ը հիմնված է պիեզո-դիմադրողական տեխնոլոգիայի վրա `EMC ամրության, բարձր ճշգրտության և գծայնության, ինչպես նաև երկարաժամկետ կայունության համար:

BMP- ի ամբողջական թերթիկը կարելի է գտնել այստեղ ՝ BMP180 - Թվային ճնշման ցուցիչ

Սենսորների տեղադրում. Հետևեք վերևի դիագրամին և կատարեք միացումները.

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Միացնելով I2C ինտերֆեյսը

Գնացեք RPi կազմաձևում և հաստատեք, որ I2C ինտերֆեյսը միացված է: Եթե ոչ, միացրեք այն և վերագործարկեք RPi- ն:

Օգտագործելով BMP180

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

Առաջին բանը, որ պետք է անել, ստուգելն է ՝ արդյոք Pi- ն տեսնում է ձեր BMP180- ը: Փորձեք հետևյալը տերմինալի պատուհանում.

sudo i2cdetect -y 1

Եթե հրամանը գործի, դուք պետք է տեսնեք վերը նշված տերմինալի տպման էկրանին նման մի բան, որը ցույց է տալիս, որ BMP180- ը գտնվում է «77» ալիքում:

BMP180 գրադարանի տեղադրում

Գրադարան տեղադրելու համար ստեղծեք գրացուցակ.

mkdir BMP180_Sensorcd BMP180_Sensor

Ձեր դիտարկիչում գնացեք Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Ներբեռնեք գրադարանը ՝ աջից սեղմելով ներլցման zip հղումը և բացեք արխիվը ձեր Raspberry Pi- ի ստեղծած թղթապանակից: Այնուհետև գնացեք ստեղծված ենթապանակ և գրադարանի գրացուցակում կատարեք հետևյալ հրամանը.

sudo python3 setup.py տեղադրել

Բացեք ձեր Python IDE- ն և ստեղծեք փորձարկման ծրագիր և անվանեք այն, օրինակ ՝ BMP180Test.py

ներմուծել Adafruit_BMP. BMP085 որպես BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' ureնշում = {0: 0.2f} Pa »: ֆորմատ (sensor.read_pressure ())) տպագիր ('բարձրություն = {0: 0.2f} մ'. ձևաչափ (sensor.read_altitude ())) տպագիր ('Sealevel Pressure = {0: 0.2f} Pa'.format (ցուցիչ. կարդալ_մակարդակի_ճնշում ()))

Գործարկել թեստային ծրագիրը.

python3 BMP180Test.py

Վերը նշված Տերմինալի տպման էկրանը ցույց է տալիս արդյունքը:

Նկատի ունեցեք, որ այդ ճնշումը ներկայացված է Pa- ում (Pascals): Տեսեք հաջորդ քայլը ՝ այս միավորի մասին ավելի լավ հասկանալու համար:

Քայլ 5. Եղանակի և բարձրության չափում BMP180- ով

Եղանակի և բարձրության չափում BMP180- ով
Եղանակի և բարձրության չափում BMP180- ով

Եկեք ժամանակ հատկացնենք և մի փոքր ավելին հասկանանք, թե ինչ ենք ստանալու, BMP- ի ընթերցումներով: Կարող եք բաց թողնել ձեռնարկի այս հատվածը կամ վերադառնալ ավելի ուշ:

Եթե ցանկանում եք ավելին իմանալ տվիչների ընթերցումների մասին, այցելեք այս հիանալի ձեռնարկը ՝

BMP180- ը նախագծվել է մթնոլորտային ճնշումը ճշգրիտ չափելու համար: Մթնոլորտային ճնշումը տատանվում է ինչպես եղանակի, այնպես էլ բարձրության վրա:

Ի՞նչ է մթնոլորտային ճնշումը:

Մթնոլորտային ճնշման սահմանումն այն ուժն է, որը շրջապատող օդը գործադրում է ամեն ինչի վրա: Մթնոլորտում գազերի քաշը ստեղծում է մթնոլորտային ճնշում: Pressureնշման ընդհանուր միավորը «ֆունտ քառակուսի դյույմ» կամ psi է: Մենք այստեղ կօգտագործենք միջազգային նշումը, այն է ՝ նյուտոն / քառակուսի մետրի համար, որը կոչվում է պասկալ (Pa):

Եթե վերցնեիք 1 սմ լայնությամբ օդի սյուն, ապա կշռում էր մոտ 1 կգ

Այս քաշը, սեղմելով այդ սյունակի հետքը, ստեղծում է մթնոլորտային ճնշում, որը մենք կարող ենք չափել BMP180- ի նման սենսորներով: Քանի որ այդ սմ լայնությամբ օդի սյունը կշռում է մոտ 1 կգ, հետևում է, որ ծովի մակարդակի միջին ճնշումը կազմում է մոտ 101325 պասկալ, կամ ավելի լավ ՝ 1013.25 hPa (1 hPa- ն հայտնի է նաև որպես milibar - mbar): Ձեր բարձրանալու յուրաքանչյուր 300 մետրի համար դա կնվազի մոտ 4% -ով: Որքան բարձրանաք, այնքան ավելի քիչ ճնշում կտեսնեք, քանի որ մթնոլորտի գագաթին գտնվող սյունակը շատ ավելի կարճ է և, հետևաբար, ավելի քիչ է կշռում: Սա օգտակար է իմանալ, քանի որ ճնշումը չափելով և որոշ մաթեմատիկա անելով ՝ կարող եք որոշել ձեր բարձրությունը:

3.810 մետր օդի ճնշումը ծովի մակարդակի ճնշման միայն կեսն է:

BMP180- ը թողնում է բացարձակ ճնշում պասկալներում (Pa): Մեկ պասկալը շատ փոքր ճնշում է, մոտավորապես այն քանակությամբ, որը թղթի թերթիկը գործադրելու է հանգստանալով սեղանի վրա: Դուք ավելի հաճախ կտեսնեք չափումներ հեկտոպասկալներում (1 hPa = 100 Pa): Այստեղ օգտագործվող գրադարանը տրամադրում է ելքեր լողացող կետերի արժեքներով hPa- ում, որը նույնպես հավասար է մեկ միլիբարի (mbar):

Ահա մի քանի փոխակերպումներ այլ ճնշման միավորների.

  • 1 hPa = 100 Pa = 1 mbar = 0.001 բար
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0.01450377 psi (ֆունտ / քառակուսի դյույմ)
  • 1 hPa = 0.02953337 inHg (սնդիկի դյույմ)
  • 1 hpa = 0.00098692 ատմ (ստանդարտ մթնոլորտ)

Temերմաստիճանի էֆեկտներ

Քանի որ ջերմաստիճանը ազդում է գազի խտության վրա, և խտությունը ազդում է գազի զանգվածի վրա, և զանգվածը ազդում է ճնշման վրա, մթնոլորտային ճնշումը կտրուկ կփոխվի ջերմաստիճանի հետ: Օդաչուները դա գիտեն որպես «խտության բարձրություն», ինչը հեշտացնում է ցուրտ օրը թռիչքը, քան տաքը, քանի որ օդը ավելի խիտ է և ունի ավելի մեծ աերոդինամիկ ազդեցություն: Temperatureերմաստիճանը փոխհատուցելու համար BMP180- ը ներառում է բավականին լավ ջերմաստիճանի տվիչ, ինչպես նաև ճնշման տվիչ:

Pressureնշման ընթերցում կատարելու համար դուք նախ վերցնում եք ջերմաստիճանի ընթերցում, այնուհետև այն համակցում եք հում ճնշման ընթերցման հետ `վերջնական ջերմաստիճանի փոխհատուցվող ճնշման չափման համար: (Գրադարանը շատ հեշտ է դարձնում այս ամենը):

Բացարձակ ճնշման չափում

Եթե ձեր դիմումը պահանջում է չափել բացարձակ ճնշում, ապա ձեզ մնում է միայն ջերմաստիճանի ցուցում ստանալ, այնուհետև կատարել ճնշման ընթերցում (մանրամասների համար տե՛ս էսքիզների օրինակը): Pressureնշման վերջնական ցուցանիշը կլինի hPa = mbar: Եթե ցանկանում եք, կարող եք այն վերածել այլ միավորի ՝ օգտագործելով վերը նշված փոխարկման գործոնները:

Նկատի ունեցեք, որ մթնոլորտի բացարձակ ճնշումը կտատանվի ինչպես ձեր բարձրության, այնպես էլ ներկայիս եղանակային եղանակների հետ, որոնք երկուսն էլ օգտակար բաներ են չափելու համար:

Եղանակի դիտարկումներ

Երկրի վրա (կամ մթնոլորտ ունեցող ցանկացած վայրում) մթնոլորտային ճնշումը մշտական չէ: Երկրի պտույտի, առանցքի թեքության և շատ այլ գործոնների բարդ փոխազդեցությունը հանգեցնում է ավելի ու ավելի ցածր ճնշման տարածքների տեղաշարժի, որն էլ իր հերթին առաջացնում է եղանակի տատանումներ, որոնք մենք տեսնում ենք ամեն օր: Watchingնշման փոփոխություններին հետեւելով ՝ կարող եք կանխատեսել եղանակի կարճաժամկետ փոփոխություններ: Օրինակ, ճնշման անկումը սովորաբար նշանակում է թաց եղանակ կամ փոթորիկ է մոտենում (ցածր ճնշման համակարգ է մտնում): Սովորաբար ճնշման բարձրացումը նշանակում է, որ մոտենում է պարզ եղանակը (բարձր ճնշման համակարգ է շարժվում): Բայց հիշեք, որ մթնոլորտային ճնշումը նույնպես տարբերվում է բարձրությունից: Բացարձակ ճնշումս իմ տանը ՝ Լի Բարնեչեա Չիլիում (բարձրություն 950 մ), միշտ ավելի ցածր կլինի, քան օրինակ Սան Ֆրանցիսկոյի բացարձակ ճնշումը (2 մետրից պակաս, գրեթե ծովի մակարդակ): Եթե եղանակային կայանները պարզապես հայտնեն իրենց բացարձակ ճնշման մասին, ապա դժվար կլիներ ուղղակիորեն համեմատել ճնշման չափումները մեկ վայրից մյուսը (և եղանակի լայնածավալ կանխատեսումները կախված են հնարավորինս շատ կայաններից ստացված չափումներից):

Այս խնդիրը լուծելու համար եղանակային կայանները միշտ հեռացնում են բարձրության հետևանքները իրենց հաղորդած ճնշման ընթերցումներից ՝ մաթեմատիկորեն ավելացնելով համարժեք ֆիքսված ճնշումը, որպեսզի թվում լինի, թե ընթերցումը կատարվել է ծովի մակարդակում: Երբ դա անեք, Սան Ֆրանցիսկոյում ավելի բարձր ցուցանիշ, քան Լո Բարնեչեն, միշտ կլինի եղանակային պայմանների պատճառով, այլ ոչ թե բարձրության պատճառով:

Դա անելու համար գրադարանում կա մի գործառույթ, որը կոչվում է ծովի մակարդակ (P, A): Սա վերցնում է բացարձակ ճնշումը (P) hPa- ում, և կայանի ընթացիկ բարձրությունը (A) մետրերով և հեռացնում բարձրության ազդեցությունները ճնշումից: Դուք կարող եք օգտագործել այս գործառույթի ելքը ՝ ձեր եղանակի ցուցանիշներն ուղղակիորեն համեմատելու համար աշխարհի այլ կայանների հետ:

Բարձրության որոշում

Քանի որ ճնշումը տատանվում է բարձրության վրա, կարող եք օգտագործել ճնշման սենսոր ՝ բարձրությունը չափելու համար (մի քանի նախազգուշացումներով): Theովի մակարդակում մթնոլորտի միջին ճնշումը 1013.25 hPa (կամ mbar) է: Սա իջնում է զրոյի, երբ բարձրանում ես դեպի տարածության վակուումը: Քանի որ այս անկման կորը լավ հասկացված է, դուք կարող եք հաշվարկել ճնշման երկու չափումների (p և p0) բարձրության տարբերությունը `օգտագործելով հատուկ հավասարություն:

Եթե դուք օգտագործում եք ծովի մակարդակի ճնշումը (1013.25 hPa) որպես հիմնական ճնշում (p0), ապա հավասարման ելքը կլինի ձեր ընթացիկ բարձրությունը ծովի մակարդակից: Գրադարանում կա բարձրություն (P, P0) կոչվող գործառույթ, որը թույլ է տալիս ստանալ «հաշվարկված բարձրություն»:

Վերոնշյալ բացատրությունը քաղված է BMP 180 Sparkfun ձեռնարկից:

Քայլ 6. Ամբողջական HW

Ամբողջական HW
Ամբողջական HW

Քայլ 7: Տվյալների ուղարկում ThingSpeak- ին

Տվյալների ուղարկումը ThingSpeak- ին
Տվյալների ուղարկումը ThingSpeak- ին

Այս պահին մենք սովորեցինք, թե ինչպես պատրաստել RPi- ն ՝ բոլոր 3 տվիչներից տվյալները գրավելու համար, դրանք տպելով տերմինալի վրա: Այժմ, ժամանակն է տեսնել, թե ինչպես ուղարկել այդ տվյալները IoT հարթակ ՝ ThingSpeak:

Եկեք սկսենք!

Նախ, դուք պետք է հաշիվ ունենաք ThinkSpeak.com կայքում

Հետևեք ալիք ստեղծելու հրահանգներին և ուշադրություն դարձրեք ձեր ալիքի ID- ին և գրեք API բանալիին

Ներբեռնեք Python սցենարը իմ GitHub- ից ՝ localData ToTS_v1_EXT.py

Եկեք մեկնաբանենք ծածկագրի ամենակարևոր մասերը.

Նախ, եկեք ներմուծենք ThingSpeak գրադարանը, սահմանենք WiFi հաճախորդը և սահմանենք ձեր տեղական Router- ի և Thinkspeak- ի հավատարմագրերը.

ներմուծել բաներ

ThingSpeak- ի հետ հաղորդակցվելու մի քանի եղանակ կա, ամենապարզ միջոցը կլինի հաճախորդների գրադարանից օգտվել Mikolaj Chwaliz- ի և Keith Ellis- ի կողմից մշակված thingspeak.com API- ի համար:

Գրադարանը կարելի է ներբեռնել https://github.com/mchwalisz/thingspeak կայքից կամ օգտագործել PIP տերմինալում ՝

sudo pip3 տեղադրել thingspeak

Հաջորդը, սցենարի ներսում, թարմացրեք ThingSpeak ալիքի հավատարմագրերը

chId = 9999999 # Մուտքագրեք ձեր ալիքի ID- ով

tsKey = 'Մուտք գործեք ձեր ալիքի հետ, գրեք բանալի' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. ալիք (chId, tsUrl, tsKey)

Այժմ եկեք նախաստորագրենք 3 տվիչները.

# DS18B20 1-լարային գրադարան

w1thermsensor ներմուծումից W1ThermSensor ds18b20Sensor = W1ThermSensor () # Լռելյայն GPIO 4 -ն օգտագործվում է գրադարանի կողմից # DHT22 Գրադարան ներմուծում Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180MP գրադարան ներմուծում Adafruit_85MP Դուք պետք է սահմանեք իրական բարձրությունը, որտեղ գտնվում է ձեր Եղանակային կայանը ՝ թարմացնելով «altReal» գլոբալ փոփոխականը: Իմ դեպքում իմ կայանը գտնվում է ծովի մակարդակից 950 մ բարձրության վրա

գլոբալ altReal

altReal = 950

Երբ կայանը մուտքագրվում է իրական բարձրության վրա որպես մուտք, մենք կարող ենք ստանալ բացարձակ ճնշում, ծովի մակարդակի ճնշում, ջերմաստիճան և բարձրություն ՝ օգտագործելով bmp180GetData (բարձրություն) գործառույթը.

def bmp180GetData (բարձրություն):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - altitude/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100, 2) # բացարձակ ճնշում hPa (կամ mbar) alt=կլոր (alt) presSeaLevel = կլոր (presSeaLevel/100, 2) # բացարձակ ճնշում hPa (կամ mbar) վերադարձի ջերմաստիճանի, pres, alt, presSeaLevel

GetLocalData () գործառույթը կվերադարձնի մեր կայանի կողմից գրավված բոլոր տեղական տվյալները.

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Ստացեք կարդալու ժամանակ հիմա = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Կարդալ արտաքին ջերմաստիճանից (1 մետր հեռավորություն) tempExt = կլոր (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Tensor) չէ, և tempDHT- ը Ոչ մեկը չէ. humLab = կլոր (humDHT

Վերոնշյալ գործառույթներով գրավված բոլոր տվյալները ստանալուց հետո դրանք պետք է ուղարկեք ThingSpeak: Դուք դա կանեք ՝ օգտագործելով sendDataTs () գործառույթը:

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.pdate (data) print ("[INFO] Տվյալները ուղարկվել են 5 դաշտերի համար ՝ ", tempLab, tempExt, humLab, presSL, altLab)

Ձեր ալիքի տվյալները թարմացված պահելով ՝ պահեք սցենարը և գործարկեք այն ձեր տերմինալում.

sudo Python3 localData_ToTs_v1_EXT.py

Հաղորդակցության արձանագրությունների մասին

Նկատի ունեցեք, որ օգտագործելով «thingspeak գրադարան» -ը, «հարցումների գրադարանը» ներմուծվում է, դա Apache2 լիցենզավորված HTTP գրադարան է ՝ գրված Python- ում: Տեղադրման պաշտոնական հարցման փաստաթղթերը կարող եք գտնել այստեղ ՝

docs.python-requests.org/hy/latest/user/install/

Անհրաժեշտության դեպքում, նախքան ձեր սցենարը գործարկելը, կարող եք ստուգել, թե արդյոք հարցումների գրադարանը տեղադրված է.

sudo pip3 տեղադրման հարցումներ

Անկության դեպքում կարող եք օգտագործել MTTQ- ն ՝ որպես միջոց ThingSpeak- ին տվյալներ ուղարկելու համար: MQTT- ը տարբերվում է HTTP- ից, մեկ անգամ: Այն հատուկ նախագծված է լինելու թեթև և նախատեսված է ցածր RAM և պրոցեսորի ցածր արդյունավետությամբ ներդրված սարքերի համար: Բացի այդ, շատ դեպքերում MQTT- ն օգտագործում է ավելի քիչ թողունակություն:

Տե՛ս այս ձեռնարկը. Լրացուցիչ մանրամասների համար թարմացրեք ThingSpeak ալիքը MQTT- ով ՝ Raspberry Pi- ի միջոցով:

Քայլ 8. Հեռակա տվյալների ուղարկում ThingSpeak- ին ՝ օգտագործելով ESP8266

ESP8266- ի միջոցով հեռակա տվյալների ուղարկումը ThingSpeak- ին
ESP8266- ի միջոցով հեռակա տվյալների ուղարկումը ThingSpeak- ին
ESP8266- ի միջոցով հեռակա տվյալների ուղարկումը ThingSpeak- ին
ESP8266- ի միջոցով հեռակա տվյալների ուղարկումը ThingSpeak- ին

Այս քայլի համար մենք կօգտագործենք նույն HW- ն, որը բացատրված էր muy ձեռնարկում.

IOT MASE EASY.

Այն կոդը, որը մենք կօգտագործենք այստեղ, հիմնականում նույնն է, ինչ օգտագործվում է այդ ձեռնարկում: Եկեք մեկնաբանենք ծածկագրի ամենակարևոր մասերը.

Նախ, եկեք զանգահարենք ESP8266 գրադարան, սահմանենք WiFi հաճախորդը և սահմանենք ձեր տեղական Router- ի և Thinkspeak- ի հավատարմագրերը.

/ * NodeMCU ESP12-E */

#ներառել WiFiClient հաճախորդը; const char* MY_SSID = "Մուտք գործեք ձեր SSDID- ով"; const char* MY_PWD = "Մուտքագրեք ձեր գաղտնաբառով"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; Լարային TS_API_KEY = "Մուտք գործեք ձեր գրած բանալիով";

Երկրորդ, եկեք ներառենք IoT նախագծերի համար շատ կարևոր գրադարան ՝ SimpleTimer.h:

/ * IMԱՄԱՆԱԿԸ */

#ներառել SimpleTimer ժամաչափ;

Երրորդ, setup () - ի ընթացքում մենք կսկսենք սերիական հաղորդակցումը, կանչենք connectWiFi () գործառույթը և կսահմանենք ժամաչափերը: Նշենք, որ կոդի տողը ՝ timer.setInterval (60000L, sendDataTS); յուրաքանչյուր 60 վայրկյանը մեկ կանչում է sendDataTS () գործառույթը ՝ տվյալները ThinkSpeak ալիքում վերբեռնելու համար:

դատարկ կարգավորում ()

{… Serial.begin (115200); ուշացում (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Վերջապես, բայց ոչ պակաս կարևոր, օղակի ընթացքում (), միակ հրամանը, որն անհրաժեշտ է, ժամանակաչափի գործարկումն է և վերջ:

դատարկ շրջան ()

{… Timer.run (); // նախաձեռնում է SimpleTimer}

Ստորև կարող եք տեսնել երկու կարևոր գործառույթներ, որոնք օգտագործվում են Thinkspeak հաղորդակցությունը կարգավորելու համար.

ESP12-E կապ ձեր WiFi ցանցի հետ.

/***************************************************

*Միացնել WiFi ********************************************* ***/ void connectWifi () {Serial.print ("Միացում"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {ուշացում (1000); Serial.print ("."); } Serial.println (""); Serial.println («WiFi միացված է»); Serial.println (""); }

ESP12-E- ն տվյալներ է ուղարկում ThinkSpeak.

***************************************************

*Տվյալների ուղարկում Thinkspeak ալիքին **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& դաշտ 6 ="; postStr += Լար (ջերմաստիճան); postStr += "& field7 ="; postStr += Լար (բզզոց); postStr += "& field8 ="; postStr += Լար (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /update HTTP /1.1 / n"); client.print ("Հաղորդավար` api.thingspeak.com / n "); client.print ("Միացում. փակել / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Բովանդակություն-երկարություն."); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); ուշացում (1000); } ուղարկված ++; client.stop (); }

Ամբողջական կոդը կարելի է գտնել իմ GitHub- ում ՝ NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Երբ ձեր ծածկագիրը վերբեռնվի ձեր NodeMCU- ում: Եկեք միացնենք արտաքին մարտկոցը և որոշ չափումներ կատարենք արևի տակ: Ես դնում եմ Հեռակառավարման կայանը տանիքին և սկսում տվյալների հավաքումը ThingSpeak.com- ում, ինչպես ցույց է տրված վերը նշված լուսանկարներում:

Քայլ 9: Վերջնական նշումներ

Վերջնական նշումներ
Վերջնական նշումներ

Այս ձեռնարկի հիմնական նպատակն էր ցույց տալ, թե ինչպես միացնել Raspberry Pi- ն ThingSpeak- ին: Սա հիանալի է ՝ տվյալներ գրավելու և IoT հարթակում գրանցելու համար:

Օգտվելով առիթից, մենք նաև տվյալներ ուղարկեցինք այդ հատուկ ալիքին ՝ դրանք վերցնելով հեռավոր կայանից ՝ օգտագործելով ESP8266- ը: Սա մոտեցում է, բայց ոչ լավագույնը: Քանի որ մենք ունենք «ասինխրոն» գործողություն, երբեմն, երկուսն էլ, RPi- ն և ESP8266- ը փորձում են մուտքագրել միաժամանակ (կամ փոքր ընդմիջումով) այն, ինչը հերքվում է ThingSpeak- ի կողմից: Իդեալականը կլիներ այն, որ ESP8266- ը տվյալներ ուղարկեր տեղական Raspberry Pi- ին, և վերջինը պատասխանատու լիներ բոլոր տվյալների մշակման համար: Դա անելով ՝ «Գլխավոր կայանը» (Raspberry Pi), կարող էր անել 3 բան.

  • Մուտքագրեք բոլոր տվյալները տեղական տվյալների բազայում
  • Ներկայացրեք բոլոր տվյալները տեղական վեբ էջում (օգտագործելով Flask, ինչպես ցույց է տրված վերը նշված լուսանկարում)
  • Բոլոր տվյալները միաժամանակ ուղարկելով ThingSpeak- ին:

Ապագա ձեռնարկի վրա մենք կուսումնասիրենք այդ տարբերակները:

Քայլ 10: Եզրակացություն

Եզրակացություն
Եզրակացություն

Ինչպես միշտ, ես հույս ունեմ, որ այս նախագիծը կարող է օգնել ուրիշներին գտնել իրենց ճանապարհը դեպի էլեկտրոնիկայի հետաքրքիր աշխարհ:

Մանրամասների և վերջնական ծածկագրի համար այցելեք իմ GitHub դեպոզիտարիան ՝ RPi-NodeMCU-Weather-Station

Լրացուցիչ նախագծերի համար այցելեք իմ բլոգը ՝ MJRoBot.org

Մնացեք մեզ հետ! Հաջորդ ձեռնարկը մենք հեռավոր եղանակային կայանից տվյալներ կուղարկենք կենտրոնական ՝ Raspberry Pi վեբ սերվերի հիման վրա.

Պատկեր
Պատկեր

Սալուդոս աշխարհի հարավից:

Կհանդիպենք իմ հաջորդ հրահանգի մեջ:

Շնորհակալություն, Մարսելո

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