В этом учебном курсе по Raspberry Pi IoT будет построена система IoT, которая контролирует датчики с использованием InfluxDB, MQTT и Grafana. Другими словами, мы создадим панель управления на основе Grafana, которая визуализирует данные, полученные датчиками.
Вам также может понравиться:
Игра с Docker, MQTT, Grafana, InfluxDB, Python и Arduino
При этом InfluxDB сохраняет значения, считанные датчиками. Все системы обмениваются данными с использованием MQTT. Картинка ниже лучше описывает весь проект Raspberry Pi IoT.
Этот проект Raspberry IoT использует:
- Raspberry Pi 3
- ESP8266 (один или несколько)
- Датчики (такие как BMP280, DHT11 и т. Д.)
Raspberry Pi действует как центральный сервер, на котором выполняются следующие компоненты:
- InfluxDB (база данных временных рядов)
- Mosquitto (брокер MQTT)
- Grafana (платформа, используемая для создания информационных панелей)
В то время как ESP8266 управляет датчиками, которые отправляют данные, используя протокол MQTT. Эти компоненты работают с использованием контейнеров Docker.
Обзор проекта Raspberry Pi IoT: InfluxDB, Grafana, Mosquitto и Telegraf
На рисунке выше показаны компоненты, которые будут создавать этот проект IoT, а именно InfluxDB, Grafana и Mosquitto. Итак, как эти компоненты обмениваются данными и как они связаны? На рисунке ниже показано, как это сделать:
Давайте начнем с описания того, как будет работать эта система IoT:
- Mosquitto выступает в качестве брокера MQTT, принимающего данные, поступающие от датчиков (ESP8266, который выступает в качестве издателя)
- Telegraf подписывается на тему MQTT, где датчики публикуют данные и сохраняют эту информацию в InfluxDB
- Графана читает данные в InfluxDB и управляет приборной панелью для визуализации такой информации.
Теперь мы знаем все компоненты и роль, которую они играют, мы можем построить систему. Сначала мы начнем создавать и настраивать все эти компоненты.
Во время этого урока мы будем предполагать, что Docker уже установлен на вашем Raspberry Pi.
Установка и настройка Mosquitto на Raspberry Pi с помощью Docker
Первым шагом является установка Mosquitto на Raspberry Pi. Просто помните: Mosquitto является брокером MQTT. Для этого мы будем использовать Docker, чтобы мы могли легко установить все, что нам нужно:
sudo docker pull eclipse-mosquitto
Дождитесь завершения загрузки, а затем вы можете запустить брокер MQTT:
sudo docker run -it -p 1883:1883 -p 9001:9001 eclipse-mosquitto
Это все. Сервер MQTT запущен и работает:
Установка и настройка InfluxDB
После запуска Mosquitto мы можем установить и настроить InfluxDB. Как вы, возможно, уже знаете, InfluxDB — это база данных временных рядов, в которой мы можем хранить данные в зависимости от времени.
sudo docker pull influxdb
После завершения установки можно запустить InfluxDB:
sudo docker run -d -p 8086:8086
-v influxdb:/var/lib/influxdb --name influxdb influxdb
Просто несколько вещей, чтобы заметить. В этом случае мы запускаем базу данных как deamon и создаем том для хранения данных /var/lib/influxdb
:
Как создать базу данных InfluxDB и пользователя
Следующим шагом является создание базы данных и пользователя, который получит доступ к этой базе данных. Пользователь будет использоваться Telegraf при доступе к базе данных для хранения данных, поступающих из канала MQTT.
Сначала запустите интерфейс командной строки InfluxDB:
docker exec -it influxdb influx
Далее, давайте создадим базу данных и пользователя:
create database sensors
create user "telegraf" with password "telegraf"
grant all on sensors to telegraf
С помощью этих нескольких строк мы создали базу данных с именем sensors
и пользователем с именем пользователя telegraf
и паролем telegraf
.
Установка и настройка Telegraf
Настало время установить и настроить Telegraf, компонент, который подключается к брокеру MQTT, подписанному на канал, где публикуются данные датчиков, и сохранять эту информацию в InfluxDB.
sudo docker pull telegraf
Перед использованием Telegram необходимо настроить его. Первым делом создается конфигурация по умолчанию, которую мы изменим, чтобы адаптировать ее к нашему сценарию:
sudo docker run --rm telegraf telegraf config > telegraf.conf
Теперь можно настроить Telegraf. Откройте telegraf.conf
и найдите mqtt_consumer
и добавьте / измените эти строки:
servers = ["tcp://raspberry_pi_ip:1883"]
topics = [
"sensors"
]
data_format = "influx"
Затем нам нужно изменить раздел вывода. Найдите outputs.influxdb
и добавьте / измените следующие строки:
urls = ["http://raspberry_pi_ip:8086"]
database = "sensors"
skip_database_creation = true
username = "telegraf"
password = "telegraf"
Теперь мы можем запустить Telegraf:
sudo docker run -v /home/pi/:/etc/telegraf:ro telegraf
Установка и настройка Grafana
Последний компонент, который мы установим и настроим, — это Grafana, инструмент, который создает панель мониторинга.
sudo docker pull grafana/grafana
Когда вы запускаете Grafana с помощью Docker, может быть ошибка. Если это ваш случай, вы можете следить за этим постом:
https://github.com/grafana/grafana/issues/19585#issuecomment-545016209
Тестирование соединения между InfluxDB, Mosquitto и Telegraf
Теперь, когда мы настроили все компоненты, пришло время проверить, работают ли соединения. Для этого запустим все компоненты, если они еще не запущены. Теперь загрузите MQTT.fx и установите его. Мы будем использовать MQTT.fx в качестве клиента, который публикует данные на канал датчиков:
- Запустите MQTT.fx
- Подключите его к брокеру MQTT, работающему на Raspberry Pi
- Подписаться на канал датчиков
Напишите в части сообщения следующее сообщение:
temp,site=room1 value=28
Используя это сообщение, мы добавляем измерение температуры, называемой temp, с именем тега site, равным room1, и значением равно 28. Таким образом, мы эмулируем клиента ESP8266, который отправляет данные нашему брокеру MQTT:
Перейдите к Raspberry Pi и проверьте, пришло ли сообщение и сохранены ли данные в базе данных датчиков InfluxDB:
Все работает !!!! Давайте пойдем, построим наш клиент, используя ESP8266.
Создание панели инструментов с помощью Grafana
Последний шаг — создание панели инструментов с использованием Grafana. Первым делом подключаемся к веб-интерфейсу Grafana по этой ссылке:
http://<your_raspberry_ip>:3000
Вы получите эту страницу:
Теперь выполните следующие действия:
- Войдите в Grafana используя (admin / admin)
- Сконфигурируйте источник данных, выбрав InfluxDB
- Создайте свою панель с графиками, как вы предпочитаете
Пример панели инструментов Grafana с использованием температуры и давления показан ниже:
Подключение ESP8266 к MQTT
Если вы хотите узнать больше о подключении ESP8266 к температуре и давлению публикации MQTT , воспользуйтесь одним из постов этого блога.
Заключение
В конце этого поста, мы надеемся, вы знаете, как создать систему Raspberry Pi IoT самостоятельно. Вы можете дополнительно расширить этот проект, отслеживая другие физические величины (влажность, свет и т. Д.). Вы даже можете использовать этот проект для мониторинга других аспектов и создания своих панелей мониторинга.