Съдържание:

Проследявайте качеството на въздуха с помощта на Grafana и Raspberry Pi: 7 стъпки
Проследявайте качеството на въздуха с помощта на Grafana и Raspberry Pi: 7 стъпки

Видео: Проследявайте качеството на въздуха с помощта на Grafana и Raspberry Pi: 7 стъпки

Видео: Проследявайте качеството на въздуха с помощта на Grafana и Raspberry Pi: 7 стъпки
Видео: САМАЯ УДАЧНАЯ версия генератора для бензиновой горелки!!! 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. Използвах инструмент на трета страна освен IDE на Arduino - следователно включвам библиотеката Arduino в горната част. Това не е необходимо за други проекти.

Проверете кода за копиране/поставяне в края на този раздел.

Какво прави кодът

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

В цикъла проверяваме дали Raspberry Pi иска данни от нас. Следователно, ние използваме много проста конфигурация Master/Slave, където Raspberry Pi непрекъснато ще отправя заявки към Arduino за данни. Това е много по -просто, отколкото да имате брояч в кода на Arduino, защото е по -лесно да тествате какви стойности работят от Raspberry Pi, вместо да се налага да мигате нови стойности към Arduino.

Arduino, след като получи заявка за данни, ще форматира изхода като GET параметър - това е свързано с HTTP методите и е просто избор на дизайн. Ако трябва да проектирате комуникационна схема от Arduino през сериен порт, можете лесно да използвате всичко друго, стига да я проектирате, така че данните да бъдат разумно разделени. Избрах GET, защото е познат и здрав.

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

След като Arduino мига и кодът работи, отворете серийния монитор на Arduino IDE. Ако изпратите единичния знак „H“(осигурете неговия главен капитал!), Ще получите полезния товар от данни. Поздравления, работи!

Примерен, асинхронен колектор от MQ-* данни

#включва
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int incomingByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/* valuePrint отпечатва стойността за този етикет.
* Създава само странични ефекти.
*/
voidvaluePrint (етикет на низ, int четене) {
Serial.print (етикет);
Serial.print ("=");
Serial.print (четене);
}
voidloop () {
// вижте дали има входящи серийни данни:
if (Serial.available ()> 0) {
// прочетете най -стария байт в серийния буфер:
// "Когато извикате Serial.read, байт се премахва от буфера за получаване и се връща във вашия код"
incomingByte = Serial.read ();
// ако е главна H (ASCII 72), прочетете стойностите и ги изпратете на малиновия хост.
// TODO: уверете се, че съобщението винаги е с еднаква дължина, всеки път
if (incomingByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (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 Client, който ще изпраща данни чрез MQTT към нашата база данни, която също се свързва с Графана.

  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, както и съответните им версии. Можете да видите съдържанието на файла, като стартирате

    изисквания за котка.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
importos
importtime
importarduinosensor
defmain ():
# отворен дефиниран клиент
start_time = time.time ()
whileTrue:
четене = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", полезен товар = четене)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
main ()

вижте rawclient.py, хоствано с ❤ от GitHub

Стъпка 5: Съберете всичко заедно

Имаме настроен код на Raspberry Python и клиентски код на Arduino. Нека преминем към свързване на двете обекти заедно.

Първо, нека да свържем Arduino и да настроим правилната конфигурация:

  1. На вашия терминал Raspberry Pi стартирайте

    python -m serial.tools.list_ports. Това ще изброи всички USB портове, които поддържат серийна комуникация.

  2. Сега включете вашия Arduino и изчакайте около 2 секунди, за да го разпознае малината. Въвеждане

    python -m serial.tools.list_ports още веднъж ще ви покаже портовете отново. Може да видите допълнителен списък - ако това наистина е така, тогава този нов запис е записът, в който е свързан вашият Arduino. Това вероятно ще бъде "/dev/ttyUSB0".

  3. Опитайте да стартирате кода на python във вашата виртуална среда, като изпълните python3.7 client.py. Изчакайте няколко секунди (най -много десет) - ако срещнете изключение, това означава, че ще трябва да променим стойността за нашия com порт на малиновото пи. Ако видите, че кодът отпечатва ред, започващ с „Изпратено след полезен товар: …“След това ще бъде добре да преминете към последната стъпка с Grafana. Съвет: не забравяйте да стартирате

    екран -S python преди да стартирате клиента на python, в противен случай, когато прекратите връзката си с вашето малиново пи, ще загубите изпълнената си програма на python. Технически, не е нужно стриктно да използвате "python" като последен параметър, но ми харесва да именувам съответно екранните си сесии.

    1. За да промените стойността за COM порта, ще трябва да зададете променлива на средата, преди да стартирате кода. Ще трябва да опитате това за всяка възможна стойност на изхода, която получавате, когато стартирате python -m serial.tools.list_ports. Например, ако получените от мен записи бяха две и бяха следните:

      • /dev/ttyUSB6
      • /dev/acm0

тогава командите, които ще изпълня, ще бъдат:

PORT = "/dev/ttyUSB6" python3.7 client.py, и ако това не работеше, впоследствие щях да ru

PORT = "/dev/acm0" python3.7 client.py

След като изпълните тези стъпки, кодът ще ангажира данни с нашия екземпляр от базата данни на fluxdb, който, когато е свързан с Grafana, ще ни позволи да видим нашето табло за управление.

Стъпка 6: Конфигурация на Grafana и преглед на таблото за управление

Конфигурация на Grafana и преглед на таблото за управление
Конфигурация на Grafana и преглед на таблото за управление

Добре, сега сме в последния участък! Сега ще използваме Grafana за създаване на просто табло за управление.

  1. Свържете се с вашия екземпляр на Grafana. Тъй като сте следвали стъпките от оригиналната статия за dzone, трябва да можете да влезете с вашия администраторски потребител. Продължете и влезте.
  2. В левия прозорец задръжте курсора на мишката върху иконата „табла за управление“- четирите квадрата. Кликнете върху „Управление“.
  3. На новата страница кликнете върху „Ново табло за управление“. Освен това кликнете върху „Добавяне на нов панел“.
  4. Това отваря редактора Grafana. Ще създадем прост изглед, показващ един показател.

    1. В десния панел променете заглавието на панела на нещо смислено, като „Кухненски четения“. Можете също да въведете незадължително описание.
    2. В долния ляв ъгъл „Заявка“ще добавим единичен времеви ред. Grafana наистина блести тук, тъй като можем лесно да създаваме SQL изрази с интерфейс, базиран на кликване. Под „по подразбиране“изберете InfluxDB.
    3. Сега, за четене на "А" - в клаузата FROM изберете измерване "airtestt". Ако погледнете оригиналния код на python във функцията get_values на arduinosensor.py, ще видите, че ние дефинираме тази таблица airtestt в кода.
    4. За пример, нека отидем в клаузата "SELECT" и да изберете поле (mq4). Първоначално нашето табло за управление ще ни даде избор „mean ()“- кликнете върху този избор и изберете „Премахване“. след това щракнете върху знака плюс и под „Обобщения“изберете „отличен ()“. Това ще покаже конкретни времеви точки. Можем да изберем други мерки, но засега нашият панел ще показва различни показания от mq4.
    5. Кликнете върху Запазване горе вдясно и сте готови!

В случай, че срещнете проблеми, можете да проверите настройките си с тези в прикачената екранна снимка.

Стъпка 7: Завършете

Завършете
Завършете

В този урок успяхте да настроите здрава MQTT мрежа, съставена от един възел и брокер. Можете също така да визуализирате вашите IOT данни с помощта на Grafana. И накрая, успяхте да съставите тази проста системна архитектура от (надявам се) комфорта на вашия браузър и компютър чрез използване на SSH връзка.

Може да искаме да подобрим някои неща.

  • Показанията на сензора в нашата графика всъщност не са точни показания на сензора - те са изходното напрежение от нашия сензор. Те трябва да бъдат калибрирани, консултирайте се с тази публикация в блога за повече подробности.
  • Нашата конфигурация на малиново пи може да бъде много по -лека, като се използва платка ESP8266, свързана към arduino, и премахнете пи напълно. Вижте въведение в модула ESP8266.
  • Може да искаме да добавим сигнали за конкретни събития. За щастие, Grafana предлага начин за това.

Ще оставя още малко четене, за да примами въображението ви в света на IOT. Очаквам с нетърпение да ви видя в следващата инструкция!

Допълнителни четения:

Препоръчано: