[Перевод] Создаём датчик контроля качества воздуха на InfluxDB, Grafana, Docker и Raspberry Pi

Когда-нибудь думали о мониторинге качества воздуха в доме или за его пределами: там, где живёте и работаете? Этот проект, который мы окрестили balenaSense, представляет собой установку для снятия показаний температуры, влажности, барометрического давления и качества воздуха, а также панель мониторинга, к которой вы можете получить доступ из любого места, чтобы увидеть сводную статистику и отслеживать тенденции.

9ad95dd7a878fefb4e5ea05732dba925.png


Для контроля качества воздуха и метеостанции требуется много проводов и различных датчиков, но ситуация стала проще после появления сенсоров, которые объединяют все показания на хорошей маленькой плате, с которой легко начать.

46214cff9e49ae84360e58fb5ebb4a4e.jpg

Рассмотрим мониторинг температуры, влажности, барометрического давления и качества воздуха с помощью сенсора «всё-в-одном», который подключается непосредственно к Raspberry Pi без дополнительных компонентов. Вам не нужен никакой опыт в электронике, но паяльник был бы кстати (хотя он тоже необязателен). Этот проект реализует базу данных для хранения исторических показаний вместе с графическим интерфейсом, чтобы просматривать текущие показания и сразу видеть тенденции.

7d063e8b2d6111ed55553a3b3e3c0a47.jpg

ce06008843e25c57e8b0979bce73b6b6.png


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

00530015dce4ec449e0477a8d7bc6d14.jpg

Я не хочу паять


Если не хотите паять, вам потребуются:

Я хочу паять — дайте мне!


Если вы рады взять в руки паяльник, то вам понадобятся:

Другие датчики


Если у вас уже есть какой-то датчик, этот проект поддерживает Sense HAT с дополнительным бонусом: смайлик на светодиодной матрице (в зависимости от качества воздуха, конечно)!

ede7631adecd352c97c0675c3adcde95.png

Bosch BME680 с переходной платой можно заказать у разных поставщиков по разным ценам.


Примечание. В статье мы используем Pimoroni: эта плата имеет то дополнительное преимущество, что контакты разбиты в правильном порядке для Raspberry Pi GPIO. При использовании других плат нужно проверять, что контакты питания, заземления и шины I2C (SDA и SCL) совпадают — это объясняется далее в руководстве.
Мы открыли на GitHub проект balena-sense, который содержит всё программное обеспечение, конфигурацию и код, которые вам нужны для рабочей системы. Мы собираемся развернуть этот проект на бесплатном аккаунте balenaCloud, чтобы распространять всё программное обеспечение для Raspberry Pi, а также обеспечить удалённый доступ. Поэтому вам понадобятся:
На аппаратном фронте этого проекта мало работы. Наша цель состоит в том, чтобы подключить плату датчика к контакту GPIO на Raspberry Pi.

Датчик BME680 взаимодействует с Raspberry Pi по шине под названием I2C (eye-squared-see), которая является последовательной шиной с двумя проводами. Эти два провода называются линия синхронизации (SCK) и линия передачи данных (SDA). В дополнение к двум проводам необходимо подать на датчик питание (3.3V или 3V3) и заземлить.

Если вы выбрали вариант без пайки от Pimoroni или Sparkfun или используете Sense HAT, достаточно просто подключить блестящие новые компоненты к Raspberry Pi, и все соединения будут сделаны для вас: переходите к следующему шагу!

Если вы решили подключить датчик напрямую к Raspberry Pi с помощью Pimoroni или другой переходной платы, то главное обеспечить правильное подключение описанных выше контактов (SDA, SCK, 3V3 и GND).

55f165c76f33633d3539393b1472d2f5.png

Полезный сайт для работы с GPIO на Raspberry Pi — pinout.xyz; он ясно показывает, что нам нужны контакты 1 (3V3 питание), 3 (SDA), 5 (SCL) и 9 (земля). 40-контактный GPIO является стандартным для Pi 2 и более поздних версий. Если используете плату Pimoroni, то контакты находятся в правильном порядке для соединения плат. Обратите внимание, как надпись на плате соответствует диаграмме распиновки выше.

ebb832900d72244bfc6038de82e9164a.jpg

Но если подключить датчик таким образом, то на показания будет влиять тепло от процессора Raspberry Pi. Чтобы собирать более точные показания, нужно вынести датчик с платы: делаем это кабелями DuPont папа-мама (или Jumper Jerky), как показано ниже:

4b65c145a0bd694d5ca9e266d5771d1b.jpg

Аналогично, если вы используете другой датчик, где диаграммы распиновки не совпадают точно, то можете подключить эти платы к Pi тем же методом. Главное — обеспечить соответствие 3V3, SDA, SCL и GND. Если на плате есть контакты для SDI, SDO, CS — можете их игнорировать, поскольку они используются для альтернативного интерфейса SPI, который мы в этом проекте не используем.

На приведённых выше фотографиях у нас Raspberry Pi 3A+, но подходит и Pi Zero в качестве более дешёвого решения.


Мы собираемся прошить SD-карту операционкой balenaOS, привязавшись к облаку balenaCloud, добавить туда своё устройство и настроить проект таким образом, чтобы позже его можно было легко обновить.

Сначала требуется настроить учётную запись balenaCloud. Это значит регистрация, добавление приложения и добавление устройства.

Шаг 1. Зарегистрируйтесь в balenaCloud


Если у вас уже есть аккаунт GitHub или Google, его можно использовать для входа в систему минуя процесс регистрации.

Шаг 2. Cоздание приложения


Добавьте приложение, выбрав правильный тип устройства и Starter в качестве типа приложения, затем нажмите Create New Application. Этот тип поддерживает все микросервисы и бесплатен до десяти устройств.

Далее вы попадёте в панель мониторинга для вновь созданного приложения, где можете перейти к следующему шагу и добавить устройство. Можете дать приложению произвольное имя, но оно понадобится позже в руководстве, когда будем писать код.

Шаг 3. Добавьте устройство и загрузите ОС


После создания приложения можете добавить устройство в этом приложении, нажав зелёную кнопку Add Device. При добавлении устройства укажите правильный тип устройства. Если подключаетесь к беспроводной сети, можете установить свой SSID WiFI и парольную фразу.

Примечание: в анимации указан Raspberry Pi 3, не забудьте выбрать правильный тип своего устройства!

e7409c595001458580b80e39809973a6.gif

Этот процесс создаёт настраиваемый образ для приложения и типа устройства, который включает параметры сети, если они указаны.

Примечание: для начала лучше выбрать dev-образ, чтобы провести какие-то тесты и устранить неисправности. Более подробную информацию о различиях между образами development и production см. здесь. Если вы уверены, что можете приступить к развёртыванию производственного образа прямо сейчас — пожалуйста.

Шаг 4. Запись SD-карты и загрузка устройства


Когда образ ОС загружен, пришло время прошить SD-карту. Для этого можно использовать balenaEtcher.

a57b06e30b246d399ee8f8ef47c3b03f.gif

После завершения процесса вставьте SD-карту в Raspberry Pi и подключите источник питания.

84564928f5f8fc0e7907089bc0818870.gif

Когда устройство загружается в первый раз, оно подключается к панели мониторинга balenaCloud, после чего вы сможете увидеть его в онлайновом списке и перейти к следующему шагу.

740785d6c8aef63170470b81139a1a7b.png

Устранение неполадок: устройство должно появиться на панели через несколько минут. Если оно не отображается, что-то пошло не так. В документации есть обширное руководство по устранению неполадок с обильной информацией о том, почему так может произойти. Если документация не помогла, обращайтесь на форумы.


Когда ваш Raspberry Pi подготовлен, загружен и подключён к balenaCloud, вы готовы установить на устройство код приложения.

Установка инструментов balena CLI на рабочую станцию


BalenaCloud позволяет удалённо передавать на Raspberry Pi и другие устройства прикладное программное обеспечение/код. Чтобы это стало возможным, ваша рабочая станция (не Raspberry Pi) должна соответствовать неким минимальным требованиям по части программного обеспечения. Примечание: Для успешного развёртывания этого проекта вам не нужно запускать какие-либо команды на самом устройстве ни через SSH, ни с панели мониторинга balenaCloud. Всё делается удалённо!

Если у вас на компьютере уже есть (или вы можете настроить) npm, то это самый быстрый способ запустить инструменты CLI. Есть ещё бинарники для Windows, macOS и Linux. Примечание: если вы уже установили эти инструменты для других наших проектов, можете пропустить эту часть и перейти непосредственно к следующему шагу.

Документация для инструментов CLI описывает установку и настройку пакета npm, а также бинарников.

Когда у вас установлен и работает CLI, первый шаг — войти в balenaCloud, выполнив команду balena login:

ebe2dda9e415ee46f57ec346b89e0360.png

c8e7efcda08bb42ef11aadfb231d5706.png

Когда есть рабочий CLI, который зарегистрирован в учётной записи, вы готовы к установке программ на Raspberry Pi.

Загрузка проекта с GitHub


Следующим шагом является загрузка кода для этого проекта с GitHub.

Синяя кнопка загрузит zip-файл проекта, но если вы уже знакомы с Git, то можете использовать git clone обычным способом.

Установка на Raspberry Pi


Поскольку CLI и последний код установлены, можно одной командой запушить этот код на balenaCloud. Там собирается и настраивается образ Docker, который запустится на вашем устройстве.

Из каталога проекта после его распаковки выполните команду balena push , где appName — это имя приложения, заданное в начале руководства. Например, balena push balenaSense.

Если всё сделано правильно, через несколько минут информационный экран вашего устройства на панели управления должен показывать запущенные службы, по одной для каждого из программных компонентов, примерно так:

45208c6529a5735789917e8ca2783b8b.png

В первый раз загрузка может занять несколько минут (в зависимости от скорости вашего интернет-соединения), но потом загружаются только изменения в контейнере, поэтому всё происходит намного быстрее.

Примечание: когда приложение запускается впервые (и вы используете BME680, а не Sense HAT), датчик примерно пять минут выполняет 'burn-in'. В течение этого периода показания не будут сниматься и вставляться в базу данных. Приложение будет записывать обратный отсчёт, что и отобразиться в панели balenaCloud:

607cd8809b0176d8cb5888f9ae766fc3.png

Когда отсчёт достигнет нуля, вы увидите сообщение «Starting loop…`. После этого показания будут сниматься и вставляться в базу данных каждые 10 секунд.


Надеюсь, вы прошили устройство, подключили к сети и запустили без особых проблем. Одно из больших преимуществ использования бесплатного аккаунта balenaCloud — функция Public Device URL.

75e0bed3f3dccd7b2d43baa9a84b8134.png

Активируйте этот переключатель и нажмите значок с синей стрелкой для доступа к панели мониторинга. Можете поделиться этой ссылкой или добавить её в закладки телефона или другого устройства. Пока устройство balenaSense подключено и работает, на панель мониторинга можно посмотреть откуда угодно!

ce06008843e25c57e8b0979bce73b6b6.png

Если не хотите включать публичный доступ, вы всё равно можете просматривать панель мониторинга из собственной локальной сети по IP-адресу, как видно на скриншоте вверху. Ваш будет отличаться, но достаточно ввести в браузере http://, и вы всё равно получите доступ к панели мониторинга, если находитесь в той же сети, что и устройство. Например, для доступа к моему устройству я бы ввёл http://10.1.231.36.

Если хотите войти в Grafana и поиграться с настройками, то учётные данные по умолчанию admin и admin.


У этого проекта три основных компонента, три сервиса. Эти названия есть на панели мониторинга balenaCloud:

  • InfluxDB — база данных, используемая для хранения показаний датчика
  • Sensor — библиотека Python и код для доступа к датчику, снятия показаний и сохранения их в БД
  • Grafana — используется для создания панели мониторинга с графиками и отчётами


Датчик BME680 от Bosch определяет температуру, влажность, давление и газоустойчивость. Датчики температуры, влажности и давления работают сразу из коробки, но показания газоустойчивости сами по себе не очень полезны. Это индикаторы изменения состава воздуха. Когда датчик начинает работу, он устанавливает базис, а затем контролирует изменения. Индикативные показатели качества воздуха приведены в процентах и учитывают влияние влажности и газоустойчивости.

Если вы используете Sense HAT, где нет сенсора газоустойчивости, мы аппроксимируем показания качества воздуха на основе целевых значений температуры и влажности.


Надеюсь, теперь вы полностью запустили проект, получили доступ к панели мониторинга, сняли показания и начали заполнять свою базу данных. Упомянем ещё несколько важных вещей.

Измените пароль


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

3f5bb875e74b17bf2eff4447f1245212.png

Мы установили систему с именем пользователя и паролем по умолчанию admin admin. Чтобы их изменить, войдите в Grafana с помощью кнопки в левом нижнем углу панели. Вам будет предложено изменить пароль при первом входе в систему.

Настройка на свой вкус


В программе Grafana для панели мониторинга и отчётов множество параметров конфигурации и настроек. Мы создали базовую панель, которая показывает диаграмму и график для каждого из четырёх параметров снятия показаний.

9cacab417c06bb7568701a26bfa5f2b2.png

Можете настроить каждую панель Grafana, наведя курсор на заголовок и перейдя к редактированию. Рекомендую поиграться с параметрами — изменения в панели мониторинга не сохраняются автоматически, так что если сделаете ошибку, то достаточно просто перезагрузить страницу, и всё вернётся в исходный вид. Если хотите сохранить изменения, нажмите Save в верхней части панели управления, и все настройки будут сохранены на вашем устройстве.

b5b03633659cfdf57133ba45f598f94c.png

Также можете настроить датчики. Например, на диаграмме манометра мы настроили несколько основных диапазонов и текстовые значения вместо цифр. Всё это меняется на ваш вкус!

Корпус


Такие датчики идеально подходят для размещения в метеорологической будке, которая защищает сенсоры от солнечного света и излучаемого тепла. Если вы контролируете окружающую среду в помещении, это не так важно, но если датчик установлен на открытом воздухе, то для получения точных показаний важны его позиционирование и защита.

Метеорологические будки есть в продаже, но они могут быть довольно дорогими, поэтому рассмотрите DIY-варианты.

На Thingiverse есть несколько корпусов BME680 и метеорологических будок.


Спасибо за чтение! Если вы решили построить собственную метеорологическую станцию с контролем качества воздуха — расскажите, как всё прошло, какие возникли проблемы. Идеи по развитию нашего проекта можно высказывать на форумах.

© Habrahabr.ru