Мазмуну:

Grafana жана Raspberry Pi аркылуу абанын сапатын көзөмөлдөңүз: 7 кадам
Grafana жана Raspberry Pi аркылуу абанын сапатын көзөмөлдөңүз: 7 кадам

Video: Grafana жана Raspberry Pi аркылуу абанын сапатын көзөмөлдөңүз: 7 кадам

Video: Grafana жана Raspberry Pi аркылуу абанын сапатын көзөмөлдөңүз: 7 кадам
Video: Установка InfluxDB и подключение Grafana 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 -кадам: Жабдуулар + Орнотуу

Жабдуулар

  • Raspbian орнотулган Raspberry Pi
  • Raspberry Pi электр менен камсыздоо
  • Arduino Uno/Эквиваленти
  • Эркек эркек USB түрү В түрүнөн А түрүнө чейин (сиздин Arduino менен келиши керек)
  • Ар кандай MQ* сенсорлору (мен MQ-2, 4, 5 жана 135 колдонгон)
  • Түрдүү секирүүчү зымдар
  • мини нан

Жайгашуу

Бул окуу куралы Arduino жана Raspberry Pi колдонууга жумшак киришүү үчүн арналган - бул Linux терминалын кантип колдонууну билүүгө жардам берет. Бирок, мен Arduino же Raspberry Pi менен иштөө боюнча көп тажрыйбага ээ эмесмин - сизге чындыгында жабдуулар жана кызык мамиле керек.

  • Бул окуу куралындагы кадамдарды аткарышыңыз керек болот.
  • Мен сизге Raspberry Pi менен иштөө үчүн Secure Shell (SSH) колдонууну сунуштайм, анткени бул буйруктарды оңой киргизүүгө мүмкүндүк берет. SSH аркылуу туташуу Windows, Linux же Mac колдонуп жатканыңыздан айырмаланат. Linux жана Mac sshке карата колдонууга оңой (SSH ачуу буйругу түзмө -түз ssh). Windows үчүн Putty'ди карап көрүңүз. Мен сизге проект учурунда сессияңызды сактап калуу үчүн экранды текшерүүнү сунуштайм.
  • Сиз ошондой эле Pythonду Raspbianге орнотушуңуз керек. Мен бул кадамдарды бүтүргөндө, мен мурунтан эле Python орнотулган мурунку долбоордо жаткан эски SD карттын көчүрмөсүн алгам. Эгерде сиздин NOOBS/Raspbian бөлүштүрүүдө Python 3.7 же андан жогору болбосо, Pythonду булактан компиляциялоо үчүн бул кадамдарды карап көрүңүз.
  • Git менен таанышып, аны Raspbian таратууңузда орнотула элек болсо орнотуңуз.

2 -кадам: Районду орнотуу

Районду орнотуу
Районду орнотуу

Ардуинодо орнотууңуз керек болгон бир схема бар.

Мен силерге шилтеме катары колдоно турган схеманы бердим.

Бардык MQ-* газ сенсорлорунун кооздугу, 5 Вольт жана Жерге туташуу болгондон кийин, Arduino аналогдук казыктарынын кирүү каршылыгы сенсордун туура иштешине мүмкүндүк берет.

Сенсордогу аналогдук байланыштын санариптик туташуу эмес, Arduino менен туташуусун камсыз кылуу үчүн этият болуңуз. Эгерде сиз тестирлөөнүн учурунда өтө тар диапазонго туш болуп жатсаңыз, анда алгач бул жерде туташууңузду текшерүүнү сунуштайм.

3 -кадам: Arduino Code жана Flashing

Бул кадамдан кийин, биз Arduino тактасын Raspberry Pi менен байланыштырабыз. Муну жасоодон мурун, сенсорду окуу үчүн Arduino коду менен жаркылдатып, сенсордун маалыматын Raspberry Piге берүү керек. Муну ар кандай жолдор менен жасаса болот, адатта Arduino кодун киргизет. Мен Arduino IDEден башка үчүнчү жактын куралын колдондум - демек, мен Arduino китепканасын үстү жагына кошом. Бул башка долбоорлор үчүн зарыл эмес.

Бул бөлүмдүн аягында көчүрүү/чаптоо үчүн кодду текшериңиз.

Код эмне кылат

Код төрт башка сенсордон маалымат алуу үчүн орнотулган - эгерде сенсорлордун ар кандай түрлөрүн колдонсоңуз, анда Сериялык порттон жөнөтүлгөн сигналдын аталыштарын өзгөртүү акылга сыярлык болот.

Укурукта биз Raspberry Pi бизден маалымат сурап жаткандыгын текшеребиз. Демек, биз абдан жөнөкөй Master/Slave конфигурациясын колдонуп жатабыз, анда Raspberry Pi дайыма Arduinoго маалыматтарды сурап турат. Бул Arduino кодунда эсептегичке караганда алда канча жөнөкөй, анткени Arduinoго жаңы баалуулуктарды жаркыратуунун ордуна, Raspberry Piден кандай баалуулуктар иштээрин текшерүү оңой.

Ардуино, бир жолу маалымат сурамын алганда, чыгууну GET параметри катары форматтайт - бул HTTP методдоруна байланыштуу жана жөн гана дизайн тандоосу. Эгерде сиз Arduinoдон Serial Port аркылуу байланыш схемасын түзө турган болсоңуз, анда сиз башка нерсеге оңой эле бара аласыз, эгер сиз аны долбоорлосоңуз, анда маалыматтар негиздүү бөлүнгөн. Мен 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 (String label, int reading) {
Serial.print (этикетка);
Serial.print ("=");
Serial.print (окуу);
}
voidloop () {
// келе жаткан сериялык маалыматтар бар -жогун текшериңиз:
эгер (Serial.available ()> 0) {
// сериялык буфердеги эң эски байтты окуңуз:
// "Serial.read деп атаганда, байт алуу буферинен алынып, кодуңузга кайтарылат"
incomingByte = Serial.read ();
// эгерде ал H капиталы болсо (ASCII 72), баалуулуктарды окуп, аларды малина хостуна жөнөтүңүз.
// TODO: билдирүүнүн ар дайым бирдей узундугун камсыз кылыңыз
эгер (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", mq135Окуу);
Serial.print ("\ n");
}
}
// сериалды секунда сайын окуңуз
кечигүү (1000);
}

GitHub тарабынан ❤ менен өткөрүлгөн rawmain.cpp көрүү

4 -кадам: Raspberry Pi коду

Эми сиз Raspberry Pi'ди https://dzone.com/articles/raspberry-pi-iot-sensor… ылайык конфигурациялаган соң, эми MQTT аркылуу маалыматтарды биздин маалымат базасына жөнөтө турган Raspberry Client кодун иштете аласыз. Графанага туташат.

  1. Малинаңыз интернетке туташканын текшериңиз, андан кийин бүт кодду Raspberry Piге көчүрүү үчүн git clone буйругун аткарыңыз. Сиздин буйругуңуз бир аз окшош болот:

    git clone

  2. Raspberry Pi терминалынын ичинде каталог командасын (cd) "raspberry_client" кылып аткарыңыз:

    cd raspberry_client.

  3. Виртуалдык чөйрөнү колдонуу керек болот*. Жөнөкөй. Run

    python3 -m venv env. Бул көз карандылыкты орнотуу үчүн колдоно турган "env" деп аталган виртуалдык чөйрөнү түзөт.

  4. Эми биз виртуалдык чөйрөбүзгө киришибиз керек. Чуркоо:

    env/bin/activate булагы. Сиз азыр долбоордун көз карандылыгын орнотууга даярсыз.

  5. Сиз жөн гана клондогон пакетте талаптар.txt деп аталган файл бар. Бул файлды ачуу; paho-mqtt жана pyserial пакеттерин, ошондой эле алардын тиешелүү версияларын талап кылаарыбызды көрөсүз. Сиз чуркап файлдын мазмунун көрө аласыз

    мышыктын талаптары.txt. Бул пакеттерди орнотуу үчүн ru

    pip орнотуу -r талаптар.txt.

  6. Бул конфигурацияны жыйынтыктайт.

