Проект погодня станция

Описание:

Данная погодная станция, делалась в рамках умного дома, как развивающий проект и не претендует на метеорологическую супер точность). В основе ее лежат два простых датчика bm180(GY-68) и dth21(AM2301).

Кратко о том как работает. Данные с датчиков по витой паре попадают на Arduino, далее скетч Arduino обрабатывает данные и формирует ответ в JSON формате в com порт. Com порт представляет из себя обычный кабель usb вставленный в сервер, на котором крутится гипервизор hyper-v server. После того как hyper-v server получает данные, он пробрасывает их по именованому com порту на поднятую виртуалку. Виртуалка слушает и com порт, и как только туда что то поступает, запускает Python скрипт который записывает данный в базу данных.

bm180(GY-68)

Чип был разработан фирмой BOSH, дешев и активно применяется в разнообразных Arduino проектах для измерения давлению. Не предназначен для измерения низких температур, но судя по дублирующему датчику температуры вполне справляется.

Технические характеристики:

  • Диапазон измерения давления: от 300 до 1100 гПа
  • Точность измерения давления: от 0.02 гПа до 0.06 гПа
  • Диапазон измерения температуры: от 0 до 65 °C
  • Точность измерения температуры: ± 2 °C
  • Рабочая температура: от -40 ° C до +85 ° C
DateSheet

dth21(AM2301)

Датчик для измерения температуры и влажности. Имеет защитный пластиковый корпус. Предназначен для работы «на улице».

Технические характеристики:

  • Диапазон измерения влажности: 0–99,9%
  • Точность измерения влажности: ±3%
  • Диапазон измерения температуры: от -40 до +80 °C
  • Точность измерения температуры: ± 2 °C
  • Рабочая температура: от -40 ° C до +85 ° C
DateSheet

Этапы изготавления:

1. Arduino

Габариты bm180, позволяют прикрепить его внутрь пластикового корпуса dth21. В добавок можно использовать единое напряжение для обоих датчиков в 3.3 вольта. Поэтому просто подпаяем питание bm180 к питанию dth21 и выведем дополнительно два контрольных провода (SCL и SDA) от bm180.

клик для увеличения клик для увеличения

Связь и питание происходит по витой паре из медной жилы. От точки расположения датчиков до ардуинки приблизительно 15 метров.

клик для увеличения

Ардуинка передает текстовую информацию, в формате JSON, в com порт виртуального сервера hyper-v server 2019(обычным USB), а тот в свою очередь передает данные в com порт виртуальной машины.

Скачать скетч Arduino

2. Сервер и виртуалка

Hyper-v не умеет пробрасывать порты в виртуальную систему, лучше для таких целей использовать Proxmox или XenServer, прийдется костылить, подробней по ссылке:

Инструкция как пробросить com порт Arduino в hyper-v server 2019

3. Запись в БД

Для начала нам нужно поднять и настроить БД, подробней по ссылке:

Инструкция запуск и настройка PostgreSQL на ubuntu

Далее при помощи Python скрипта вносим данные в бд.

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

4. Автоматизируем запуск

Для автоматизации запуска и работе в фоновом режиме скрипта Python в linux, проще всего создать службу. Это можно сделать разными средствами, в данном случае воспользуемся стандартными, но можно посмотреть в сторону supervisor-а у него есть web-интерфейс).

Нужно учесть, что скрипт работает в своем environment(виртуальном окружении).

  1. Создадим и заполним файл sm.service. Где sm произвольное название сервиса.
  2. sudo nano /lib/systemd/system/sm.service

    [Unit]

    Description=Serial Service

    After=multi-user.target

    [Service]

    Type=simple

    User=user

    Group=group

    ExecStart=/root/python/Serial/bin/python /root/python/Serial/Serial.py

    StandardInput=tty-force

    [Install]

    WantedBy=multi-user.target

    User и Group заменить на свои. Подробней можно почитать в официальной документации: https://help.ubuntu.ru/wiki/systemd

  3. Запустим и добавим в автозапуск

    sudo systemctl enable sm.service

    sudo systemctl start sm.service

  4. Проверим статус

    sudo systemctl status sm.service

  5. Команда для перезапуска

    sudo systemctl restart sm.service