Оглавление:
- Запасы
- Шаг 1. Подготовка к работе
- Шаг 2. Настройка RPi
- Шаг 3: Подключение датчиков и добавление кода
- Шаг 4. Разработка веб-интерфейса
- Шаг 5: Создание базы данных
- Шаг 6. Создание веб-сайта: интерфейс (html Css)
- Шаг 7. Кодирование веб-сайта: бэкэнд (eventlet) + кодирование внешнего интерфейса (javascript)
- Шаг 8: Изготовление обсадной колонны
Видео: Местная метеостанция: 8 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Поскольку я искал отличный проект для своего первого года обучения в школе, у меня было много идей о том, что делать, но ни один из них я не нашел сложным.
Позже я задумал сделать метеостанцию, в которой было бы что-то особенное. Я хотел иметь возможность хранить все свои данные, а затем использовать их для статистики. Этот проект будет специально разработан для людей, интересующихся метеорологией и желающих создать дома метеорологическую станцию, которая не будет стоить столько же, сколько имеющиеся на рынке. В проекте также предусмотрена возможность добавления или удаления датчиков в любое время.
Я был действительно счастлив, когда увидел свой конечный результат, который оказался лучше, чем ожидалось.
Он сделан из Raspberry Pi 4 под управлением Linux.
- Веб-сайт Apache (html css js)
- Eventlet (веб-сайт внутреннего сервера)
- MariaDB (сервер базы данных)
Запасы
-
Raspberry Pi 4:
SD-карта (мин. 16 ГБ)
-
Датчики:
- Датчик скорости ветра QS-FS
- Датчик ветра Выход сигнала в саду Датчик направления ветра из алюминиевого сплава Прибор для измерения скорости флюгера https://www.banggood.com/Wind-Sensor-Garden-Signal-Output-Aluminium-Alloy-Wind-Direction-Sensor-Wind-Vane-Speed -Measuring-Instrument-p-1624988.html? Rmmds = myorder & cur_warehouse = CN
- DHT22 (влажность)
- BMP280 (давление воздуха)
- DS18B20 (температура)
-
Источник питания
- Источник питания 5 В (RPi)
- Блок питания 9в (на внешнем макетном блоке питания)
-
Макетная плата (x2)
T-cobbler plus для RPi 4
- перемычки
-
IC
- MCP3008
- PCF8574AN
- ЖК-дисплей 16x2
- Светодиод (красный
-
Корпус (оптический)
- винные ящики
- деревянный столб (2м)
- деревянная доска (1м)
Шаг 1. Подготовка к работе
Всегда очень важно получить все необходимые предметы, прежде чем приступить к работе над ступенькой. Это сэкономит вам много времени при работе с ним.
Итак, во-первых, Что тебе нужно:
-
Raspberry Pi 4:
SD-карта (мин. 16 ГБ)
-
Датчики:
- Датчик скорости ветра QS-FS
- Датчик ветра Выход сигнала для сада Алюминиевый сплав Датчик направления ветра Прибор для измерения скорости флюгера
- DHT22 (влажность)
- BMP280 (давление воздуха)
- DS18B20 (температура)
-
Источник питания
- Источник питания 5 В (RPi)
- Блок питания 9в (на внешнем макетном блоке питания)
- Макетная плата (x2)
- T-cobbler plus для RPi 4
- перемычки
-
IC
- MCP3008
- PCF8574AN
- ЖК-дисплей 16x2
- Светодиод (красный)
-
Корпус (оптический)
- ящики для вина
- деревянная доска (1м)
- полюс (2 м)
Вы можете найти все ссылки, по которым я их купил, в разделе «Расходные материалы» под вступлением.
Шаг 2. Настройка RPi
Для нашего проекта нам понадобится RPi с установленным программным обеспечением.
- Веб-сайт Apache (html css js)
- Flask Socket-IO (веб-сайт внутреннего сервера)
- MariaDB (сервер базы данных)
Перед установкой всегда удобно убедиться, что на вашем RPi установлена последняя версия программного обеспечения. Для этого просто выполните следующую команду:
sudo apt update
Apache:
Сначала поговорим об Apache. Apache - это веб-сервер, который используется во всем мире. Он безупречно управляет вашим сайтом. Единственное, что вам нужно сделать, это установить его и поместить свой веб-сайт в нужную папку, и вот он.
sudo apt install apache2 -y
Вот и все!
Чтобы убедиться, что все установлено правильно, перейдите на свой IP-адрес raspberry pi в браузере и посмотрите, откроется ли у вас веб-сайт по умолчанию. Если у вас возникнут проблемы с этим шагом, вы можете посетить сайт RPi здесь.
Ивентлет:
Теперь установим Eventlet. Он будет запускать наш внутренний сервер и подключать наши датчики к нашему веб-сайту. Для этого нам понадобится пара пакетов.
Фляга-сокетIO:
pip3 установить flask-socketio
Ивентлет:
pip3 установить eventlet
Гевент:
pip3 установить gevent
Мариадб:
Mariadb - это база данных на основе MySQL, которая создает реляционные базы данных. Он часто используется в RPi, поэтому в Интернете можно найти много полезной информации. Для получения дополнительной информации перейдите по этой ссылке.
apt установить mariadb-server
Шаг 3: Подключение датчиков и добавление кода
Для подключения датчиков к нашему RPi мы можем использовать T-Cobbler plus. Это удобный небольшой инструмент, который позволяет использовать все ваши контакты RPi на макетной плате.
В моем проекте 5 датчиков:
- Датчик скорости ветра QS-FS
- Датчик ветра Выход сигнала для сада Алюминиевый сплав Датчик направления ветра Прибор для измерения скорости флюгера
- DHT22 (влажность)
- BMP280 (давление воздуха)
- DS18B20 (температура)
Датчик скорости ветра:
Прежде всего, я начал с датчика скорости ветра, потому что меня больше всего волновал этот датчик. Это датчик с аналоговым сигналом на выходе 0-5 В и для работы ему требуется напряжение минимум 7 В. Я выбираю адаптер на 9 вольт для его питания.
Для чтения в этом датчике я использовал MCP3008, который представляет собой ИС для чтения аналоговых сигналов. Микросхема может работать от 3,3 В или 5 В, но я выбираю 3,3 В, чтобы она была совместима с RPi. Это означало, что мне нужно было изменить выходное напряжение с 5 В до 3,3 В. Я сделал это, добавив делитель напряжения, созданный двумя резисторами (2 кОм и 1 кОм).
Датчик направления ветра:
Направление ветра так же важно, как и скорость ветра, поэтому я подключу его позже.
Этот датчик имеет те же технические характеристики, что и датчик скорости ветра. Он также будет работать от 9 В и имеет выходное напряжение 5 В. Также этот датчик мы подключим к MCP3008 через делитель напряжения.
DHT22 (влажность):
DHT22 считывает влажность. Он дает вам значение в процентах, и его значение можно прочитать с помощью протокола I2C на RPi. Поэтому вы должны включить порты I2C в файле Raspi-config. Больше информации здесь.
BMP280 (давление воздуха):
BMP280 используется для считывания давления воздуха. Его значение считывается через шину SPI на RPi. Этот протокол также необходимо включить в Raspi-config. Для своего кода я использовал библиотеку Adafruit.
DS18B20 (температура):
Последний датчик измеряет температуру. этот датчик из Далласа, и если у вас был небольшой опыт работы с Далласом, вы, вероятно, уже знаете, что они используют шину 1Wire. Не удивляйтесь, если я скажу, что этот протокол также нужно включить в Raspi-config.
Как подключал датчики:
В формате pdf я загрузил электрическую и макетную схему, чтобы облегчить задачу.
После того, как вы смогли успешно подключить датчики и добавили код, необходимый для чтения всех датчиков, вы можете перейти к следующему шагу. Если вы хотите оставить датчик или добавить больше, вы можете это сделать.
Шаг 4. Разработка веб-интерфейса
Теперь мы подключили датчики, нам нужен дизайн для нашего сайта.
Мы хотим, чтобы веб-сайт выглядел легко, отображая все данные датчиков в реальном времени.
Также мы хотим иметь возможность видеть историю этих измеренных значений за интервал времени.
Итак, сначала я начал искать в сети вдохновение. Чаще всего на тех информационных сайтах, которые не имеют того дизайна, который я искал. Метеостанции, которые уже были на рынке, скорее всего, имели дисплей. И из этой демонстрации пришло мое вдохновение. Большинство дисплеев имеют дизайн в виде сетки. Это натолкнуло меня на идею создать домашнюю страницу, на которой будут отображаться все датчики.
Но я также сказал, что хочу создать страницу, где вы можете увидеть историю каждого датчика и его значений.
По этой причине я также сделал вторую страницу своего дизайна, содержащую это. На этой странице я мог увидеть дополнительную информацию о моем датчике, которая не будет отображаться на моей главной странице, и, конечно же, часть истории.
Через несколько часов мой дизайн был полностью разработан!
Дизайн выполнен с помощью Adobe XD.
Шаг 5: Создание базы данных
Чтобы отдохнуть от проектирования, я начал с базы данных.
Эта база данных будет содержать все датчики (5), все исполнительные механизмы (2) и значения, которые имели эти датчики.
База данных довольно проста и имеет несколько связей.
Модель базы данных вы можете увидеть на фото.
Шаг 6. Создание веб-сайта: интерфейс (html Css)
Вернуться на сайт!
Теперь у меня есть дизайн, и я могу начать писать его как html css, чтобы по-настоящему его использовать.
На главной странице:
Я начал с рассмотрения каждого датчика как элемента на моем веб-сайте. Чтобы позже я мог позволить этой части сгенерировать мой код Javascript.
Я также вставил в элементы случайные классы JS-держателей. Это позволит изменить содержимое этого элемента.
Это заняло у меня много времени, потому что я не очень хорошо владею этим языком.
После создания домашней страницы настало время начать со страницы истории.
На странице истории:
Эту страницу было немного проще воссоздать. На этой странице также были js-держатели для получения информации о датчике, слот значений в реальном времени и для отображения таблицы со всеми измеренными значениями.
Чтобы создать вкладку на моем веб-сайте, чтобы выбрать между таблицей или диаграммой, мне пришлось добавить немного Javascript, чтобы элементы не отображались или не отображались.
Теперь у нас есть потрясающий сайт, но мы не можем на нем ничего показать? Давай исправим это.
Вы можете найти мой код в моем репозитории на github:
Шаг 7. Кодирование веб-сайта: бэкэнд (eventlet) + кодирование внешнего интерфейса (javascript)
Бэкэнд:
Хотя внутренний сервер уже установлен, нам все еще нужно реализовать это в нашем проекте. Сначала нам нужно добавить импорт, чтобы все работало правильно.
from flask import Flask, request, jsonify from flask_socketio import SocketIO from flask_cors import CORS
Чтобы сервер запустился, нам нужно добавить следующее:
socketio.run (приложение, отладка = False, host = '0.0.0.0')
Теперь сервер подключен к сети, но не может общаться с внешним интерфейсом.
Он ничего не получает и не возвращает. Давай изменим это.
Чтобы запросить все датчики в базе данных, мы добавим маршрут:
@ app.route (конечная точка + '/ sensor', methods = ['GET']) def get_sensors (): if request.method == 'GET': s = DataRepository.get_sensors () return jsonify (sizes = s), 200
Этот код использует класс DataRepository и обращается к базе данных. Здесь он возвращает нам запрошенные нами датчики.
Нам также нужен маршрут для запроса информации об 1 конкретном датчике и еще одном для значений данного датчика.
Это все маршруты, но они предназначены для передачи данных в реальном времени. Нам нужно каждый интервал отправлять данные, которые только что считали датчики. Для этого мы используем соединение Socket-IO. Это соединение устанавливается с того момента, как кто-то загружает веб-сайт с помощью JS, и оно поддерживает это соединение. Это полнодуплексное соединение, что означает, что это соединение работает в обоих направлениях (отправка и получение) одновременно. Чтобы использовать это, нам нужно добавить следующий код.
@ socketio.on ('connect') def initial_connection (): print ('Новый клиент подключается') socketio.send ("U bent geconnecteerd") # # Отправить клиенту!
Этот кусок кода запускается, когда клиент подключается.
Чтобы получить любое сообщение из интерфейса, вы можете использовать этот код.
@ socketio.on ('сообщение') def message_recced (): пройти
Вы также можете отправлять сообщения. Это достигается следующим образом.
socketio.emit ('Update_RTD', dict_results, broadcast = True)
Первым заданным аргументом может быть что угодно, но он будет соответствовать тому, что вы поместили в свой JS, и вы также можете отправлять объекты с ним. Это необязательно.
Javascript:
Важно добавить немного JS, чтобы связать сервер с внутренним сервером, чтобы иметь возможность отображать текущие данные и получать информацию из базы данных.
Мы будем вызывать созданные нами функции socketIO для приема и отправки данных.
Когда мы получаем данные в виде объекта Json, мы разбираем его, чтобы получить нужную информацию, а затем помещаем в держатели JS, которые мы помещаем на наш веб-сайт.
Вы можете найти мой код в моем репозитории на github:
Шаг 8: Изготовление обсадной колонны
Обшивка потребовала много работы и может быть сделана как угодно. Вот как я это сделал.
Я взял несколько ящиков с вином.
Один из них я использовал как коробку для моего RPi и большинства моих датчиков.
Датчик скорости ветра и датчик направления ветра, конечно же, размещались не внутри, а на перекладине, установленной на шесте. На этот столб я повесил ящик с вином, в котором также сделал дверцу.
Вы можете увидеть, как я закончил свой проект, посмотрев на фото.
Это, конечно, пример того, как вы можете это сделать. Вы можете делать с ним все, что хотите.
Рекомендуемые:
Профессиональная метеостанция с использованием ESP8266 и ESP32 DIY: 9 шагов (с изображениями)
Профессиональная метеостанция с использованием ESP8266 и ESP32 DIY: LineaMeteoStazione - это законченная метеостанция, которая может быть сопряжена с профессиональными датчиками от Sensirion, а также с некоторыми компонентами прибора Дэвиса (датчик дождя, анемометр)
Fanair: метеостанция для вашей комнаты: 6 шагов (с изображениями)
Fanair: метеостанция для вашей комнаты: есть бесчисленное множество способов узнать текущую погоду, но тогда вы знаете только погоду на улице. Что, если вы хотите узнать погоду в своем доме, в конкретной комнате? Вот что я пытаюсь решить с помощью этого проекта. Fanair использует муль
Простая метеостанция с использованием ESP8266 .: 6 шагов (с изображениями)
Простая метеостанция с использованием ESP8266 .: В этом руководстве я расскажу, как использовать ESP8266 для получения данных, таких как температура, давление, климат и т. Д. И данных YouTube, таких как подписчики и amp; Общее количество просмотров. и отображать данные на последовательном мониторе и отображать их на ЖК-дисплее. Данные будут f
Метеостанция NaTaLia: метеостанция на солнечной энергии Arduino сделала правильный выбор: 8 шагов (с изображениями)
Метеостанция NaTaLia: метеостанция на солнечной энергии Arduino сделала правильный выбор: после 1 года успешной работы в 2 разных местах я делюсь своими планами по проекту метеостанции на солнечной энергии и объясняю, как она превратилась в систему, которая действительно может выжить в течение длительного времени. периоды от солнечной энергии. Если вы последуете
Местная станция температуры / влажности: 4 ступени
Местная станция температуры / влажности: в этом руководстве я собираюсь научить вас, как сделать небольшую станцию для измерения местной температуры и влажности и отображения ее на дисплее. Почему я это сделал? Мой папа спросил меня, могу ли я сделать какой-то датчик, который измеряет температуру