Питон колдонгон ар бир окуу куралы Virtual env жөнүндө сөз кылат, ал тургай бул кичинекей долбоор үчүн мен сөз кылам. Виртуалдык чөйрө көз карандылыктын версияларын бөлүүгө, ошондой эле python жумуш процессин бөлүүгө мүмкүндүк берет - Бул Python жумуш мейкиндигин иретке келтирүүнүн сонун жолу. Эгерде сиз виртуалдык чөйрөнү биринчи жолу колдонуп жатсаңыз, бул жерде алар жөнүндө кыскача окуп чыгыңыз.

Код эмне кылат…

Client.py файлы биздин ардуиносенсорубузду камтыган китепканалардын жөнөкөй топтомун импорттойт. Негизги функцияда биз Arduinoдан баалуулуктарды алабыз, маалыматтарды MQTT брокерине жарыялайбыз, анан 10 секунд уктайбыз.

Arduinosensor.py файлы - бул paho.mqtt китепканасын курчап турган, ошондой эле Arduino жүктөрү менен баарлашуу үчүн пайдалуу байланыш схемасын камсыз кылган жардамчы ыкмаларынын жыйындысы (караңыз: parse_payload). Албетте, код ушул бөлүмдүн аягында тиркелет.

Serdu монитор аркылуу arduino пункту менен байланышкан жөнөкөй кардар. Коом ачык болгондо бул жерден кодду табууну күтүңүз:

fromimportlibimportimport_module
importos
импорттук убакыт
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_":
негизги ()

GitHub тарабынан ❤ уюштурулган rawclient.py көрүү

5 -кадам: Бардыгын бириктирүү

Бизде Raspberry Python коду орнотулган жана бизде Arduino кардар коду орнотулган. Келгиле, эки жакты бириктирүүгө өтөлү.

Биринчиден, Arduino менен туташып, туура конфигурацияны орнотолу:

  1. Raspberry Pi терминалыңызда чуркаңыз

    python -m serial.tools.list_ports. Бул сериялык байланышты колдогон бардык USB портторун тизмектейт.

  2. Эми, Arduino сайыңыз жана Raspberry аны тааныганга чейин 2 секунд күтө туруңуз. Жазуу

    python -m serial.tools.list_ports дагы бир жолу сизге портторду көрсөтөт. Сиз кошумча листингди көрүшүңүз мүмкүн - эгер чын эле ошондой болсо, анда бул жаңы жазуу сиздин Arduino туташкан жазуу болуп саналат. Бул "/dev/ttyUSB0" болуп калышы мүмкүн.

  3. Python3.7 client.py программасын иштетүү менен виртуалдык чөйрөңүздө Python кодун иштетип көрүңүз. Бир нече секунд күтө туруңуз (эң көп дегенде он) - эгер сиз өзгөчө кырдаалга туш болсоңуз, анда биз малина piдеги com портубуздун маанисин өзгөртүүбүз керек болот. Эгерде сиз коддун "Кийинки жүктөм жөнөтүлдү: …" менен башталган сапты басып чыгарганын көрсөңүз, анда Grafana менен акыркы кадамга өтсөңүз жакшы болот. Кеңеш: чуркаганыңызды текшериңиз

    экран -S python python кардарын баштоодон мурун, антпесе, сиз малина pi менен болгон байланышыңызды токтоткондо, иштеп жаткан 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

Бул кадамдарды аткаргандан кийин, код Grafana менен туташканда, биздин панелибизди көрүүгө мүмкүндүк бере турган биздин influxdb маалымат базасынын инстанциясына маалыматтарды берет.

6 -кадам: Grafana Configuration жана Dashboard Viewing

Grafana конфигурациясы жана тактасын көрүү
Grafana конфигурациясы жана тактасын көрүү

Жарайт, биз азыр акыркы стадиядабыз! Эми Grafana колдонуп, жөнөкөй тактаны түзөбүз.

  1. Графана нускаңызга туташыңыз. Сиз баштапкы dzone макаласынын кадамдарын аткаргандыктан, сиз администратор колдонуучусу менен кире алышыңыз керек. Алдыга жана журналы.
  2. Сол панелде, "такталар тактасы" сүрөтчөсүнүн үстүнө келиңиз - төрт чарчы. "Башкаруу" баскычын чыкылдатыңыз.
  3. Жаңы баракта "Жаңы тактаны" чыкылдатыңыз. Андан ары, "Жаңы панель кошуу" баскычын чыкылдатыңыз.
  4. Бул Grafana редакторун ачат. Биз бир метриканы көрсөтүүчү жөнөкөй көрүнүштү түзөбүз.

    1. Оң панелде панелдин аталышын мааниси бар нерсеге өзгөртүңүз, мисалы, "Kitchen Readings". Сиз ошондой эле кошумча Description киргизе аласыз.
    2. Сол жактагы "Суроо", биз бир гана убакыт сериясын кошобуз. Графана чынында бул жерде жаркырап турат, анткени биз чыкылдатууга негизделген интерфейс менен SQL билдирүүлөрүн оңой эле түзө алабыз. "Демейки" астында InfluxDB тандаңыз.
    3. Эми, "А" окуу үчүн - FROM пунктунда "airtestt" өлчөгүчүн тандаңыз. Эгерде сиз arduinosensor.pyдин get_values функциясындагы түпнуска питон кодун карасаңыз, анда биз бул airtestt столун коддун ичинде аныктайбыз.
    4. Үлгү алуу үчүн, келгиле, "SELECT" пунктуна кирип, талааны (mq4) тандап алалы. Башында биздин тактабыз бизге "mean ()" тандоосун берет - бул тандоону чыкылдатып, "Remove" дегенди тандаңыз. андан кийин, кошуу белгисин чыкылдатыңыз жана "Агрегаттардын" астынан "differ ()" тандаңыз. Бул белгилүү бир убакыт чекиттерин көрсөтөт. Биз башка чараларды тандай алабыз, бирок азырынча биздин панел mq4тен айырмаланган көрсөткүчтөрдү көрсөтөт.
    5. Жогорку оң жактагы Сактоо дегенди чыкылдатыңыз, сиз бүттүңүз!

Кыйынчылыкка туш болсоңуз, тиркелген скриншоттогу жөндөөлөрүңүздү текшере аласыз.

7 -кадам: Бүтүрүү

Киришүү
Киришүү

Бул окуу куралында сиз бир түйүндөн жана брокерден турган күчтүү MQTT тармагын орното алдыңыз. Сиз ошондой эле Grafana аркылуу IOT маалыматыңызды элестете алдыңыз. Акырында, сиз бул жөнөкөй системанын архитектурасын SSH туташуусу аркылуу браузериңиздин жана компьютериңиздин ыңгайлуулугунан түзө алдыңыз.

Биз жакшыртууну каалаган кээ бир нерселер бар.

  • Биздин графиктеги сенсордун көрсөткүчтөрү чындыгында так сенсордук көрсөткүчтөр эмес - бул биздин сенсордон чыккан чыңалуу. Алар калибрлениши керек, көбүрөөк маалымат алуу үчүн бул блогго кайрылыңыз.
  • Биздин малина пи конфигурациясын arduino менен туташкан ESP8266 тактасын колдонуу менен жана пи толугу менен алып салуу менен алда канча жеңил кылууга болот. ESP8266 модулуна киришүүнү карап көрүңүз.
  • Биз белгилүү бир окуялар үчүн эскертүүлөрдү кошууну каалашыбыз мүмкүн. Бактыга жараша, Графана муну жасоонун жолун сунуштайт.

Мен IOT дүйнөсү менен элестетүү үчүн дагы бир окуу калтырам. Мен сизди кийинки көрсөтмөдө чыдамсыздык менен күтөм!

Кошумча окуу:

Сунушталууда: