Raspberry Pi

Изградете своя собствена метеорологична станция Raspberry Pi

Изградете своя собствена метеорологична станция Raspberry Pi
Raspberry Pi Sense Hat е добавена платка, която може да се използва с едноплатни компютри Raspberry Pi. Raspberry Pi Sense Hat има 8 × 8 LED дисплей и джойстик с 5 бутона и е оборудван със следните сензори:

  1. Жироскоп
  2. Акселерометър
  3. Магнитометър
  4. Температура
  5. Барометрично налягане
  6. Влажност

В тази статия ще ви покажа как да създадете уеб приложение, базирано на API на Python, като използвате температура, барометрично налягане, и влажност сензори на Raspberry Pi Sense Hat. За да следвате тази статия, ще ви трябва следното:

  1. Raspberry Pi 3 или Raspberry Pi 4 с мрежова свързаност.
  2. Модул Raspberry Pi Sense Hat.
  3. Микро-USB (Raspberry Pi 3) или USB Type-C (Raspberry Pi 4) захранващ адаптер.
  4. 16 GB или 32 GB microSD карта с Raspberry Pi OS.
  5. Лаптоп или настолен компютър за достъп до VNC отдалечен работен плот или SSH достъп до Raspberry Pi.

ЗАБЕЛЕЖКА: В тази статия ще се свържем с Raspberry Pi дистанционно чрез VNC или SSH, използвайки безглавата настройка на Raspberry Pi. Ако не искате да имате достъп до вашия Raspberry Pi дистанционно чрез SSH или VNC, ще трябва да свържете монитор, клавиатура и мишка към вашия Raspberry Pi.

За да научите как да мигате изображението на Raspberry Pi OS на microSD карта, моля, направете справка как да инсталирате и използвате Raspberry Pi Imager. Ако имате нужда от помощ при инсталирането на Raspberry Pi OS на вашия Raspberry Pi, прочетете Как да инсталирате Raspberry Pi OS на Raspberry Pi 4. Ако имате нужда от помощ за безглавната настройка на Raspberry Pi, проверете как да инсталирате и конфигурирате Raspberry Pi OS на Raspberry Pi 4 без външен монитор.

Свързване на Raspberry Pi Sense Hat с Raspberry Pi

Комплектът за Raspberry Pi Sense Hat се предлага с добавена платка Raspberry Pi Sense Hat, 40-пинов хедър от мъжки към женски и някои винтове и дистанционни елементи.

Преди да можете да прикрепите дъската на Sense Hat към Raspberry Pi, трябва да свържете 40-пиновия хедър към Sense Hat. Свържете мъжките щифтове на 40-пиновия мъжко-женски хедър към Sense Hat, както е показано на изображенията по-долу.

Едноплатните компютри Raspberry Pi имат 4 отвора, които могат да се използват за закрепване на допълнителни платки или кутия. За да прикрепите допълнителната платка, поставете винтове от задната страна на Raspberry Pi, както е показано на изображенията по-долу.

След това свържете дистанционер към винта.

След като добавите всичките четири винта и дистанционни елементи, вашият Raspberry Pi трябва да изглежда така, както е показано на изображението по-долу.

Свържете Raspberry Pi Sense Hat към 40-пиновия GPIO мъжки хедър на Raspberry Pi, както е показано на изображенията по-долу.

ЗАБЕЛЕЖКА: Бъдете внимателни, докато изключвате Raspberry Pi Sense Hat от Raspberry Pi 40-пинов заглавен GPIO, за да избегнете огъване на щифтовете на Raspberry Pi GPIO.

С останалите четири винта закрепете Raspberry Pi Sense Hat, както е показано на изображенията по-долу.

Включване на Raspberry Pi

След като Raspberry Pi Sense Hat е свързан с Raspberry Pi, поставете microSD картата с Raspberry Pi OS в слота за microSD карти на Raspberry Pi, свържете захранващия кабел към Raspberry Pi и го включете.

Инсталиране на библиотеката на Raspberry Pi Sense Hat Python

За да използвате Raspberry Pi Sense Hat на Raspberry Pi, смислена шапка Библиотеката Python трябва да бъде инсталирана на ОС Raspberry Pi. The смислена шапка библиотеката е достъпна в официалното хранилище на пакети на Raspberry Pi OS.

За да инсталирате Raspberry Pi смислена шапка Python библиотека на Raspberry Pi OS, първо актуализирайте кеша на хранилището на APT пакета със следната команда:

$ sudo apt актуализация

След това изпълнете следната команда:

$ sudo apt install sense-hat -y

Инсталиране на библиотеката на Flask Micro Web Framework Python

Ще използваме рамката Flask Python, за да създадем нашето приложение за времето. Можете да инсталирате Flask от официалното хранилище на пакети на Raspberry Pi OS със следната команда:

$ sudo apt инсталира python3-flask -y

Създаване на директория на проекти

Добра идея е да създадете директория на проекта, за да организирате вашите проектни файлове. За да създадете директория на проекта ~ / работа, използвайте следната команда:

$ mkdir ~ / работа

След като директорията на проекта е създадена, отидете до директорията на проекта, както следва:

$ cd ~ / работа

Тестване на Raspberry Pi Sense Hat

За да проверим дали Raspberry Pi Sense Hat работи, можем да напишем прост тестов скрипт на Python. Можете да създадете нов Python скрипт, наречен тест.py с нано текстов редактор, както следва:

$ nano тест.py

Въведете следния код в тест.py файл. Внос по ред 1 SenseHat от смисъл_хат модул, ред 3 създава a SenseHat обект и съхранява препратка в смисъл променлива, а линиите 5-6 задават цвета на всички 8 × 8 светодиода на червен. След като приключите, натиснете + х следван от Y и .

Можете да стартирате тест.py Python скрипт със следната команда:

$ python3 тест.py

8 × 8 LED матрицата трябва да свети в червен цвят, както е показано на изображението по-долу.

За да изключите светодиодите на Sense Hat, пуснете изчисти () метод без никаква стойност на цвета в тест.py Python скрипт, както е показано на екранната снимка по-долу, и стартирайте тест.py Python скрипт отново.

Светодиодите на Sense Hat сега трябва да бъдат изключени, както е показано на изображението по-долу.

Ако Sense Hat работи правилно, преминете към следващия раздел.

Получаване на данни за времето от Sense Hat

Можете да получите данни от сензора от Sense Hat много лесно, като използвате смислена шапка Python библиотека. За да извлечете данни от сензора от Sense Hat, можете да създадете нов скрипт на Python read_sensor_data.py както следва:

$ nano read_sensor_data.py

Въведете следния код в read_sensor_data.py Python файл.

от sense_hat импортиране на SenseHat
от време внос сън
смисъл = SenseHat ()
смисъл.изчисти ()
докато е вярно:
tempC = смисъл.get_temperature ()
tempF = tempC * (9/5) + 32
натиск = усет.get_pressure ()
влажност = усещане.get_huminity ()
print ("Температура:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Налягане:%.2f mb \ n "% (налягане))
print ("Влажност:%.2f %% \ n \ n "% (влажност))
сън (5)

След като приключите, натиснете + х следван от Y и .

В горния код редове 1 и 2 импортират всички необходими библиотеки, ред 4 създава a SenseHat обект, а ред 5 изключва всички светодиоди на Sense Hat с помощта на изчисти () метод. Цикълът while в ред 7 е безкраен цикъл, който ще изпълнява кода в редове 8-16 завинаги.

В ред 8, get_temperature () метод се използва за отчитане на данните за температурата (в градуси по Целзий) от сензора за влажност на Sense Hat. В ред 9 данните за температурата се преобразуват от градуси по Целзий в градуси по Фаренхайт. В ред 10, get_pressure () метод се използва за отчитане на данните за въздушното налягане (в милибари) от сензора за налягане на Sense Hat. В ред 11, get_huminity () метод се използва за отчитане на данните за влажността (в%) от сензора за влажност на Sense Hat.

Редове 13-15 се използват за отпечатване на данните на сензора на конзолата, а ред 16 се използват за изчакване 5 секунди, преди да се прочетат отново данните на сензора.

Можете да стартирате read_sensor_data.py Python скрипт, както следва:

$ python3 read_sensor_data.py

След като скриптът бъде изпълнен, данните от сензора ще бъдат отпечатани на конзолата.

След като можем да прочетем данните на сензора от Sense Hat, натиснете + ° С за спиране на програмата.

Създаване на уеб приложение на Weather Station

В този раздел ще ви покажем как да използвате уеб рамката на Python Flask, за да създадете API за времето и приложение за времето. Приложението за времето ще има достъп до API за данни за времето и ще показва данните за времето в реално време. Целият код, обсъден в този раздел, е достъпен на GitHub в shovon8 / raspberry-pi-sense-hat-weather-app.

Първо създайте a сървър.py Python скрипт в директорията на проекта, както следва:

$ nano сървър.py

Въведете следния код в сървър.py Python файл.

от колба за внос Колба
от импортиране на колба jsonify
от импортиране на колба render_template
от импортиране на колба url_for
от sense_hat импортиране на SenseHat
ап = колба (__ име__)
ап.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
смисъл = SenseHat ()
смисъл.изчисти ()
с ап.test_request_context ():
url_for ('статичен', име на файл = 'стил.css ')
url_for ('static', filename = 'app.js ')
@app.route ('/ api')
def api ():
tempC = смисъл.get_temperature ()
tempF = tempC * (9/5) + 32
натиск = усет.get_pressure ()
наляганеPsi = налягане * 0.0145038
налягане P = налягане * 100
влажност = усещане.get_huminity ()
върнете jsonify (
"температура": "C": tempC, "F": tempF,
"налягане": "mb": налягане, "hPa": налягане,
"psi": pressurePsi, "P": pressureP,
"влажност": влажност
)
@app.маршрут ('/')
def home ():
връщане render_template ('./У дома.html ')

След това натиснете + х следван от Y и за да запазите сървър.py Python скрипт.

В горния код редове 1-5 импортират всички необходими библиотеки, ред 7 създава приложение на колба, ред 11 създава обект SenseHat и ред 12 изключва всички светодиоди на Sense Hat. Ред 8 деактивира уеб кеширането за приложението Flask. Тъй като това приложение е леко, няма нужда от кеширане. Ако искате да модифицирате приложението, деактивирането на кеширането в мрежа ще направи много по-лесно тестването.

Редове 18-31 четат данните на сензора от Sense Hat и връщат данните от API във формат JSON при HTTP GET заявка в / api крайна точка на уеб сървъра. Редове 37-39 връщат началната страница на уеб приложението за времето в / крайна точка на уеб сървъра. Началната страница се визуализира от У дома.html файл, който трябва да бъде в шаблони / директория на директорията на проекта.

Редове 14-16 се използват, за да позволят достъп до стил.css и ап.js статични файлове. Тези файлове трябва да са в статичен / директория на директорията на проекта. The стил.css файл се използва за оформяне на У дома.html началната страница и ап.js файл се използва за искане на API данни от / api крайна точка и актуализирайте данните за времето в У дома.html страница на всеки 5 секунди.

Създайте статичен / и шаблони / директория в директорията на проекта, както следва:

$ mkdir -v статични, шаблони

Създавам У дома.html файл в шаблони / директория, както следва:

$ nano шаблони / начало.html

Въведете следния код в У дома.html файл.





Времето на Raspberry Pi
href = "url_for ('static', filename =" style.css ")" />



Времето на Raspberry Pi



Температура




..


..




Налягане




..


..




..


..




Влажност




..






След това натиснете + х следван от Y и за да запазите У дома.html файл.

Създавам стил.css файл в статичен / директория, както следва:

$ nano static / style.css

Въведете следните кодове в стил.css файл.

@import url ('https: // шрифтове.googleapis.com / css2?семейство = Roboto & display = swap ');
*
подплата: 0;
марж: 0;
семейство шрифтове: 'Roboto', sans-serif;

тяло
фон: # 737373;

h1
дисплей: блок;
цвят: # 79DC7B;
подравняване на текст: център;
тегло на шрифта: 400;
фон: # 000;
подплата: 0.5em 0;

h2
дисплей: блок;
фон: # 000;
цвят: #fff;
подравняване на текст: център;
тегло на шрифта: 400;
размер на шрифта: 1em;

.data-content
марж: 10px;
граница: 2px плътно черно;
граница-радиус: 5px;
фон-цвят: # 79DC7B;

.data-row
дисплей: flex;
flex-direction: ред;

.клетка с данни
ширина: 100%;
височина: 80px;
дисплей: flex;
align-items: център;
justify-content: център;
шрифт-тегло: получер;
размер на шрифта: 1.5em;
цвят: # 006902;

.data-cell: hover
фон: # FFE891;
цвят: # AA8600;
курсор: указател;

След това натиснете + х следван от Y и за да запазите стил.css файл.

Създайте ап.js файл в статичен / директория, както следва:

$ nano static / app.js

Въведете следния код в ап.js файл.

прозорец.addEventListener ('load', main);
функция main ()
функция getAPIData ()
var http = нов XMLHttpRequest ();
http.onreadystatechange = функция ()
ако това.readyState === 4 && това.статус === 200)
актуализация (JSON.разбор (това.responseText));


http.отворен ("GET", "/ api", вярно);
http.изпрати ();

актуализация на функцията (apiData)
var tempC = документ.getElementById ("tempC");
var tempF = документ.getElementById ("tempF");
var pressureMb = документ.getElementById ("pressureMb");
var pressurePsi = документ.getElementById ("pressurePsi");
var наляганеHpa = документ.getElementById ("наляганеHpa");
var наляганеP = документ.getElementById ("pressureP");
var влажност = документ.getElementById ("влажност");
tempC.innerHTML = parseFloat (apiData.температура.° С).до Фиксирана (2) + "° C";
tempF.innerHTML = parseFloat (apiData.температура.Е).до Fixed (2) + "° F";
наляганеMb.innerHTML = parseFloat (apiData.натиск.mb).toFixed (2) + "mb";
налягане Psi.innerHTML = parseFloat (apiData.натиск.psi).toFixed (2) + "psi";
наляганеHpa.innerHTML = parseFloat (apiData.натиск.hPa).toFixed (2) + "hPa";
налягане P.innerHTML = parseFloat (apiData.натиск.P).toFixed (2) + "P";
влажност.innerHTML = parseFloat (apiData.влажност).toFixed (2) + "%";

функция приложение ()
прозорец.setInterval (function ()
getAPIData ();
, 5000);

приложение ();

След това натиснете + х следван от Y и за да запазите ап.js файл.

Тук ред 1 изпълнява главен () функция, когато уеб страницата приключи зареждането. В главен () функция, getAPIData () функция извлича данните от API за времето с помощта на AJAX и извиква актуализация () функция (в ред 10), след като данните са извлечени успешно. The актуализация () функция актуализира елемента на уеб страницата, използвайки данните на API.

В ред 20, документ.getElementById () метод се използва за получаване на препратка към елемента на уеб страницата с идентификатора tempC. Ред 28 се използва за замяна на съдържанието на елемента на уеб страницата, който има идентификатора tempC с температурата (в Целзий) от API. По същия начин съдържанието на всички уеб елементи (редове 21-26) се заменя със съответните им API данни.

В приложение () функция, getAPIData () се извиква на всеки 5 секунди (5000 милисекунди), за да актуализира данните за времето в приложението за времето. И накрая, в ред 46, приложение () функция се изпълнява.

За да тествате уеб приложението, въведете следната команда:

$ FLASK_APP = сървър.py колба тичане --host = 0.0.0.0

Приложението за времето трябва да работи на порт 5000 (по подразбиране).

За да проверите дали Weather API работи, изпълнете следната команда:

$ curl -s http: // localhost: 5000 / api | json_pp

Както можете да видите, данните на Weather API се отпечатват на конзолата. Следователно API работи.

За да тествате приложението Weather, посетете http: // localhost: 5000 от уеб браузър Chromium. Приложението Weather трябва да се зареди в уеб браузъра, но в началото не трябва да се показват данни за времето.

След няколко секунди приложението за времето трябва да завърши извличането на данните за времето от API и да ги покаже.

Във всеки момент можете да натиснете + ° С за спиране на уеб сървъра.

Създаване на Systemd услуга за уеб приложението Weather

