Оглавление:

Местная метеостанция: 8 шагов (с изображениями)
Местная метеостанция: 8 шагов (с изображениями)

Видео: Местная метеостанция: 8 шагов (с изображениями)

Видео: Местная метеостанция: 8 шагов (с изображениями)
Видео: Лучший смарт браслет 2023. Huawei Band 8. Полный обзор со всеми тестами. Сравнение с Huawei Band 7. 2024, Ноябрь
Anonim
Местная метеостанция
Местная метеостанция

Поскольку я искал отличный проект для своего первого года обучения в школе, у меня было много идей о том, что делать, но ни один из них я не нашел сложным.

Позже я задумал сделать метеостанцию, в которой было бы что-то особенное. Я хотел иметь возможность хранить все свои данные, а затем использовать их для статистики. Этот проект будет специально разработан для людей, интересующихся метеорологией и желающих создать дома метеорологическую станцию, которая не будет стоить столько же, сколько имеющиеся на рынке. В проекте также предусмотрена возможность добавления или удаления датчиков в любое время.

Я был действительно счастлив, когда увидел свой конечный результат, который оказался лучше, чем ожидалось.

Он сделан из Raspberry Pi 4 под управлением Linux.

  • Веб-сайт Apache (html css js)
  • Eventlet (веб-сайт внутреннего сервера)
  • MariaDB (сервер базы данных)

Запасы

  • Raspberry Pi 4:

    SD-карта (мин. 16 ГБ)

  • Датчики:

    1. Датчик скорости ветра QS-FS
    2. Датчик ветра Выход сигнала в саду Датчик направления ветра из алюминиевого сплава Прибор для измерения скорости флюгера 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
    3. DHT22 (влажность)
    4. BMP280 (давление воздуха)
    5. DS18B20 (температура)
  • Источник питания

    • Источник питания 5 В (RPi)
    • Блок питания 9в (на внешнем макетном блоке питания)
  • Макетная плата (x2)

    T-cobbler plus для RPi 4

  • перемычки
  • IC

    • MCP3008
    • PCF8574AN
  • ЖК-дисплей 16x2
  • Светодиод (красный
  • Корпус (оптический)

    • винные ящики
    • деревянный столб (2м)
    • деревянная доска (1м)

Шаг 1. Подготовка к работе

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

Итак, во-первых, Что тебе нужно:

  • Raspberry Pi 4:

    SD-карта (мин. 16 ГБ)

  • Датчики:

    1. Датчик скорости ветра QS-FS
    2. Датчик ветра Выход сигнала для сада Алюминиевый сплав Датчик направления ветра Прибор для измерения скорости флюгера
    3. DHT22 (влажность)
    4. BMP280 (давление воздуха)
    5. DS18B20 (температура)
  • Источник питания

    • Источник питания 5 В (RPi)
    • Блок питания 9в (на внешнем макетном блоке питания)
  • Макетная плата (x2)
  • T-cobbler plus для RPi 4
  • перемычки
  • IC

    • MCP3008
    • PCF8574AN
  • ЖК-дисплей 16x2
  • Светодиод (красный)
  • Корпус (оптический)

    • ящики для вина
    • деревянная доска (1м)
    • полюс (2 м)

Вы можете найти все ссылки, по которым я их купил, в разделе «Расходные материалы» под вступлением.

Шаг 2. Настройка RPi

Настройка RPi
Настройка 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 датчиков:

  1. Датчик скорости ветра QS-FS
  2. Датчик ветра Выход сигнала для сада Алюминиевый сплав Датчик направления ветра Прибор для измерения скорости флюгера
  3. DHT22 (влажность)
  4. BMP280 (давление воздуха)
  5. 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 и большинства моих датчиков.

Датчик скорости ветра и датчик направления ветра, конечно же, размещались не внутри, а на перекладине, установленной на шесте. На этот столб я повесил ящик с вином, в котором также сделал дверцу.

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

Это, конечно, пример того, как вы можете это сделать. Вы можете делать с ним все, что хотите.

Рекомендуемые: