Проект погодня станция
Описание:
Данная погодная станция, делалась в рамках умного дома, как развивающий проект и не претендует на метеорологическую супер точность). В основе ее лежат два простых датчика 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
dth21(AM2301)
Датчик для измерения температуры и влажности. Имеет защитный пластиковый корпус. Предназначен для работы «на улице».
Технические характеристики:
- Диапазон измерения влажности: 0–99,9%
- Точность измерения влажности: ±3%
- Диапазон измерения температуры: от -40 до +80 °C
- Точность измерения температуры: ± 2 °C
- Рабочая температура: от -40 ° C до +85 ° C
Этапы изготавления:
1. ArduinoГабариты bm180, позволяют прикрепить его внутрь пластикового корпуса dth21. В добавок можно использовать единое напряжение для обоих датчиков в 3.3 вольта. Поэтому просто подпаяем питание bm180 к питанию dth21 и выведем дополнительно два контрольных провода (SCL и SDA) от bm180.
Связь и питание происходит по витой паре из медной жилы. От точки расположения датчиков до ардуинки приблизительно 15 метров.
Ардуинка передает текстовую информацию, в формате JSON, в com порт виртуального сервера hyper-v server 2019(обычным USB), а тот в свою очередь передает данные в com порт виртуальной машины.
Скачать скетч Arduino2. Сервер и виртуалка
Hyper-v не умеет пробрасывать порты в виртуальную систему, лучше для таких целей использовать Proxmox или XenServer, прийдется костылить, подробней по ссылке:
Инструкция как пробросить com порт Arduino в hyper-v server 2019
3. Запись в БД
Для начала нам нужно поднять и настроить БД, подробней по ссылке:
Инструкция запуск и настройка PostgreSQL на ubuntu
Далее при помощи Python скрипта вносим данные в бд.
Конечно можно передать данные в бд разными способами, например через api того же сайта, но поскольку у меня все находится на одном гипервизоре, смысла к такому прибегать нет.
4. Автоматизируем запуск
Для автоматизации запуска и работе в фоновом режиме скрипта Python в linux, проще всего создать службу. Это можно сделать разными средствами, в данном случае воспользуемся стандартными, но можно посмотреть в сторону supervisor-а у него есть web-интерфейс).
Нужно учесть, что скрипт работает в своем environment(виртуальном окружении).
- Создадим и заполним файл sm.service. Где sm произвольное название сервиса.
- Запустим и добавим в автозапуск
sudo systemctl enable sm.service
sudo systemctl start sm.service
- Проверим статус
sudo systemctl status sm.service
- Команда для перезапуска
sudo systemctl restart sm.service
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