Բովանդակություն:
- Քայլ 1. BoM - նյութերի հաշիվ
- Քայլ 2: Instերմաստիճանի և խոնավության ցուցիչի տեղադրում
- Քայլ 3. Տեղադրեք DS18B20 - ջերմաստիճանի տվիչ
- Քայլ 4: BMP180- ի տեղադրում
- Քայլ 5. Եղանակի և բարձրության չափում BMP180- ով
- Քայլ 6. Ամբողջական HW
- Քայլ 7: Տվյալների ուղարկում ThingSpeak- ին
- Քայլ 8. Հեռակա տվյալների ուղարկում ThingSpeak- ին ՝ օգտագործելով ESP8266
- Քայլ 9: Վերջնական նշումներ
- Քայլ 10: Եզրակացություն
Video: IoT եղանակային կայան RPi- ով և ESP8266- ով ՝ 10 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Նախորդ ձեռնարկների վրա մենք խաղում էինք NodeMCU- ի, սենսորների հետ և սովորում, թե ինչպես գրավել և մուտքագրել տվյալները ThingSpeak (բաների ինտերնետ (IoT) հարթակում, որը թույլ է տալիս հավաքել և պահել սենսորային տվյալները ամպի մեջ և մշակել IoT ծրագրեր).
IOT MASE EASY.
Այս նոր ձեռնարկի միջոցով մենք կսովորենք, թե ինչպես անել նույնը, բայց այս պահին ՝ օգտագործելով Raspberry Pi- ն ՝ մի քանի տարբեր սենսորներից տվյալներ գրավելու համար, ինչպես նաև սարքերի և վեբի միջև հաղորդակցության տարբեր եղանակների ուսումնասիրություն.
Սենսորներ և կոմիկականացման տեսակը.
- DHT22 (ջերմաստիճան և խոնավություն) ==> Թվային հաղորդակցություն
- BMP180 (ջերմաստիճան և ճնշում) ==> I2C արձանագրություն
- DS18B20 (ջերմաստիճան) ==> 1-լարային արձանագրություն
Արգելափակման դիագրամը ցույց է տալիս, թե ինչ ենք ստանալու վերջում այս նախագծով.
Քայլ 1. BoM - նյութերի հաշիվ
- Raspberry Pi V3 - 32,00 ԱՄՆ դոլար
- DHT22 peratերմաստիճանի եւ հարաբերական խոնավության ցուցիչ `9.95 ԱՄՆ դոլար
- Ռեզիստոր 4K7 օմ
- DS18B20 Անջրանցիկ ջերմաստիճանի տվիչ - 5.95 ԱՄՆ դոլար
- Ռեզիստոր 4K7 օմ
- BMP180 Բարոմետրիկ ճնշման, ջերմաստիճանի և բարձրության ցուցիչ ՝ 6,99 ԱՄՆ դոլար
Քայլ 2: 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 - Vcc ==> 3.3V
- Պին 2 - Տվյալներ ==> GPIO 16
- Pin 3 - Միացեք
- 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 տվիչի անջրանցիկ տարբերակ: Այն շատ օգտակար է հեռավոր ջերմաստիճանի համար խոնավ պայմաններում, օրինակ `խոնավ հողի վրա: Սենսորը մեկուսացված է և կարող է չափումներ կատարել մինչև 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- ը 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- ով
Եկեք ժամանակ հատկացնենք և մի փոքր ավելին հասկանանք, թե ինչ ենք ստանալու, 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
Քայլ 7: Տվյալների ուղարկում 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
Այս քայլի համար մենք կօգտագործենք նույն 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 վեբ սերվերի հիման վրա.
Սալուդոս աշխարհի հարավից:
Կհանդիպենք իմ հաջորդ հրահանգի մեջ:
Շնորհակալություն, Մարսելո
Խորհուրդ ենք տալիս:
NaTaLia եղանակային կայան. Arduino արևային էներգիայով աշխատող եղանակային կայանը կատարվել է ճիշտ ճանապարհով. 8 քայլ (նկարներով)
NaTaLia եղանակային կայան. Arduino արևային էներգիայով աշխատող եղանակային կայանը կատարվեց ճիշտ ճանապարհով. 2 տարբեր վայրերում 1 տարվա հաջող աշխատանքից հետո ես կիսում եմ իմ արևային էներգիայով աշխատող եղանակային կայանի նախագծի ծրագրերը և բացատրում, թե ինչպես այն վերածվեց համակարգի, որն իսկապես կարող է գոյատևել երկար ժամանակ: արևային էներգիայի ժամանակաշրջաններ: Եթե հետևեք
IoT ESP8266- ի վրա հիմնված եղանակային կայան. 6 քայլ
IoT ESP8266 վրա հիմնված եղանակային կայան. Wantանկանու՞մ եք կառուցել եղանակային կայանի նախագիծ ՝ առանց որևէ սենսոր օգտագործելու, և եղանակի մասին տեղեկություններ ստանալ ամբողջ աշխարհից: Օգտագործելով OpenWeatherMap- ը, այն դառնում է իսկական խնդիր
DIY եղանակային կայան և WiFi սենսորային կայան. 7 քայլ (նկարներով)
DIY եղանակային կայան և WiFi սենսորային կայան. Այս նախագծում ես ձեզ ցույց կտամ, թե ինչպես կարելի է եղանակային կայան ստեղծել WiFi սենսորային կայանի հետ միասին: Սենսորային կայանը չափում է տեղական ջերմաստիճանի և խոնավության տվյալները և այն WiFi- ի միջոցով ուղարկում է եղանակային կայանին: Օդերևութաբանական կայանն այնուհետև ցուցադրում է
ESP8266 NodeMCU + LM35 + Blynk (IOT եղանակային կայան/ թվային ջերմաստիճանի տվիչ). 4 քայլ
ESP8266 NodeMCU + LM35 + Blynk (IOT եղանակային կայան/ թվային ջերմաստիճանի տվիչ). Բարև տղերք: Այս Ուղեցույցում մենք սովորելու ենք, թե ինչպես միացնել LM35 սենսորը NodeMCU- ին և ցուցադրել այդ ջերմաստիճանի տվյալները ինտերնետում սմարթֆոնով Blynk հավելվածով: (Նաև այս նախագծում մենք կօգտագործենք SuperChart վիջեթը Bl
Acurite 5 in 1 եղանակային կայան ՝ օգտագործելով Raspberry Pi և Weewx (այլ եղանակային կայաններ համատեղելի են). 5 քայլ (նկարներով)
Acurite 5 in 1 եղանակային կայան ՝ օգտագործելով Raspberry Pi և Weewx (այլ եղանակային կայաններ համատեղելի են). Երբ ես գնել էի Acurite 5 in 1 օդերևութաբանական կայանը, ես ցանկանում էի, որ կարողանայի ստուգել եղանակը իմ տանը, երբ ես հեռու էի: Երբ տուն հասա և տեղադրեցի, հասկացա, որ կամ պետք է միացնեմ համակարգչին կամ գնեմ նրանց խելացի հանգույցը