INHOUDSOPGAWE:

Volg luggehalte met Grafana en Raspberry Pi: 7 stappe
Volg luggehalte met Grafana en Raspberry Pi: 7 stappe

Video: Volg luggehalte met Grafana en Raspberry Pi: 7 stappe

Video: Volg luggehalte met Grafana en Raspberry Pi: 7 stappe
Video: Olivia Rodrigo Gets Ready for the Met Gala | Vogue 2024, November
Anonim
Volg luggehalte met Grafana en Raspberry Pi
Volg luggehalte met Grafana en Raspberry Pi

Ek was op soek na 'n klein IOT -projek en 'n vriend het aanbeveel dat ek na hierdie tutoriaal kyk:

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

Ek beveel sterk aan dat u die tutoriaal volg om die Raspberry Pi op te stel vir monitering. Hierdie handleiding sal verdere stappe voltooi in die ontwerp van 'n eenvoudige IoT -toestel wat 'n hoë fouttoleransie moontlik maak, asook hoe nuttig 'n Raspberry Pi kan wees as dit met Arduino gekoppel word.

Ek kyk ook na die doeltreffendheid en die beperking van die MQ* modelle van lugsensors. MQ* -sensors is goedkoop en redelik effektief en is baie maklik om op te stel.

In die algemeen sal dit u help om op die eenvoudigste manier aan die gang te kom met die verbinding van 'n Arduino met die internet;

Hê pret!

Stap 1: Toerusting + Opstel

Toerusting

  • Raspberry Pi met Raspbian geïnstalleer
  • Raspberry Pi kragtoevoer
  • Arduino Uno/ekwivalent
  • Manlik tot manlik USB tipe B tot tipe A (moet saam met jou Arduino kom)
  • Enige MQ* -sensor (ek het die MQ-2, 4, 5 en 135 gebruik)
  • Verskeie springdrade
  • mini broodbord

Stel op

Hierdie handleiding is bedoel as 'n sagte inleiding tot die gebruik van Arduino en Raspberry Pi - dit sal help om te weet hoe u die Linux -terminale kan gebruik. Ek neem egter nie veel ervaring met die werk aan Arduino of Raspberry Pi nie - al wat u regtig nodig het, is die toerusting en 'n nuuskierige houding.

  • U sal die stappe in hierdie tutoriaal moet voltooi.
  • Ek beveel aan dat u Secure Shell (SSH) gebruik om met die Raspberry Pi te koppel, aangesien dit u toelaat om opdragte maklik in te voer. Koppel via SSH verskil of u Windows, Linux of Mac gebruik. Linux en Mac is redelik maklik om te gebruik met betrekking tot ssh (die opdrag om SSH oop te maak is letterlik ssh). Kyk na Putty vir Windows. Ek beveel aan dat u na die skerm kyk as 'n manier om u sessie tydens die projek te onderhou.
  • U moet ook Python op Raspbian installeer. Toe ek hierdie stappe voltooi het, het ek 'n kopie gemaak van 'n ou SD -kaart wat ek gehad het van 'n vorige projek, wat reeds Python geïnstalleer het. As u verspreiding van NOOBS/Raspbian nie Python 3.7 of hoër het nie, kyk na hierdie stappe om Python uit die bron op te stel.
  • Maak kennis met git en installeer dit as dit nog nie in u verspreiding van Raspbian geïnstalleer is nie.

Stap 2: Die opstel van die stroombaan

Die opstel van die kring
Die opstel van die kring

Daar is een kring wat u in die Arduino moet opstel.

Ek het 'n skema verskaf wat u as verwysing kan gebruik.

Die skoonheid van al die MQ-* gassensors is dat sodra 'n 5 Volt- en grondaansluiting gemaak is, die insetweerstand van die Arduino se analoog penne die sensor reg laat werk.

Wees versigtig om te verseker dat die analoog verbinding van die uitbreekbord in die sensor aan die Arduino gekoppel is en nie aan die digitale verbinding nie. As u tydens 'n baie beperkte reeks waardes te staan kom, beveel ek u aan om eers u verbinding hier na te gaan.

Stap 3: Arduino -kode en flits

