Raspberry Pi

Создайте свою собственную метеостанцию ​​Raspberry Pi

Создайте свою собственную метеостанцию ​​Raspberry Pi
Raspberry Pi Sense Hat - это дополнительная плата, которую можно использовать с одноплатными компьютерами Raspberry Pi. Raspberry Pi Sense Hat имеет светодиодный дисплей 8 × 8 и 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. Адаптер питания micro-USB (Raspberry Pi 3) или USB Type-C (Raspberry Pi 4).
  4. Карта памяти microSD на 16 или 32 ГБ с ОС Raspberry Pi.
  5. Ноутбук или настольный компьютер для доступа к удаленному рабочему столу VNC или доступа SSH к Raspberry Pi.

ПРИМЕЧАНИЕ: В этой статье мы подключимся к Raspberry Pi удаленно через VNC или SSH, используя безголовую настройку Raspberry Pi. Если вы не хотите получать доступ к Raspberry Pi удаленно через SSH или VNC, вам нужно будет подключить к Raspberry Pi монитор, клавиатуру и мышь.

Чтобы узнать, как прошить образ ОС Raspberry Pi на карту microSD, обратитесь к разделу «Как установить и использовать Raspberry Pi Imager». Если вам нужна помощь в установке ОС Raspberry Pi на Raspberry Pi, прочтите Как установить ОС Raspberry Pi на Raspberry Pi 4. Если вам нужна помощь в настройке Raspberry Pi без подключения к голове, ознакомьтесь с разделом «Как установить и настроить ОС Raspberry Pi на 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 от 40-контактного разъема GPIO Raspberry Pi, чтобы не погнуть контакты Raspberry Pi GPIO.

С помощью четырех оставшихся винтов закрепите Raspberry Pi Sense Hat, как показано на изображениях ниже.

Включение Raspberry Pi

Теперь, когда Raspberry Pi Sense Hat подключена к Raspberry Pi, вставьте карту microSD с ОС Raspberry Pi в слот для карты microSD Raspberry Pi, подключите кабель питания к Raspberry Pi и включите его.

Установка библиотеки Python Raspberry Pi Sense Hat

Чтобы использовать Raspberry Pi Sense Hat на Raspberry Pi, разумная шляпа Библиотека Python должна быть установлена ​​в ОС Raspberry Pi. В разумная шляпа библиотека доступна в официальном репозитории пакетов Raspberry Pi OS.

Чтобы установить Raspberry Pi разумная шляпа Библиотека Python в ОС Raspberry Pi, сначала обновите кеш репозитория пакетов APT с помощью следующей команды:

$ sudo подходящее обновление

Затем выполните следующую команду:

$ sudo apt install sense-hat -y

Установка библиотеки Python Flask Micro Web Framework

Мы будем использовать фреймворк Flask Python для создания нашего погодного приложения. Вы можете установить Flask из официального репозитория пакетов Raspberry Pi OS с помощью следующей команды:

$ sudo apt установить python3-flask -y

Создание каталога проекта

Рекомендуется создать каталог проекта для организации файлов проекта. Чтобы создать каталог проекта ~ / работа, используйте следующую команду:

$ mkdir ~ / работа

После создания каталога проекта перейдите в каталог проекта следующим образом:

$ cd ~ / работа

Тестирование Raspberry Pi Sense Hat

Чтобы проверить, работает ли Raspberry Pi Sense Hat, мы можем написать простой тестовый скрипт Python. Вы можете создать новый скрипт Python под названием контрольная работа.ру с нано текстовый редактор следующим образом:

$ нано тест.ру

Введите следующий код в контрольная работа.ру файл. Строка 1 импорт SenseHat от sense_hat модуль, строка 3 создает SenseHat объект и сохраняет ссылку в смысл переменная, а в строках 5-6 устанавливается красный цвет всех светодиодов 8 × 8. Когда вы закончите, нажмите + Икс с последующим Y а также .

Вы можете запустить контрольная работа.ру Скрипт Python с помощью следующей команды:

$ python3 тест.ру

Светодиодная матрица 8 × 8 должна светиться красным цветом, как показано на изображении ниже.

Чтобы выключить светодиоды на Sense Hat, запустите Чисто() метод без какого-либо значения цвета в контрольная работа.ру Скрипт Python, как показано на скриншоте ниже, и запустите контрольная работа.ру Снова скрипт Python.

Светодиоды на Sense Hat теперь должны быть выключены, как показано на изображении ниже.

Если Sense Hat работает правильно, переходите к следующему разделу.

Получение данных о погоде из Sense Hat

Вы можете очень легко получить данные датчиков от Sense Hat, используя разумная шляпа Библиотека Python. Чтобы получить данные датчика из Sense Hat, вы можете создать новый скрипт Python read_sensor_data.ру следующим образом:

$ нано read_sensor_data.ру

Введите следующий код в read_sensor_data.ру Файл Python.

from sense_hat импорт SenseHat
от времени импортный сон
смысл = SenseHat ()
смысл.Чисто()
в то время как True:
tempC = смысл.get_tempera ()
tempF = tempC * (9/5) + 32
давление = чувство.get_pressure ()
влажность = чувство.get_humidity ()
print ("Температура:%.2f ° C /%.2f ° F \ n "% (tempC, tempF))
print ("Давление:%.2f mb \ n "% (давление))
print ("Влажность:%.2f %% \ n \ n "% (влажность))
сон (5)

Когда вы закончите, нажмите + Икс с последующим Y а также .

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

В строке 8 get_tempera () используется для считывания данных о температуре (в градусах Цельсия) с датчика влажности Sense Hat. В строке 9 данные о температуре конвертируются из градусов Цельсия в градусы Фаренгейта. В строке 10 get_pressure () используется для считывания данных о давлении воздуха (в миллибарах) с датчика давления Sense Hat. В строке 11 get_humidity () используется для считывания данных о влажности (в%) с датчика влажности Sense Hat.

Строки 13-15 используются для вывода данных датчика на консоль, а строка 16 используется для ожидания 5 секунд перед повторным считыванием данных датчика.

Вы можете запустить read_sensor_data.ру Скрипт Python следующим образом:

$ python3 read_sensor_data.ру

После запуска скрипта данные датчика будут распечатаны на консоли.

Теперь, когда мы можем считывать данные сенсора из Sense Hat, нажмите + C остановить программу.

Создание веб-приложения метеостанции

В этом разделе мы покажем вам, как использовать веб-фреймворк Python Flask для создания погодного API и погодного приложения. Приложение погоды получит доступ к API данных о погоде и покажет данные о погоде в режиме реального времени. Весь код, обсуждаемый в этом разделе, доступен на GitHub по адресу shovon8 / raspberry-pi-sense-hat-weather-app.

Сначала создайте сервер.ру Скрипт Python в каталоге проекта выглядит следующим образом:

$ нано сервер.ру

Введите следующий код в сервер.ру Файл Python.

из фляги импорт фляги
из колбы импорта jsonify
из флакона import render_template
из фляги import url_for
from sense_hat импорт SenseHat
app = Flask (__ имя__)
приложение.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0
смысл = SenseHat ()
смысл.Чисто()
с приложением.test_request_context ():
url_for ('статический', имя_файла = 'стиль.css ')
url_for ('статический', имя_файла = 'приложение.js ')
@приложение.маршрут ('/ api')
def api ():
tempC = смысл.get_tempera ()
tempF = tempC * (9/5) + 32
давление = чувство.get_pressure ()
давление Psi = давление * 0.0145038
давление P = давление * 100
влажность = чувство.get_humidity ()
return jsonify (
"temperature": "C": tempC, "F": tempF,
"давление": "мб": давление, "гПа": давление,
«psi»: давлениеPsi, «P»: давлениеP,
«влажность»: влажность
)
@приложение.маршрут('/')
def home ():
return render_template ('./дом.html ')

Затем нажмите + Икс с последующим Y а также чтобы спасти сервер.ру Скрипт Python.

В приведенном выше коде строки 1-5 импортируют все необходимые библиотеки, строка 7 создает приложение Flask, строка 11 создает объект SenseHat, а строка 12 отключает все светодиоды Sense Hat. Строка 8 отключает веб-кеширование для приложения Flask. Поскольку это приложение легкое, нет необходимости в кешировании. Если вы хотите изменить приложение, отключение веб-кеширования значительно упростит тестирование.

Строки 18-31 считывают данные датчика из Sense Hat и возвращают данные API в формате JSON по запросу HTTP GET в / api конечная точка веб-сервера. Строки 37–39 возвращают домашнюю страницу веб-приложения погоды на / конечная точка веб-сервера. Домашняя страница отображается из дом.html файл, который должен быть в шаблоны / каталог каталога проекта.

Строки 14-16 используются для доступа к стиль.css а также приложение.js статические файлы. Эти файлы должны быть в папке статический / каталог каталога проекта. В стиль.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?family = Roboto & display = swap ');
*
отступ: 0;
маржа: 0;
семейство шрифтов: «Робото», без засечек;

тело
фон: # 737373;

h1
дисплей: блок;
цвет: # 79DC7B;
выравнивание текста: центр;
font-weight: 400;
фон: # 000;
заполнение: 0.5em 0;

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

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

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

.data-cell
ширина: 100%;
высота: 80 пикселей;
дисплей: гибкий;
align-items: center;
justify-content: center;
font-weight: жирный;
размер шрифта: 1.5em;
цвет: # 006902;

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

Затем нажмите + Икс с последующим Y а также чтобы спасти стиль.css файл.

Создать приложение.js файл в статический / каталог следующим образом:

$ nano static / приложение.js

Введите следующий код в приложение.js файл.

окно.addEventListener ('загрузка', основной);
function main ()
function getAPIData ()
var http = new XMLHttpRequest ();
http.onreadystatechange = function ()
если это.readyState === 4 && это.status === 200)
обновление (JSON.разобрать (это.responseText));


http.open ("ПОЛУЧИТЬ", "/ api", истина);
http.Отправить();

function update (apiData)
var tempC = документ.getElementById ("tempC");
var tempF = документ.getElementById ("tempF");
var pressureMb = документ.getElementById ("давлениеMb");
var pressurePsi = документ.getElementById ("pressurePsi");
var pressureHpa = документ.getElementById ("давлениеHpa");
var pressureP = документ.getElementById ("pressureP");
var влажность = документ.getElementById ("влажность");
tempC.innerHTML = parseFloat (apiData.температура.C).toFixed (2) + "° C";
tempF.innerHTML = parseFloat (apiData.температура.F).toFixed (2) + "° F";
давлениеMb.innerHTML = parseFloat (apiData.давление.мб).toFixed (2) + «мб»;
давлениеPsi.innerHTML = parseFloat (apiData.давление.psi).toFixed (2) + "psi";
давлениеHpa.innerHTML = parseFloat (apiData.давление.гПа).toFixed (2) + «гПа»;
давление P.innerHTML = parseFloat (apiData.давление.П).toFixed (2) + "P";
влажность.innerHTML = parseFloat (apiData.влажность).toFixed (2) + "%";

function app ()
окно.setInterval (function ()
getAPIData ();
, 5000);

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

Затем нажмите + Икс с последующим Y а также чтобы спасти приложение.js файл.

Здесь строка 1 запускает основной() функция, когда веб-страница завершает загрузку. в основной() функция, getAPIData () функция извлекает данные API погоды с помощью AJAX и вызывает Обновить() функция (в строке 10) после успешного извлечения данных. В Обновить() функция обновляет элемент веб-страницы, используя данные 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: // локальный: 5000 / api | json_pp

Как видите, данные Weather API выводятся на консоль. Следовательно, API работает.

Чтобы протестировать приложение Погода, перейдите по адресу http: // localhost: 5000 в веб-браузере Chromium. Приложение Погода должно быть загружено в веб-браузере, но сначала данные о погоде не должны отображаться.

Через несколько секунд приложение погоды должно завершить получение данных о погоде из API и отобразить их.

В любой момент вы можете нажать + C чтобы остановить веб-сервер.

Создание сервиса Systemd для веб-приложения Weather

В этом разделе мы покажем вам, как создать служебный файл systemd для приложения погоды, чтобы оно автоматически запускалось при загрузке.

Сначала создайте метеостанция.услуга файл в каталоге вашего проекта следующим образом:

метеостанция $ nano.услуга

Введите следующие строки кода в метеостанция.услуга файл.

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

Затем нажмите + Икс с последующим Y а также чтобы спасти метеостанция.услуга файл.

Скопируйте метеостанция.услуга файл в / и т.д. / systemd / system / каталог с помощью следующей команды:

$ sudo cp -v метеостанция.сервис / и т.д. / systemd / system /

Перезагрузите демоны systemd, чтобы изменения вступили в силу следующим образом:

$ sudo systemctl демон-перезагрузка

В метеостанция Сервис systemd в данный момент должен быть неактивен, как показано на скриншоте ниже.

$ sudo systemctl status метеостанция.услуга

Начать метеостанция service с помощью следующей команды:

$ sudo systemctl start метеостанция.услуга

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

$ sudo systemctl status метеостанция.услуга

Теперь, когда метеостанция сервис работает, вы можете добавить его в системный запуск ОС Raspberry Pi с помощью следующей команды:

$ sudo systemctl включить метеостанцию.услуга

Перезагрузите Raspberry Pi с помощью следующей команды:

$ sudo перезагрузка

После загрузки Raspberry Pi метеостанция сервис должен быть запущен, как показано на скриншоте ниже.

$ sudo systemctl status метеостанция.услуга

Доступ к приложению Погода с других устройств

Чтобы получить доступ к приложению погоды с других устройств в вашей домашней сети, вам необходимо знать IP-адрес вашего Raspberry Pi. Вы можете найти IP-адрес вашего Raspberry Pi 4 в веб-интерфейсе вашего домашнего маршрутизатора. В нашем случае IP-адрес 192.168.0.103, но этот адрес будет другим для вас, поэтому не забудьте заменить этот адрес своим на всех последующих этапах.

Если у вас есть доступ к консоли Raspberry Pi, вы также можете выполнить следующую команду, чтобы найти IP-адрес.

$ hostname -I

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

Заключение

В этой статье мы показали вам, как использовать Raspberry Pi Sense Hat для создания метеостанции Raspberry Pi. Мы использовали разумная шляпа Библиотека Python для извлечения данных о погоде из Raspberry Pi Sense Hat. Затем мы использовали микро-веб-фреймворк Flask Python для создания погодного API и веб-приложения. Веб-приложение получает данные о погоде из API погоды каждые 5 секунд, чтобы постоянно обновлять веб-приложение с последними данными о погоде.

Топ-5 карт для захвата игр
Все мы видели и любили потоковые игры на YouTube. PewDiePie, Jakesepticye и Markiplier - лишь некоторые из лучших игроков, которые заработали миллионы...
Как разработать игру в Linux
Десять лет назад не многие пользователи Linux могли бы предсказать, что их любимая операционная система однажды станет популярной игровой платформой д...
Порты коммерческих игровых движков с открытым исходным кодом
Бесплатные игры с открытым исходным кодом и кроссплатформенные версии игрового движка можно использовать для игры как в старые, так и в некоторые из с...