Оглавление:
- Шаг 1: оборудование + настройка
- Шаг 2: Настройка схемы
- Шаг 3: Код Arduino и перепрошивка
- Шаг 4: код Raspberry Pi
- Шаг 5: Собираем все вместе
- Шаг 6: Конфигурация Grafana и просмотр панели инструментов
- Шаг 7. Заключение
Видео: Отслеживание качества воздуха с помощью Grafana и Raspberry Pi: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Я искал небольшой проект 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.
-
Убедитесь, что ваша малина подключена к Интернету, а затем выполните команду git clone, чтобы скопировать весь код на Raspberry Pi. Ваша команда будет выглядеть примерно так:
git clone
-
В терминале Raspberry Pi выполните команду изменения каталога (cd) на «raspberry_client»:
cd raspberry_client.
-
Вам нужно будет использовать виртуальную среду *. Простой. Запустить
python3 -m venv env. Это создаст виртуальную среду под названием «env», которую мы будем использовать для установки зависимостей.
-
Теперь нам нужно войти в нашу виртуальную среду. Запустить:
исходный env / bin / активировать. Теперь вы готовы к установке зависимостей проекта.
-
В только что клонированном пакете есть файл с именем requirements.txt. Откройте этот файл; вы увидите, что нам требуются пакеты paho-mqtt и pyserial, а также их соответствующие версии. Вы можете просмотреть содержимое файла, запустив
cat requirements.txt. Чтобы установить эти пакеты, ru
pip install -r requirements.txt.
- На этом настройка завершена.
Буквально в каждом руководстве, в котором используется 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 и настроим правильную конфигурацию:
-
На вашем терминале Raspberry Pi запустите
python -m serial.tools.list_ports. В нем будут перечислены все порты USB, поддерживающие последовательную связь.
-
Теперь подключите Arduino и подождите около 2 секунд, пока Raspberry его не распознает. Ввод
python -m serial.tools.list_ports еще раз покажет вам порты снова. Вы можете увидеть дополнительный список - если это действительно так, то эта новая запись является записью, к которой подключен ваш Arduino. Это, вероятно, будет «/ dev / ttyUSB0».
-
Попробуйте запустить код Python в своей виртуальной среде, запустив python3.7 client.py. Подождите несколько секунд (максимум десять) - если вы столкнетесь с исключением, это означает, что нам придется изменить значение для нашего com-порта на Raspberry Pi. Если вы видите, что код печатает строку, начинающуюся с «Отправлено следующие полезные данные:…», тогда вам будет хорошо перейти к последнему шагу с Grafana. Совет: не забудьте запустить
экран -S питон перед запуском клиента python, в противном случае, когда вы завершите соединение с raspberry pi, вы потеряете запущенную программу python. Технически вам не нужно строго использовать «python» в качестве последнего параметра, но мне нравится соответственно называть сеансы экрана.
-
Чтобы изменить значение 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. Поскольку вы выполнили шаги из исходной статьи о dzone, вы сможете войти в систему с правами администратора. Идите вперед и войдите.
- На левой панели наведите указатель мыши на значок «панели мониторинга» - четыре квадрата. Щелкните «Управление».
- На новой странице нажмите «Новая панель управления». Далее нажимаем «Добавить новую панель».
-
Откроется редактор Grafana. Мы создадим простое представление, показывающее одну метрику.
- На правой панели измените заголовок панели на что-нибудь значимое, например «Кухонные чтения». Вы также можете ввести необязательное Описание.
- В левом нижнем углу, «Запрос», мы добавим один временной ряд. Grafana действительно выделяется здесь, поскольку мы можем легко создавать операторы SQL с интерфейсом на основе щелчка. В разделе «по умолчанию» выберите InfluxDB.
- Теперь для чтения «A» - в предложении FROM выберите измерение «airtestt». Если вы посмотрите на исходный код Python в функции get_values файла arduinosensor.py, вы увидите, что мы определяем эту таблицу airtestt внутри кода.
- Для примера перейдем к предложению «SELECT» и выберем поле (mq4). Первоначально наша панель инструментов будет предлагать нам выбор «mean ()» - нажмите на этот выбор и выберите «Удалить». затем щелкните значок «плюс» и в разделе «Агрегаты» выберите «Отдельный ()». Это покажет конкретные моменты времени. Мы можем выбрать другие показатели, но пока наша панель будет показывать отличные показания от mq4.
- Нажмите «Сохранить» в правом верхнем углу, и все готово!
Если у вас возникнут проблемы, вы можете проверить свои настройки с настройками на прилагаемом снимке экрана.
Шаг 7. Заключение
В этом руководстве вы смогли настроить надежную сеть MQTT, состоящую из одного узла и брокера. Вы также смогли визуализировать свои данные IOT с помощью Grafana. Наконец, вы смогли составить эту простую системную архитектуру, используя (надеюсь) комфорт вашего браузера и ПК, используя соединение SSH.
Есть некоторые вещи, которые мы, возможно, захотим улучшить.
- Показания датчика на нашем графике на самом деле не являются точными показаниями датчика - это выходное напряжение нашего датчика. Их необходимо откалибровать, подробнее см. В этом сообщении в блоге.
- Нашу конфигурацию Raspberry Pi можно сделать намного более легкой, если использовать плату ESP8266, подключенную к Arduino, и полностью удалить pi. Ознакомьтесь с введением в модуль ESP8266.
- Мы можем добавить оповещения для определенных событий. К счастью, Grafana предлагает способ сделать это.
Я оставлю некоторые дополнительные материалы для чтения, чтобы увлечь ваше воображение миром Интернета вещей. Я с нетерпением жду встречи с вами в следующих инструкциях!
Дальнейшие чтения:
Рекомендуемые:
Измеритель качества воздуха в помещении: 5 шагов (с изображениями)
Измеритель качества воздуха в помещении: простой проект для проверки качества воздуха в вашем доме. Поскольку в последнее время мы часто остаемся / работаем из дома, было бы неплохо контролировать качество воздуха и напоминать себе, когда пора открывать окно и подышать свежим воздухом
Датчик качества воздуха AEROBOT V1.0: 6 шагов (с фотографиями)
Датчик качества воздуха AEROBOT V1.0: это руководство посвящено созданию недорогого и высокоточного датчика качества воздуха под названием AEROBOT. Этот проект показывает температуру, относительную влажность, плотность пыли PM 2,5 и предупреждает о качестве воздуха в окружающей среде. Он использует датчик DHT11
Простой мониторинг качества воздуха с помощью ЖК-дисплея TFT - Ameba Arduino: 3 шага
Простой мониторинг качества воздуха с помощью ЖК-дисплея TFT - Ameba Arduino: Введение Теперь, когда большинство людей остаются дома, чтобы избежать тесного контакта с потенциальным носителем вируса COVID-19, качество воздуха становится важным фактором благополучия людей, особенно в тропических странах, где использование кондиционера обязательно во время
Мониторинг качества воздуха с помощью DSM501A с ЖК-дисплеем Nokia: 7 шагов
Мониторинг качества воздуха с помощью DSM501A с ЖК-дисплеем Nokia: Здравствуйте, друзья! В этой короткой инструкции я покажу вам, как контролировать качество воздуха в вашем доме или в любом другом месте. Собрать эту станцию мониторинга качества воздуха по бюджетной цене довольно просто
Чувственная шляпа для детектора качества воздуха и газа Raspberry Pi V0.9: 8 шагов
Шляпа Sensly для детектора качества воздуха и газа Raspberry Pi V0.9: Sensly - это портативный датчик загрязнения, способный определять уровни загрязнения в воздухе с помощью своих бортовых газовых датчиков для сбора информации о различных присутствующих газах. Эта информация может быть передана прямо на ваш смартфон в режиме реального времени