In die stap wat volg, verbind ons die Arduino -bord met die Raspberry Pi. Voordat ons dit doen, moet ons die Arduino met kode flits om die sensor te lees en sensor data na die Raspberry Pi te stuur. Dit kan gedoen word op enige manier dat u die kode normaalweg na die Arduino stoot. Ek het 'n derdeparty -instrument gebruik, afgesien van die Arduino IDE - daarom bevat ek die Arduino -biblioteek bo -aan. Dit is nie nodig vir ander projekte nie.

Kontroleer die kode om aan die einde van hierdie afdeling te kopieer/plak.

Wat doen die kode

Die kode is opgestel om data van vier verskillende sensors te verkry - as u verskillende soorte sensors gebruik, is dit verstandig om die name op die uitsetsignaal wat vanaf die seriële poort gestuur word, te verander.

In die lus kyk ons of die Raspberry Pi data van ons versoek. Daarom gebruik ons 'n baie eenvoudige Master/Slave -konfigurasie waar die Raspberry Pi voortdurend versoek om data aan die Arduino te rig. Dit is baie eenvoudiger as om 'n teller in die Arduino -kode te hê, omdat dit makliker is om te toets watter waardes van die Raspberry Pi werk, in plaas daarvan om nuwe waardes na die Arduino te flits.

Die arduino, sodra 'n versoek om data ontvang is, formateer die uitset as 'n GET -parameter - dit hou verband met HTTP -metodes en is eenvoudig 'n ontwerpkeuse. As u 'n kommunikasie -skema van Arduino via die seriële poort sou ontwerp, kan u maklik iets anders gebruik, solank u dit ontwerp sodat data redelik geskei kan word. Ek het GET gekies omdat dit bekend en robuust is.

Eenvoudige toetsing …

Sodra die Arduino geflits en die kode uitgevoer is, maak u die Serial Monitor van die Arduino IDE oop. As u die enkele karakter "H" stuur (verseker die hoofletter!), Kry u die hoeveelheid data. Geluk, dit werk!

'N Voorbeeld, asynchrone versamelaar van MQ-* data

#insluit
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int inkomendeByte;
voidsetup () {
pinMode (mq2, INVOER);
pinMode (mq4, INVOER);
pinMode (mq5, INVOER);
pinMode (mq135, INVOER);
Serial.begin (9600);
}
/* valuePrint druk die waarde vir hierdie etiket af.
* Skep slegs newe -effekte.
*/
voidvaluePrint (String label, int reading) {
Serial.print (etiket);
Serial.print ("=");
Serial.print (lees);
}
voidloop () {
// kyk of daar inkomende reeksdata is:
as (Serial.available ()> 0) {
// lees die oudste greep in die reeksbuffer:
// "As u Serial.read bel, word 'n greep uit die ontvangbuffer verwyder en teruggestuur na u kode"
incomingByte = Serial.read ();
// as dit 'n hoofletter H is (ASCII 72), lees die waardes en stuur dit na die frambose gasheer.
// TODO: sorg dat die boodskap altyd dieselfde lengte het
as (inkomendeByte == 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");
}
}
// lees die reeks slegs elke sekonde
vertraging (1000);
}

sien rawmain.cpp aangebied deur ❤ deur GitHub

Stap 4: Framboos Pi -kode

Noudat u die Raspberry Pi ingestel het volgens https://dzone.com/articles/raspberry-pi-iot-sensor …, kan u nou die Raspberry Client-kode gebruik wat data via MQTT na ons databasis stuur, wat ook skakel met Grafana.

  1. Maak seker dat u framboos aan die internet gekoppel is en voer dan 'n git -kloonopdrag uit om die hele kode na die Raspberry Pi te kopieer. U opdrag sal 'n bietjie soos volg lyk:

    git -kloon

  2. Voer binne die terminale van die framboos Pi 'n opdrag om die gids te verander (cd) in "raspberry_client":

    cd framboos_kliënt.

  3. U moet 'n virtuele omgewing*gebruik. Eenvoudig. Hardloop

    python3 -m venv env. Dit skep 'n virtuele omgewing genaamd "env" wat ons sal gebruik om afhanklikes te installeer.

  4. Nou moet ons ons virtuele omgewing betree. Hardloop:

    bron env/bin/aktiveer. U is nou gereed om die afhanklikheid van die projek te installeer.

  5. In die pakket wat u pas gekloon het, is daar 'n lêer genaamd requirements.txt. Maak hierdie lêer oop; U sal sien dat ons die paho-mqtt- en pyserial-pakkette benodig, sowel as hul onderskeie weergawes. U kan die inhoud van die lêer sien deur te hardloop

    katvereistes.txt. Om hierdie pakkette te installeer, ru

    pip installeer -r requirements.txt.

  6. Dit sluit die konfigurasie af.

Elke tutoriaal wat python gebruik, maak letterlik melding van Virtual env, en selfs vir hierdie klein projek noem ek dit. Met virtuele omgewings kan u weergawes van afhanklikes skei, sowel as u python -werkstroom skei - dit is 'n goeie manier om u Python -werkruimtes op te ruim. As dit die eerste keer is dat u virtuele omgewings gebruik, lees hier kortliks hieroor.

Wat doen die kode …

Die client.py -lêer sal 'n eenvoudige stel biblioteke invoer, insluitend ons eie arduinosensor. In die hooffunksie kry ons die waardes van die Arduino, publiseer die data aan die MQTT -makelaar en slaap dan vir 10 sekondes.

Die arduinosensor.py -lêer is 'n stel helpermetodes wat om die paho.mqtt -biblioteek draai, en bied ook 'n paar nuttige kommunikasie -skemas om te kommunikeer met die Arduino se vrag (sien: parse_payload). Die kode is natuurlik aan die einde van hierdie afdeling aangeheg.

'N Eenvoudige kliënt wat via 'n seriële monitor met 'n arduino -item kommunikeer. Verwag dat u die kode hier sal vind as dit openbaar word:

vanimportlibimportimport_module
invoer
invoer tyd
importarduinosensor
defmain ():
# oop gedefinieerde kliënt
start_time = time.time ()
terwyl dit waar is:
lees = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", loonvrag = lees)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
hoof ()

sien rawclient.py aangebied deur ❤ deur GitHub

Stap 5: Alles saamvoeg

Ons het die Framboos Python -kode opgestel, en ons het die Arduino -kliëntkode opgestel. Kom ons gaan na die verbinding van beide entiteite.

Kom ons koppel eers die Arduino en stel die korrekte konfigurasie op:

  1. Begin op u Raspberry Pi -terminale

    python -m serial.tools.list_ports. Dit bevat 'n lys van alle USB -poorte wat seriële kommunikasie ondersteun.

  2. Koppel nou u Arduino aan en wag ongeveer 2 sekondes totdat die Framboos dit herken. Tik in

    python -m serial.tools.list_ports weereens sal u weer die poorte wys. U sien moontlik 'n ekstra lys - as dit inderdaad die geval is, dan is hierdie nuwe inskrywing die inskrywing waarin u Arduino gekoppel is. Dit sal waarskynlik "/dev/ttyUSB0" wees.

  3. Probeer om die python -kode in u virtuele omgewing uit te voer deur python3.7 client.py uit te voer. Wag 'n paar sekondes (hoogstens tien) - as u 'n uitsondering ondervind, beteken dit dat ons die waarde vir ons com -poort op die framboospi moet verander. As u sien dat die kode 'n reël afdruk wat begin met 'Gestuur na die laai: …' Dan is dit goed om met Grafana na die laaste stap te gaan. Wenk: maak seker dat jy hardloop

    skerm -S luislang voordat u die python -kliënt begin, anders verloor u u lopende python -program as u die verbinding met u framboos -pi beëindig. Tegnies hoef u nie 'python' as die laaste parameter streng te gebruik nie, maar ek hou daarvan om my skermsessies dienooreenkomstig te noem.

    1. Om die waarde vir die COM -poort te verander, moet u 'n omgewingsveranderlike stel voordat u die kode uitvoer. U moet dit probeer vir elke moontlike uitvoerwaarde wat u kry as u python -m serial.tools.list_ports uitvoer. Byvoorbeeld, as die hoeveelheid inskrywings wat ek gekry het twee was, en die volgende was:

      • /dev/ttyUSB6
      • /dev/acm0

