Оглавление:

Отслеживание качества воздуха с помощью Grafana и Raspberry Pi: 7 шагов
Отслеживание качества воздуха с помощью Grafana и Raspberry Pi: 7 шагов

Видео: Отслеживание качества воздуха с помощью Grafana и Raspberry Pi: 7 шагов

Видео: Отслеживание качества воздуха с помощью Grafana и Raspberry Pi: 7 шагов
Видео: Внедрение Системы Мониторинга и Визуализации (OEE) с IIoT на Node-Red и оборудовании OMRON 2024, Ноябрь
Anonim
Отслеживайте качество воздуха с помощью Grafana и Raspberry Pi
Отслеживайте качество воздуха с помощью Grafana и Raspberry Pi

Я искал небольшой проект IOT, и друг порекомендовал мне ознакомиться с этим руководством:

dzone.com/articles/raspberry-pi-iot-sensor…

Я настоятельно рекомендую следовать руководству по настройке Raspberry Pi для мониторинга. В этом руководстве будут завершены дальнейшие шаги по разработке простого устройства IoT, обеспечивающего высокую устойчивость к ошибкам, а также того, насколько полезным может быть Raspberry Pi в паре с Arduino.

Я также обращаю внимание на эффективность и некоторые ограничения датчиков воздуха моделей MQ *. Датчики MQ * дешевы, достаточно эффективны и очень просты в установке.

В целом это поможет вам приступить к подключению Arduino к Интернету самым простым способом и установит путь к использованию более легких модулей (re: ESP8266).

Повеселись!

Шаг 1: оборудование + настройка

Оборудование

  • Raspberry Pi с установленным Raspbian
  • Блок питания Raspberry Pi
  • Arduino Uno / аналог
  • От мужчины к мужчине USB типа B к типу A (должен поставляться с вашим Arduino)
  • Любой из датчиков MQ * (я использовал MQ-2, 4, 5 и 135)
  • Ассорти из перемычек
  • мини-макет

Настраивать

Это руководство задумано как мягкое введение в использование Arduino и Raspberry Pi - оно поможет узнать, как использовать терминал Linux. Однако я не предполагаю большого опыта работы с Arduino или Raspberry Pi - все, что вам действительно нужно, это предоставленное оборудование и любопытное отношение.

  • Вам нужно будет выполнить шаги, описанные в этом руководстве.
  • Я рекомендую вам использовать Secure Shell (SSH) для взаимодействия с Raspberry Pi, так как это позволяет легко вводить команды. Подключение через SSH отличается от того, используете ли вы Windows, Linux или Mac. Linux и Mac довольно просты в использовании в отношении ssh (команда для открытия SSH буквально ssh). Попробуйте Putty для Windows. Я рекомендую вам проверить экран как способ поддерживать сеанс во время проекта.
  • Вам также потребуется установить Python на Raspbian. Когда я выполнил эти шаги, я сделал копию старой SD-карты, которая лежала у меня из предыдущего проекта, в котором уже был установлен Python. Если в вашем дистрибутиве NOOBS / Raspbian нет Python 3.7 или более поздней версии, выполните следующие действия, чтобы скомпилировать Python из исходного кода.
  • Ознакомьтесь с git и установите его, если он еще не установлен в вашем дистрибутиве Raspbian.

Шаг 2: Настройка схемы

Настройка схемы
Настройка схемы

Есть одна схема, которую вам нужно настроить в Arduino.

Я предоставил схему, которую вы можете использовать в качестве справки.

Прелесть всех датчиков газа MQ- * заключается в том, что после подключения 5 В и заземления входное сопротивление аналоговых выводов Arduino позволяет датчику работать правильно.

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

Шаг 3: Код Arduino и перепрошивка

На следующем шаге мы подключим плату Arduino к Raspberry Pi. Прежде чем мы это сделаем, нам нужно прошить Arduino кодом для чтения датчика, а также для передачи данных датчика на Raspberry Pi. Это можно сделать любым способом, которым вы обычно отправляете код в Arduino. Я использовал сторонний инструмент помимо Arduino IDE, поэтому я включил библиотеку Arduino вверху. Для других проектов в этом нет необходимости.

Проверьте код, который нужно скопировать / вставить, в конце этого раздела.

Что делает код

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

В цикле мы проверяем, запрашивает ли Raspberry Pi данные у нас. Следовательно, мы используем очень простую конфигурацию Master / Slave, в которой Raspberry Pi будет постоянно запрашивать данные в Arduino. Это намного проще, чем иметь счетчик в коде Arduino, потому что легче проверить, какие значения работают с Raspberry Pi, вместо того, чтобы загружать новые значения в Arduino.

Arduino, получив запрос данных, отформатирует вывод как параметр GET - это связано с методами HTTP и является просто выбором дизайна. Если бы вам нужно было разработать схему связи из Arduino через последовательный порт, вы могли бы легко пойти на что-нибудь еще, если вы спроектируете ее так, чтобы данные были разумно разделены. Я выбрал GET, потому что он знаком и надежен.

Простое тестирование…

После прошивки Arduino и запуска кода откройте Serial Monitor в Arduino IDE. Если вы отправите одиночный символ «H» (убедитесь, что он заглавная!), Вы получите полезную нагрузку данных. Поздравляю, все работает!

Пример асинхронного сборщика данных MQ- *

#включают
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int incomingByte;
voidsetup () {
pinMode (mq2, ВХОД);
pinMode (mq4, ВХОД);
pinMode (mq5, ВХОД);
pinMode (mq135, ВХОД);
Serial.begin (9600);
}
/ * valuePrint печатает значение для этой метки.
* Создает только побочные эффекты.
*/
voidvaluePrint (String label, int чтение) {
Serial.print (этикетка);
Serial.print ("=");
Serial.print (чтение);
}
voidloop () {
// посмотрим, есть ли входящие последовательные данные:
if (Serial.available ()> 0) {
// считываем самый старый байт в последовательном буфере:
// «Когда вы вызываете Serial.read, байт удаляется из приемного буфера и возвращается в ваш код»
incomingByte = Serial.read ();
// если это заглавная H (ASCII 72), считываем значения и отправляем их на хост Raspberry.
// ЗАДАЧА: убедитесь, что сообщение всегда одинаковой длины, каждый раз
if (incomingByte == 72) {
int mq2Reading = аналоговое чтение (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = аналоговое чтение (mq5);
int mq135Reading = аналоговое чтение (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Reading);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Reading);
Serial.print ("&");
valuePrint ("mq135", mq135Reading);
Serial.print ("\ n");
}
}
// читаем серийник только каждую секунду
задержка (1000);
}

просмотреть rawmain.cpp, размещенный на ❤ на GitHub

Шаг 4: код Raspberry Pi

Теперь, когда вы настроили Raspberry Pi в соответствии с https://dzone.com/articles/raspberry-pi-iot-sensor…, теперь вы можете запустить код клиента Raspberry, который будет отправлять данные через MQTT в нашу базу данных, которая также подключается к Grafana.

  1. Убедитесь, что ваша малина подключена к Интернету, а затем выполните команду git clone, чтобы скопировать весь код на Raspberry Pi. Ваша команда будет выглядеть примерно так:

    git clone

  2. В терминале Raspberry Pi выполните команду изменения каталога (cd) на «raspberry_client»:

    cd raspberry_client.

  3. Вам нужно будет использовать виртуальную среду *. Простой. Запустить

    python3 -m venv env. Это создаст виртуальную среду под названием «env», которую мы будем использовать для установки зависимостей.

  4. Теперь нам нужно войти в нашу виртуальную среду. Запустить:

    исходный env / bin / активировать. Теперь вы готовы к установке зависимостей проекта.

  5. В только что клонированном пакете есть файл с именем requirements.txt. Откройте этот файл; вы увидите, что нам требуются пакеты paho-mqtt и pyserial, а также их соответствующие версии. Вы можете просмотреть содержимое файла, запустив

    cat requirements.txt. Чтобы установить эти пакеты, ru

    pip install -r requirements.txt.

  6. На этом настройка завершена.

Буквально в каждом руководстве, в котором используется python, упоминается Virtual env, и даже для этого небольшого проекта я упомяну. Виртуальные среды позволяют разделять версии зависимостей, а также рабочий процесс Python - это хороший способ навести порядок в рабочих пространствах Python. Если вы впервые используете виртуальные среды, прочтите их здесь.

Что делает код…

Файл client.py импортирует простой набор библиотек, включая наш собственный датчик arduinosensor. В основной функции мы получим значения от Arduino, опубликуем данные в брокере MQTT, а затем спим на 10 секунд.

Файл arduinosensor.py представляет собой набор вспомогательных методов, которые охватывают библиотеку paho.mqtt, а также предоставляют некоторую полезную схему связи для связи с полезной нагрузкой Arduino (см. Parse_payload). Конечно, код прилагается в конце этого раздела.

Простой клиент, который обменивается данными с элементом Arduino через последовательный монитор. Ожидайте найти здесь код, когда он станет общедоступным:

fromimportlibimportimport_module
импорт
время импорта
импортный датчик
defmain ():
# открытый определенный клиент
start_time = time.time ()
whileTrue:
чтение = arduinosensor.get_values (os.environ.get ('ПОРТ', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", полезная нагрузка = чтение)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
главный()

просмотреть rawclient.py, размещенный на ❤ на GitHub

Шаг 5: Собираем все вместе

У нас настроен код Raspberry Python и настроен клиентский код Arduino. Перейдем к соединению обеих сущностей вместе.

Сначала подключим Arduino и настроим правильную конфигурацию:

  1. На вашем терминале Raspberry Pi запустите

    python -m serial.tools.list_ports. В нем будут перечислены все порты USB, поддерживающие последовательную связь.

  2. Теперь подключите Arduino и подождите около 2 секунд, пока Raspberry его не распознает. Ввод

    python -m serial.tools.list_ports еще раз покажет вам порты снова. Вы можете увидеть дополнительный список - если это действительно так, то эта новая запись является записью, к которой подключен ваш Arduino. Это, вероятно, будет «/ dev / ttyUSB0».

  3. Попробуйте запустить код Python в своей виртуальной среде, запустив python3.7 client.py. Подождите несколько секунд (максимум десять) - если вы столкнетесь с исключением, это означает, что нам придется изменить значение для нашего com-порта на Raspberry Pi. Если вы видите, что код печатает строку, начинающуюся с «Отправлено следующие полезные данные:…», тогда вам будет хорошо перейти к последнему шагу с Grafana. Совет: не забудьте запустить

    экран -S питон перед запуском клиента python, в противном случае, когда вы завершите соединение с raspberry pi, вы потеряете запущенную программу python. Технически вам не нужно строго использовать «python» в качестве последнего параметра, но мне нравится соответственно называть сеансы экрана.

    1. Чтобы изменить значение COM-порта, вам нужно будет установить переменную среды перед запуском кода. Вам нужно будет попробовать это для всех возможных значений вывода, которые вы получили при запуске python -m serial.tools.list_ports. Например, если я получил две записи, и они будут следующими:

      • / dev / ttyUSB6
      • / dev / acm0

то команды, которые я выполняю, будут такими:

ПОРТ = "/ dev / ttyUSB6" python3.7 client.py, и если бы это не сработало, я бы впоследствии ru

ПОРТ = "/ dev / acm0" python3.7 client.py

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

Шаг 6: Конфигурация Grafana и просмотр панели инструментов

Конфигурация Grafana и просмотр панели инструментов
Конфигурация Grafana и просмотр панели инструментов

Хорошо, мы на последнем этапе! Теперь мы будем использовать Grafana для создания простой панели инструментов.

  1. Подключитесь к вашему экземпляру Grafana. Поскольку вы выполнили шаги из исходной статьи о dzone, вы сможете войти в систему с правами администратора. Идите вперед и войдите.
  2. На левой панели наведите указатель мыши на значок «панели мониторинга» - четыре квадрата. Щелкните «Управление».
  3. На новой странице нажмите «Новая панель управления». Далее нажимаем «Добавить новую панель».
  4. Откроется редактор Grafana. Мы создадим простое представление, показывающее одну метрику.

    1. На правой панели измените заголовок панели на что-нибудь значимое, например «Кухонные чтения». Вы также можете ввести необязательное Описание.
    2. В левом нижнем углу, «Запрос», мы добавим один временной ряд. Grafana действительно выделяется здесь, поскольку мы можем легко создавать операторы SQL с интерфейсом на основе щелчка. В разделе «по умолчанию» выберите InfluxDB.
    3. Теперь для чтения «A» - в предложении FROM выберите измерение «airtestt». Если вы посмотрите на исходный код Python в функции get_values файла arduinosensor.py, вы увидите, что мы определяем эту таблицу airtestt внутри кода.
    4. Для примера перейдем к предложению «SELECT» и выберем поле (mq4). Первоначально наша панель инструментов будет предлагать нам выбор «mean ()» - нажмите на этот выбор и выберите «Удалить». затем щелкните значок «плюс» и в разделе «Агрегаты» выберите «Отдельный ()». Это покажет конкретные моменты времени. Мы можем выбрать другие показатели, но пока наша панель будет показывать отличные показания от mq4.
    5. Нажмите «Сохранить» в правом верхнем углу, и все готово!

Если у вас возникнут проблемы, вы можете проверить свои настройки с настройками на прилагаемом снимке экрана.

Шаг 7. Заключение

Заворачивать
Заворачивать

В этом руководстве вы смогли настроить надежную сеть MQTT, состоящую из одного узла и брокера. Вы также смогли визуализировать свои данные IOT с помощью Grafana. Наконец, вы смогли составить эту простую системную архитектуру, используя (надеюсь) комфорт вашего браузера и ПК, используя соединение SSH.

Есть некоторые вещи, которые мы, возможно, захотим улучшить.

  • Показания датчика на нашем графике на самом деле не являются точными показаниями датчика - это выходное напряжение нашего датчика. Их необходимо откалибровать, подробнее см. В этом сообщении в блоге.
  • Нашу конфигурацию Raspberry Pi можно сделать намного более легкой, если использовать плату ESP8266, подключенную к Arduino, и полностью удалить pi. Ознакомьтесь с введением в модуль ESP8266.
  • Мы можем добавить оповещения для определенных событий. К счастью, Grafana предлагает способ сделать это.

Я оставлю некоторые дополнительные материалы для чтения, чтобы увлечь ваше воображение миром Интернета вещей. Я с нетерпением жду встречи с вами в следующих инструкциях!

Дальнейшие чтения:

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