Изградите своју метеоролошку станицу Распберри Пи

Build Your Own Raspberry Pi Weather Station



Распберри Пи Сенсе Хат је додатна плоча која се може користити са рачунарима са једном плочом Распберри Пи. Распберри Пи Сенсе Хат има 8 × 8 ЛЕД екран и џојстик са 5 тастера, а опремљен је следећим сензорима:

  1. Жироскоп
  2. Акцелерометар
  3. Магнетометар
  4. Температуре
  5. Притисак на барометру
  6. Влажност

У овом чланку ћу вам показати како да креирате веб апликацију метеоролошке станице засновану на Питхон АПИ -ју помоћу температура , притисак на барометру , и влажност сензори Распберри Пи Сенсе шешира. Да бисте пратили овај чланак, биће вам потребно следеће:







  1. Распберри Пи 3 или Распберри Пи 4 са мрежним повезивањем.
  2. Модул Распберри Пи Сенсе Хат.
  3. Микро-УСБ (Распберри Пи 3) или УСБ Типе-Ц (Распберри Пи 4) адаптер за напајање.
  4. МицроСД картица од 16 ГБ или 32 ГБ са Распберри Пи ОС.
  5. Лаптоп или стони рачунар за ВНЦ приступ удаљеној радној површини или ССХ приступ Распберри Пи -у.

БЕЛЕШКА: У овом чланку ћемо се даљински повезати на Распберри Пи путем ВНЦ -а или ССХ -а помоћу безглавног подешавања Распберри Пи -а. Ако не желите да даљински приступите свом Распберри Пи -у путем ССХ или ВНЦ -а, мораћете да повежете монитор, тастатуру и миш на свој Распберри Пи.



Да бисте сазнали како да флешујете Распберри Пи ОС слику на мицроСД картицу, молимо вас да погледате Како инсталирати и користити Распберри Пи Имагер. Ако вам је потребна помоћ при инсталирању Распберри Пи ОС на ваш Распберри Пи, прочитајте Како инсталирати Распберри Пи ОС на Распберри Пи 4 . Ако вам је потребна помоћ око безглавог подешавања Распберри Пи, погледајте Како инсталирати и конфигурисати Распберри Пи ОС на Распберри Пи 4 без спољног монитора.



Повезивање Распберри Пи Сенсе Хат са Распберри Пи

Распберри Пи Сенсе Хат комплет долази са додатном плочом Распберри Пи Сенсе Хат, 40-пинским заглављем мушко-женско, и неким вијцима и одстојницима.





Пре него што можете да причврстите плочу Сенсе Хат на Распберри Пи, морате да повежете 40-пинско заглавље на Сенсе Хат. Спојите мушке иглице 40-пинског мушко-женског заглавља на Сенсе Хат као што је приказано на доњим сликама.



Рачунари са једном плочом Распберри Пи имају 4 рупе које се могу користити за причвршћивање додатних плоча или кућишта. Да бисте причврстили додатну плочу, уметните вијке са задње стране Распберри Пи-а, као што је приказано на доњим сликама.

Затим спојите одстојник на завртањ.

Када додате сва четири вијка и одстојнике, ваш Распберри Пи би требао изгледати онако како је приказано на доњој слици.

Повежите Распберри Пи Сенсе Хат са 40-пинским ГПИО мушким заглављем Распберри Пи, као што је приказано на доњим сликама.

БЕЛЕШКА: Будите опрезни док одвајате Распберри Пи Сенсе Хат из Распберри Пи 40-пинског ГПИО заглавља како бисте избегли савијање пинова Распберри Пи ГПИО.

Са четири преостала завртња, причврстите Распберри Пи Сенсе Хат, као што је приказано на доњим сликама.

Укључује Распберри Пи

Сада када је Распберри Пи Сенсе Хат повезан са Распберри Пи, уметните мицроСД картицу са Распберри Пи ОС у утор за мицроСД картицу на Распберри Пи, повежите кабл за напајање са Распберри Пи и укључите га.

Инсталирање Распберри Пи Сенсе Хат Питхон библиотеке

Да бисте користили Распберри Пи Сенсе Хат на Распберри Пи, чулни шешир Питхон библиотека мора бити инсталирана на Распберри Пи ОС. Тхе чулни шешир библиотека је доступна у званичном спремишту пакета Распберри Пи ОС.

Да бисте инсталирали Распберри Пи чулни шешир Питхон библиотека на Распберри Пи ОС -у, прво ажурирајте кеш спремишта пакета АПТ следећом командом:

$ судо апт упдате

Затим покрените следећу команду:

$ судо апт инсталл сенсе -хат -и

Инсталирање Питхон библиотеке Фласк Мицро Веб Фрамеворк

Користићемо Фласк Питхон фрамеворк за креирање наше временске апликације. Фласк можете инсталирати из званичног спремишта пакета Распберри Пи ОС помоћу следеће команде:

$ судо апт инсталл питхон3 -фласк -и

Креирање директоријума пројеката

Било би добро створити директориј пројекта за организирање датотека пројекта. Да бисте креирали директоријум пројекта ~/рад , користите следећу команду:

$ мкдир ~/рад

Када се директориј пројекта креира, идите до директорија пројекта на сљедећи начин:

$ цд ~/рад

Тестирање шешира Распберри Пи Сенсе

Да бисмо проверили да ли Распберри Пи Сенсе Хат ради, можемо написати једноставан тест Питхон скрипте. Можете креирати нову Питхон скрипту под називом тест.пи са нано уређивач текста на следећи начин:

$ нано тест.пи

Унесите следећи код у тест.пи филе. Линија 1 увози СенсеХат од сенсе_хат модул, ред 3 ствара а СенсеХат објекта и чува референцу у смисла променљива, а линије 5–6 постављају боју свих 8 × 8 ЛЕД диода у црвену. Када завршите, притисните + Икс затим И и .

Можете покренути тест.пи Питхон скрипта са следећом командом:

$ питхон3 тест.пи

ЛЕД матрица 8 × 8 би требало да светли црвеном бојом као што је приказано на доњој слици.

Да бисте искључили ЛЕД диоде Сенсе Хат -а, покрените јасно() метод без вредности боје у тест.пи Питхон скрипту, као што је приказано на слици испод, и покрените тест.пи Поново Питхон скрипта.

ЛЕД диоде Сенсе Хат -а би сада требале бити искључене, као што је приказано на доњој слици.

Ако Сенсе Хат ради исправно, пређите на следећи одељак.

Добијање временских података из Сенсе Хат -а

Можете лако добити податке сензора из Сенсе Хат -а помоћу чулни шешир Питхон библиотека. Да бисте преузели податке сензора из Сенсе Хат -а, можете да креирате нову Питхон скрипту реад_сенсор_дата.пи као што следи:

$ нано реад_сенсор_дата.пи

Унесите следећи код у реад_сенсор_дата.пи Питхон датотека.

фромсенсе_хатувозСенсеХат
фром време увозспавај
смисла=СенсеХат()
смисла.јасно()
док Истина:
темпЦ=смисла.гет_температуре()
темпФ=темпЦ *(9/5)+32
притисак=смисла.гет_прессуре()
влажност=смисла.гет_хумидити()

принт('Температура: %.2ф ° Ц/ %. 2ф ° Ф н'%(темпЦ,темпФ))
принт('Притисак: %.2ф мб н'%(притисак))
принт('Влажност:%.2ф %% н н'%(влажност))
спавај(5)

Када завршите, притисните + Икс затим И и .

У горњем коду, редови 1 и 2 увозе све потребне библиотеке, ред 4 ствара а СенсеХат објект, а линија 5 искључује све ЛЕД диоде Сенсе Хат -а помоћу јасно() метода. Док петља у реду 7 је бесконачна петља која ће заувек покретати код у редовима 8–16.

У ретку 8, гет_температуре () метода се користи за очитавање података о температури (у степенима Целзијуса) са сензора влажности Сенсе Хат -а. У линији 9, подаци о температури се конвертују из степени Целзијуса у степене Фаренхајта. У реду 10, гет_прессуре () метода се користи за очитавање података о ваздушном притиску (у милибарима) са сензора притиска Сенсе Хат -а. У реду 11, гет_хумидити () метода се користи за очитавање података о влажности (у %) са сензора влажности Сенсе Хат -а.

Редови 13–15 се користе за штампање података сензора на конзоли, а ред 16 се користи за чекање 5 секунди пре поновног читања података сензора.

Можете покренути реад_сенсор_дата.пи Питхон скрипта на следећи начин:

$ питхон3 реад_сенсор_дата.пи

Када се скрипта покрене, подаци сензора ће се одштампати на конзоли.

Сада када можемо прочитати податке сензора са Сенсе Хат -а, притисните + Ц. да бисте зауставили програм.

Креирање веб апликације метеоролошке станице

У овом одељку ћемо вам показати како да користите веб оквир Питхон Фласк за креирање временског АПИ -ја и временске апликације. Временска апликација ће приступити АПИ -ју временских података и приказивати временске податке у реалном времену. Сав код о којем се говори у овом одељку доступан је на ГитХуб -у на адреси сховон8 / малина-пи-сенсе-хат-временска-апликација .

Прво креирајте а сервер.пи Питхон скрипта у директоријуму пројекта на следећи начин:

$ нано сервер.пи

Унесите следећи код у сервер.пи Питхон датотека.

фромбоцаувозФласк
фромбоцаувозјсонифи
фромбоцаувозрендер_темплате
фромбоцаувозурл_фор
фромсенсе_хатувозСенсеХат
апликација=Фласк(__наме__)
апликација.цонфиг[„СЕНД_ФИЛЕ_МАКС_АГЕ_ДЕФАУЛТ“] = 0
смисла=СенсеХат()
смисла.јасно()
саапликација.тест_рекуест_цонтект():
урл_фор('статичан',назив документа='стиле.цсс')
урл_фор('статичан',назив документа='апп.јс')
@апликација.рута('/ватра')
дефватра():
темпЦ=смисла.гет_температуре()
темпФ=темпЦ *(9/5)+32
притисак=смисла.гет_прессуре()
прессуреПси=притисак *0.0145038
притисакП=притисак *100
влажност=смисла.гет_хумидити()

повратакјсонифи({
'температура':{ 'Ц': темпЦ, 'Ф': темпФ},
'притисак':{ 'мб': притисак, 'хПа': притисак,
'пси': прессуреПси, 'П': притисакП},
'влажност': влажност
})
@апликација.рута('/')
дефкућа():
повратакрендер_темплате('./хоме.хтмл')

Затим притисните + Икс затим И и да бисте сачували сервер.пи Питхон скрипта.

У горњем коду, редови 1–5 увозе све потребне библиотеке, ред 7 ствара апликацију Фласк, ред 11 ствара објект СенсеХат, а ред 12 искључује све ЛЕД диоде Сенсе Хат -а. Ред 8 онемогућава веб кеширање за апликацију Фласк. Пошто је ова апликација лагана, нема потребе за кеширањем. Ако желите да измените апликацију, онемогућавање веб кеширања ће знатно олакшати тестирање.

Редови 18–31 читају податке сензора са Сенсе Хат -а и враћају АПИ податке у ЈСОН формату на ХТТП ГЕТ захтеву у /ватра крајња тачка веб сервера. Линије 37–39 приказују почетну страницу веб апликације за временску прогнозу на / крајња тачка веб сервера. Почетна страница се приказује из хоме.хтмл датотеку, која би требала бити у шаблони/ директоријум директоријума пројекта.

Линије 14–16 се користе за омогућавање приступа стиле.цсс и апп.јс статичке датотеке. Ове датотеке треба да буду у статички/ директоријум директоријума пројекта. Тхе стиле.цсс датотека се користи за обликовање хоме.хтмл почетну страницу и апп.јс датотека се користи за тражење АПИ података од /ватра крајњу тачку и ажурирати временске податке на хоме.хтмл страница сваких 5 секунди.

Креирајте статички/ и шаблони/ директоријуму у директоријуму пројекта на следећи начин:

$ мкдир -в {статиц, темплатес}

Створити хоме.хтмл датотеку у шаблони/ именик на следећи начин:

$ нано предлошци/хоме.хтмл

Унесите следећи код у хоме.хтмл филе.


< хтмл >
< глава >
< мета име='виевпорт' садржај='видтх = девице-видтх, инитиал-сцале = 1.0'>
< наслов >Временска станица Распберри Пи</ наслов >
< линк рел=„стилска листа“ тип='тект/цсс'
хреф='{{урл_фор (' статиц ', филенаме =' стиле.цсс ')}}'/>
</ глава >
< тело >
< див ид='садржај'>
< х1 >Временска станица Распберри Пи</ х1 >

< див класа='дата-цонтент'>
< х2 >Температуре</ х2 >
< див класа='дата-ров'>
< див класа='ћелија података' ид='темпЦ'>
...
</ див >
< див класа='ћелија података' ид='темпФ'>
...
</ див >
</ див >
</ див >

< див класа='дата-цонтент'>
< х2 >Притисак</ х2 >
< див класа='дата-ров'>
< див класа='ћелија података' ид='прессуреМб'>
...
</ див >
< див класа='ћелија података' ид='прессуреПси'>
...
</ див >
</ див >
< див класа='дата-ров'>
< див класа='ћелија података' ид='прессуреХпа'>
...
</ див >
< див класа='ћелија података' ид='прессуреП'>
...
</ див >
</ див >
</ див >

< див класа='дата-цонтент'>
< х2 >Влажност</ х2 >
< див класа='дата-ров'>
< див класа='ћелија података' ид='влажност'>
...
</ див >
</ див >
</ див >
</ див >

< скрипта тип='тект/јавасцрипт' срц='{{урл_фор (' статиц ', филенаме =' апп.јс ')}}'></ скрипта >
</ тело >
</ хтмл >

Затим притисните + Икс затим И и да бисте сачували хоме.хтмл филе.

Створити стиле.цсс датотеку у статички/ именик на следећи начин:

$ нано статиц/стиле.цсс

Унесите следеће кодове у стиле.цсс филе.

@увоз урл('хттпс://фонтс.гооглеапис.цом/цсс2?фамили=Робото&дисплаи=свап');
* {
паддинг: 0;
маржа: 0;
породица фонтова: 'Робот', Санс Сериф;
}
тело{
бацкгроунд: # 737373;
}
х1{
приказ: блокирати;
боја: #79ДЦ7Б;
Поравнање текста: центар;
фонт-веигхт: 400;
бацкгроунд: # 000;
паддинг: 0.5ем 0;
}
х2{
приказ: блокирати;
бацкгроунд: # 000;
боја: #ффф;
Поравнање текста: центар;
фонт-веигхт: 400;
фонт-сизе: 1ем;
}
.дата-цонтент {
маржа: 10пк;
граница: 2пк чврст црн;
граница-полупречник: 5пк;
боја позадине: #79ДЦ7Б;
}
.дата-ров {
приказ:флек;
флек-дирецтион:ред;
}
.дата-ћелија {
ширина: 100%;
висина: 80пк;
приказ:флек;
алигн-итемс: центар;
оправдати-садржај: центар;
фонт-веигхт: одважан;
фонт-сизе: 1.5ем;
боја: # 006902;
}
.дата-ћелија:лебдети {
бацкгроунд: # ФФЕ891;
боја: # АА8600;
курсор: показивач;
}

Затим притисните + Икс затим И и да бисте сачували стиле.цсс филе.

Креирајте апп.јс датотеку у статички/ именик на следећи начин:

$ нано статиц/апп.јс

Унесите следећи код у апп.јс филе.

прозор.аддЕвентЛистенер('учитавање',главни);
функцијаглавни() {
функцијагетАПИДата() {
гдехттп= НоваКСМЛХттпРекуест();

хттп.онреадистатецханге = функција() {
ако(ово.реадиСтате === 4 && ово.статус === 200) {
ажурирање(ЈСОН.рашчланити(ово.респонсеТект));
}
}

хттп.отворен('ДОБИТИ', '/ватра', истина);
хттп.послати();
}


функцијаажурирање(апиДата) {
гдетемпЦ=документ.гетЕлементБиИд('темпЦ');
гдетемпФ=документ.гетЕлементБиИд('темпФ');
гдепрессуреМб=документ.гетЕлементБиИд('прессуреМб');
гдепрессуреПси=документ.гетЕлементБиИд('прессуреПси');
гдепритисакХпа=документ.гетЕлементБиИд('прессуреХпа');
гдепритисакП=документ.гетЕлементБиИд('прессуреП');
гдевлажност=документ.гетЕлементБиИд('влажност');

темпЦ.иннерХТМЛ =парсеФлоат(апиДата.температура.Ц.).тоФикед(2) + '° Ц';
темпФ.иннерХТМЛ =парсеФлоат(апиДата.температура.Ф.).тоФикед(2) + '° Ф';

прессуреМб.иннерХТМЛ =парсеФлоат(апиДата.притисак.мб).тоФикед(2) + 'мб';
прессуреПси.иннерХТМЛ =парсеФлоат(апиДата.притисак.пси).тоФикед(2) + 'пси';
притисакХпа.иннерХТМЛ =парсеФлоат(апиДата.притисак.хПа).тоФикед(2) + 'хПа';
притисакП.иннерХТМЛ =парсеФлоат(апиДата.притисак.П).тоФикед(2) + 'П';

влажност.иннерХТМЛ =парсеФлоат(апиДата.влажност).тоФикед(2) + '%';
}


функцијаапликација() {
прозор.сетИнтервал(функција() {
гетАПИДата();
}, 5000);
}

апликација();
}

Затим притисните + Икс затим И и да бисте сачували апп.јс филе.

Овде линија 1 води главни() функција када се веб страница заврши са учитавањем. У главни() функција, гетАПИДата () функција преузима податке временског АПИ -ја помоћу АЈАКС -а и позива датотеку ажурирање() функцију (у реду 10) након што су подаци успешно дохваћени. Тхе ажурирање() функција ажурира елемент веб странице помоћу података АПИ.

У реду 20, доцумент.гетЕлементБиИд () метода се користи за добијање референце елемента веб странице са ид -ом темпЦ . Ред 28 се користи за замену садржаја елемента веб странице који има ид темпЦ са температуром (у Целзијусима) из АПИ -ја. На исти начин, садржај свих веб елемената (редови 21-26) замењен је одговарајућим АПИ подацима.

У апликација() функција, гетАПИДата () се позива сваких 5 секунди (5000 милисекунди) да би се ажурирали временски подаци у апликацији за време. Коначно, у реду 46, апликација() функција се извршава.

Да бисте тестирали веб апликацију, унесите следећу команду:

$ ФЛАСК_АПП = сервер.пи фласк рун --хост = 0.0.0.0

Временска апликација би требало да ради на порту 5000 (подразумевано).

Да бисте проверили да ли Веатхер Веатхер ради, покрените следећу команду:

$ цурл -с хттп: // лоцалхост: 5000/апи | јсон_пп

Као што видите, подаци Веатхер АПИ -ја се штампају на конзоли. Због тога АПИ функционише.

Да бисте тестирали апликацију Веатхер, посетите хттп: // лоцалхост: 5000 из веб прегледача Цхромиум. Апликацију Веатхер требало би учитати у веб прегледач, али у почетку не би требало приказивати временске податке.

Након неколико секунди, апликација за временску прогнозу би требала довршити преузимање временских података из АПИ -ја и приказати их.

У било ком тренутку можете притиснути + Ц. да бисте зауставили веб сервер.

Креирање Системд услуге за веб апликацију Веатхер

У овом одељку ћемо вам показати како да креирате системску сервисну датотеку за временску апликацију тако да се аутоматски покреће при покретању.

Прво креирајте а метеоролошка станица датотеку у директоријуму вашег пројекта на следећи начин:

$ нано веатхер-статион.сервице

Унесите следеће редове кода у метеоролошка станица филе.

[Јединица]
Опис = Веб апликација Распберри Пи Веатхер Статион користећи Распберри Пи Сенсе Хат
Афтер = нетворк.таргет

[Услуга]
ВоркингДирецтори =/хоме/пи/ворк
Окружење = ФЛАСК_АПП = сервер.пи
Окружење = ФЛАСК_ЕНВ = производња
ЕкецСтарт =/уср/бин/фласк рун --хост = 0.0.0.0
СтандардОутпут = наследити
СтандардЕррор = наследити
Поново покрени = увек
Корисник = пи

[Инсталирај]
ВантедБи = вишекориснички циљ

Затим притисните + Икс затим И и да бисте сачували метеоролошка станица филе.

Копирајте метеоролошка станица датотеку у /етц/системд/систем/ директоријум са следећом командом:

$ судо цп -в веатхер -статион.сервице/етц/системд/систем/

Поново учитајте системске демоне да би промене ступиле на снагу на следећи начин:

$ судо системцтл даемон-релоад

Тхе метеоролошка станица системд услуга би тренутно требала бити неактивна, као што је приказано на слици испод.

$ судо системцтл статус веатхер-статион.сервице

Покрените метеоролошка станица сервис са следећом командом:

$ судо системцтл старт веатхер-статион.сервице

Као што видите, метеоролошка станица сервис је сада покренут.

$ судо системцтл статус веатхер-статион.сервице

Сада када је метеоролошка станица услуга ради, можете је додати у покретање система Распберри Пи ОС следећом командом:

$ судо системцтл енабле веатхер-статион.сервице

Поново покрените Распберри Пи следећом командом:

$ судо поновно покретање

Једном када се ваше Распберри Пи подигну, метеоролошка станица услуга би требала бити покренута, као што је приказано на слици испод.

$ судо системцтл статус веатхер-статион.сервице

Приступ апликацији Веатхер са других уређаја

Да бисте приступили апликацији за временску прогнозу са других уређаја у вашој кућној мрежи, морате знати ИП адресу вашег Распберри Пи. ИП адресу вашег Распберри Пи 4 можете пронаћи из интерфејса за веб управљање вашег кућног рутера. У нашем случају, ИП адреса је 192.168.0.103, али ова адреса ће за вас бити другачија, па у свим наредним корацима обавезно замените ову адресу својом.

Ако имате приступ Распберри Пи конзоли, можете покренути следећу команду да бисте пронашли и ИП адресу.

$ хостнаме -И

Када сазнате ИП адресу вашег Распберри Пи -а, можете јој приступити са било ког уређаја у вашој кућној мрежи. Као што је приказано на слици испод, апликацији за временску прогнозу приступили смо са Андроид паметног телефона.

Закључак

У овом чланку смо вам показали како да користите Распберри Пи Сенсе Хат за изградњу временске станице Распберри Пи. Користили смо чулни шешир Питхон библиотека за издвајање временских података из Распберри Пи Сенсе Хат -а. Затим смо користили микро веб оквир Фласк Питхон за креирање временског АПИ -ја и веб апликације. Веб апликација сваких 5 секунди добија временске податке из временског АПИ -ја како би веб апликација била у току са најновијим временским подацима.