В този раздел ще ви покажем как да създадете системен файл с услуги за приложението за времето, така че той автоматично да стартира при зареждане.

Първо създайте a метеорологична станция.обслужване файл в директорията на вашия проект, както следва:

$ нано метеорологична станция.обслужване

Въведете следните редове код в метеорологична станция.обслужване файл.

[Мерна единица]
Описание = Уеб приложение за метеорологична станция Raspberry Pi, използващо сензорна шапка Raspberry Pi
След = мрежа.мишена
[Обслужване]
WorkingDirectory = / home / pi / work
Околна среда = FLASK_APP = сървър.py
Околна среда = FLASK_ENV = производство
ExecStart = / usr / bin / flask run --host = 0.0.0.0
StandardOutput = наследяване
StandardError = наследяване
Рестартиране = винаги
Потребител = pi
[Инсталирай]
WantedBy = многопотребителски.мишена

След това натиснете + х следван от Y и за да запазите метеорологична станция.обслужване файл.

Копирайте метеорологична станция.обслужване файл в / etc / systemd / system / директория със следната команда:

$ sudo cp -v метеорологична станция.service / etc / systemd / system /

Презаредете системните демони, за да влязат в сила промените, както следва:

$ sudo systemctl daemon-reload

The метеорологична станция Услугата systemd трябва да е неактивна в момента, както е показано на екранната снимка по-долу.

$ sudo systemctl метеорологична станция.обслужване

Стартирайте метеорологична станция услуга със следната команда:

$ sudo systemctl стартира метеорологична станция.обслужване

Както можете да видите, метеорологична станция услугата вече работи.

$ sudo systemctl метеорологична станция.обслужване

Сега, когато метеорологична станция услугата работи, можете да я добавите към стартирането на системата на Raspberry Pi OS със следната команда:

$ sudo systemctl активира метеорологичната станция.обслужване

Рестартирайте Raspberry Pi със следната команда:

$ sudo рестартиране

След като вашите Raspberry Pi стартират, метеорологична станция услугата трябва да работи, както е показано на екранната снимка по-долу.

$ sudo systemctl метеорологична станция.обслужване

Достъп до приложението Weather от други устройства

За да осъществите достъп до приложението за времето от други устройства във вашата домашна мрежа, трябва да знаете IP адреса на вашия Raspberry Pi. Можете да намерите IP адреса на вашия Raspberry Pi 4 от уеб интерфейса за управление на вашия домашен рутер. В нашия случай IP адресът е 192.168.0.103, но този адрес ще бъде различен за вас, така че не забравяйте да замените този адрес с вашия във всички следващи стъпки.

Ако имате достъп до конзолата Raspberry Pi, можете да изпълните следната команда, за да намерите и IP адреса.

$ hostname -I

След като знаете IP адреса на вашия Raspberry Pi, можете да получите достъп до него от всяко устройство в домашната мрежа. Както е показано на екранната снимка по-долу, имаме достъп до приложението за времето от смартфон с Android.

Заключение

В тази статия ви показахме как да използвате сензорната шапка Raspberry Pi за изграждане на метеорологична станция Raspberry Pi. Използвахме смислена шапка Python библиотека за извличане на данни за времето от Raspberry Pi Sense Hat. След това използвахме микро уеб рамката Flask Python, за да създадем API за времето и уеб приложение. Уеб приложението получава данни за времето от API за времето на всеки 5 секунди, за да поддържа уеб приложението актуално с най-новите данни за времето.

Курсорът скача или се движи произволно, докато пишете в Windows 10
Ако установите, че курсорът на вашата мишка скача или се движи самостоятелно, автоматично, произволно, докато пишете в лаптоп или компютър на Windows,...
Как да обърнете посоката на превъртане на мишката и тъчпада в Windows 10
Мишка и Тъчпадs не само правят изчисленията лесни, но и по-ефективни и отнемат по-малко време. Не можем да си представим живот без тези устройства, но...
Как да промените курсора на мишката и размера на курсора, цвета и схемата в Windows 10
Показалецът на мишката и курсорът в Windows 10 са много важни аспекти на операционната система. Това може да се каже и за други операционни системи, т...