dan is die opdragte wat ek sou uitvoer:

PORT = "/dev/ttyUSB6" python3.7 client.py, en as dit nie werk nie, sou ek later ru

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

Sodra u hierdie stappe voltooi het, sal die kode data aan ons instroom van inflxdb -databasis oordra, wat ons in staat sal stel om ons dashboard te sien wanneer dit aan Grafana gekoppel is.

Stap 6: Grafana -konfigurasie en kontroleskerm

Grafana -konfigurasie en kontroleskerm
Grafana -konfigurasie en kontroleskerm

Goed, ons is nou in die laaste reeks! Ons sal nou Grafana gebruik om 'n eenvoudige paneelbord te skep.

  1. Koppel aan u Grafana -instansie. Aangesien u die stappe van die oorspronklike dzone -artikel gevolg het, moet u by u administrateurgebruiker kan aanmeld. Gaan voort en meld aan.
  2. Beweeg op die linkerpaneel oor die ikoon "dashboards" - die vier blokkies. Klik op "Bestuur".
  3. Klik op die nuwe bladsy op "Nuwe paneelbord". Klik verder op "Voeg nuwe paneel by".
  4. Dit maak die Grafana -redakteur oop. Ons maak 'n eenvoudige aansig wat 'n enkele metriek toon.

    1. Verander die paneltitel in die regtervenster na iets betekenisvol, soos "Kombuislesings". U kan ook 'n opsionele beskrywing invoer.
    2. Links onder, 'navraag', voeg ons 'n enkele tydreeks by. Grafana skyn regtig hier, aangesien ons maklik SQL -stellings kan skep met 'n klikgebaseerde koppelvlak. Kies "InfluxDB" onder "standaard".
    3. Nou, vir die lees van "A" - in die FROM -klousule, kies die meting "airtestt". As u na die oorspronklike python -kode in die get_values -funksie van arduinosensor.py kyk, sal u sien dat ons hierdie airtestt -tabel binne die kode definieer.
    4. Vir 'n voorbeeld, gaan ons na die "SELECT" klousule en kies veld (mq4). Oorspronklik gee ons dashboard die keuse "mean ()" - klik op hierdie keuse en kies "Verwyder". Klik dan op die plusteken en kies onder 'Aggregasies' onderskeidende () '. Dit sal spesifieke tydspunte wys. Ons kan ander maatreëls kies, maar vir eers sal ons paneel verskillende metings van mq4 toon.
    5. Klik op Stoor regs bo, en u is klaar!

As u probleme ondervind, kan u u instellings verifieer met die in die aangehegte skermkiekie.

Stap 7: Sluit af

Afsluit
Afsluit

In hierdie tutoriaal kon u 'n robuuste MQTT -netwerk opstel wat bestaan uit 'n enkele knoop en makelaar. U kon ook u IOT -data met Grafana visualiseer. Uiteindelik kon u hierdie eenvoudige stelselargitektuur saamstel uit (hopelik) die gemak van u blaaier en rekenaar via die gebruik van 'n SSH -verbinding.

Daar is 'n paar dinge waarop ons dalk wil verbeter.

  • Die sensorlesings in ons grafiek is eintlik nie akkurate sensorlesings nie - dit is die uitsetspanning van ons sensor. Hulle moet gekalibreer word. Raadpleeg hierdie blogpos vir meer besonderhede.
  • Ons framboos -pi -opset kan baie ligter gemaak word deur 'n ESP8266 -bord te gebruik wat aan die arduino gekoppel is en die pi heeltemal te verwyder. Kyk na die inleiding tot die ESP8266 -module.
  • Ons wil dalk waarskuwings byvoeg vir spesifieke geleenthede. Gelukkig bied Grafana 'n manier om dit te doen.

Ek sal nog 'n bietjie lees om u verbeelding te lok met die wêreld van IOT. Ek sien uit daarna om u te sien in die volgende instruksies!

Verdere lesings:

Aanbeveel: