Indholdsfortegnelse:

Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi: 7 trin
Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi: 7 trin

Video: Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi: 7 trin

Video: Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi: 7 trin
Video: Ugens Tip på Golf.dk: Chip som du putter 2024, November
Anonim
Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi
Spor luftkvalitet ved hjælp af Grafana og Raspberry Pi

Jeg ledte efter et lille lille IOT -projekt, og en ven anbefalede, at jeg tjekkede denne vejledning:

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

Jeg anbefaler stærkt at følge vejledningen til at følge med i opsætningen af en Raspberry Pi til overvågning. Denne vejledning gennemfører yderligere trin i designet af en simpel IoT -enhed, der giver mulighed for en høj fejltolerance, samt hvor nyttig en Raspberry Pi kan være, når den er parret med Arduino.

Jeg går også ind på effektiviteten og en vis begrænsning af MQ* -modellerne for luftsensorer. MQ* sensorer er billige og rimelig effektive og er super nemme at opsætte.

Samlet set vil dette hjælpe dig med at komme i gang med at forbinde en Arduino til internettet på den enkleste måde og muliggøre brug af lettere fodaftrykmoduler (re: ESP8266).

Hav det sjovt!

Trin 1: Udstyr + Opsætning

Udstyr

  • Raspberry Pi med Raspbian installeret
  • Raspberry Pi strømforsyning
  • Arduino Uno/ækvivalent
  • Mand til mand USB type B til type A (skal leveres med din Arduino)
  • Enhver af MQ* sensorer (jeg brugte MQ-2, 4, 5 og 135)
  • Assorterede jumperwires
  • mini brødbræt

Opsætning

Denne vejledning er ment som en skånsom introduktion til brug af Arduino og Raspberry Pi - det vil hjælpe med at vide, hvordan man bruger linux -terminalen. Jeg antager dog ikke megen erfaring med at arbejde på Arduino eller Raspberry Pi - alt hvad du virkelig har brug for er udstyret og en nysgerrig holdning.

  • Du bliver nødt til at fuldføre trinene i denne vejledning.
  • Jeg anbefaler, at du bruger Secure Shell (SSH) til at kommunikere med Raspberry Pi, da dette giver dig mulighed for let at indtaste kommandoer. Tilslutning via SSH er forskellig, om du bruger Windows, Linux eller Mac. Linux og Mac er ret nemme at bruge med hensyn til ssh (kommandoen til at åbne SSH er bogstaveligt talt ssh). Tjek Putty til Windows. Jeg anbefaler, at du tjekker skærmen som en måde at vedligeholde din session under projektet.
  • Du skal også installere Python på Raspbian. Da jeg gennemførte disse trin, lavede jeg en kopi af et gammelt SD -kort, jeg havde liggende fra et tidligere projekt, som allerede havde Python installeret. Hvis din distribution af NOOBS/Raspbian ikke har Python 3.7 eller nyere, skal du tjekke disse trin for at kompilere Python fra kilde.
  • Lær git at kende, og installer det, hvis det ikke allerede er installeret i din distribution af Raspbian.

Trin 2: Opsætning af kredsløbet

Opsætning af kredsløbet
Opsætning af kredsløbet

Der er et kredsløb, du skal konfigurere i Arduino.

Jeg har givet en skematisk oversigt, som du kan bruge som reference.

Det smukke ved alle MQ-* gassensorerne er, at når en 5 Volt og jordforbindelse er foretaget, tillader inputmodstanden fra Arduino's analoge ben sensoren at fungere korrekt.

Vær omhyggelig med at sikre, at den analoge forbindelse fra breakout -kortet i sensoren er tilsluttet Arduino og ikke den digitale forbindelse. Hvis du står over for et meget snævert interval af værdier, når du tester, anbefaler jeg, at du først tjekker din forbindelse her.

Trin 3: Arduino -kode og blinkende

I trinnet efter denne forbinder vi Arduino -kortet til Raspberry Pi. Inden vi gør dette, skal vi blinke Arduino med kode for at læse sensoren samt overføre sensordata til Raspberry Pi. Dette kan gøres på enhver måde, som du normalt skubber kode til Arduino. Jeg brugte et tredjepartsværktøj bortset fra Arduino IDE - derfor inkluderer jeg Arduino -biblioteket øverst. Dette er ikke nødvendigt for andre projekter.

Kontroller koden for at kopiere/indsætte i slutningen af dette afsnit.

Hvad gør koden

Koden er konfigureret til at hente data fra fire forskellige sensorer - hvis du bruger forskellige typer sensorer, vil det være fornuftigt at ændre navnene på udgangssignalet, der sendes fra den serielle port.

I sløjfen kontrollerer vi, om Raspberry Pi anmoder om data fra os. Derfor bruger vi en meget enkel Master/Slave -konfiguration, hvor Raspberry Pi løbende vil sende anmodninger til Arduino om data. Dette er meget enklere end at have en tæller i Arduino -koden, fordi det er lettere at teste, hvilke værdier der fungerer fra Raspberry Pi, i stedet for at skulle blinke nye værdier til Arduino.

Arduinoen, når den har modtaget en anmodning om data, formaterer output som en GET -parameter - dette er relateret til HTTP -metoder og er simpelthen et designvalg. Hvis du skulle designe et kommunikationsskema fra Arduino via Serial Port, kunne du let gå til alt andet, så længe du designer det, så data er rimeligt adskilt. Jeg valgte GET, fordi det er velkendt og robust.

Simpel test…

Når du har blinket Arduino og koden kører, skal du åbne Arduino IDEs serielle skærm. Hvis du sender det enkelte tegn "H" (sørg for dets kapital!) Får du nyttelasten med data. Tillykke, det virker!

En prøve, asynkron samler af MQ-* data

#omfatte
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 udskriver værdien for denne etiket.
* Skaber kun bivirkninger.
*/
voidvaluePrint (String label, int reading) {
Serial.print (etiket);
Serial.print ("=");
Serial.print (læsning);
}
voidloop () {
// se om der er indgående serielle data:
hvis (Serial.available ()> 0) {
// læs den ældste byte i den serielle buffer:
// "Når du ringer til Serial.read, fjernes en byte fra modtagerbufferen og returneres til din kode"
incomingByte = Serial.read ();
// hvis det er et stort H (ASCII 72), læs værdierne og send dem til hindbærværten.
// TODO: Sørg for, at meddelelsen altid er den samme længde, hver gang
hvis (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");
}
}
// læs serien kun hvert sekund
forsinkelse (1000);
}

se rawmain.cpp hostet af ❤ af GitHub

Trin 4: Raspberry Pi -kode

Nu hvor du har konfigureret Raspberry Pi i henhold til https://dzone.com/articles/raspberry-pi-iot-sensor …, kan du nu køre Raspberry Client-koden, der sender data via MQTT til vores database, som også forbinder til Grafana.

  1. Sørg for, at din hindbær er forbundet til internettet, og udfør derefter en git -klon -kommando for at kopiere hele koden til Raspberry Pi. Din kommando vil se lidt ud:

    git -klon

  2. I hindbær Pi -terminalen skal du udføre en kommando med ændringskatalog (cd) til "raspberry_client":

    cd hindbær_klient.

  3. Du skal bruge et virtuelt miljø*. Enkel. Løb

    python3 -m venv env. Dette vil skabe et virtuelt miljø kaldet "env", som vi vil bruge til at installere afhængigheder.

  4. Nu skal vi ind i vores virtuelle miljø. Løb:

    kilde env/bin/aktivere. Du er nu klar til at installere projektets afhængigheder.

  5. I den pakke, du lige har klonet, er der en fil kaldet requirements.txt. Åbn denne fil; du vil se, at vi kræver pakkerne paho-mqtt og pyserial samt deres respektive versioner. Du kan se filens indhold ved at køre

    kat krav.txt. For at installere disse pakker skal ru

    pip install -r krav.txt.

  6. Dette afslutter konfigurationen.

Bogstaveligt talt hver tutorial, der bruger python, nævner Virtual env, og selv for dette lille projekt nævner jeg. Virtuelle miljøer giver dig mulighed for at adskille versioner af afhængigheder samt adskille din python -arbejdsgang - Det er en god måde at rydde op i dine Python -arbejdsområder. Hvis det er første gang, du bruger virtuelle miljøer, kan du læse dem kort her.

Hvad gør koden …

Filen client.py importerer et enkelt sæt biblioteker, herunder vores egen arduinosensor. I hovedfunktionen får vi værdierne fra Arduino, offentliggør dataene til MQTT -mægleren og sover derefter i 10 sekunder.

Arduinosensor.py -filen er et sæt hjælpermetoder, der omslutter paho.mqtt -biblioteket, samt giver et nyttigt kommunikationsskema til kommunikation med Arduinos nyttelast (se: parse_payload). Koden er naturligvis vedhæftet i slutningen af dette afsnit.

En simpel klient, der kommunikerer med et arduino -element via seriel skærm. Forvent at finde koden her, når den bliver offentlig:

fraimportlibimportimport_module
importoer
importtid
importarduinosensor
defmain ():
# åben defineret klient
start_time = time.time ()
whileTrue:
læsning = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", nyttelast = læsning)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
main ()

se rawclient.py hostet af ❤ af GitHub

Trin 5: Sæt det hele sammen

Vi har konfigureret Raspberry Python -koden, og vi har konfigureret Arduino -klientkoden. Lad os gå videre til at forbinde begge enheder sammen.

Lad os først forbinde Arduino og konfigurere den korrekte konfiguration:

  1. Kør på din Raspberry Pi -terminal

    python -m serial.tools.list_ports. Dette viser alle de USB -porte, der understøtter seriel kommunikation.

  2. Tilslut nu din Arduino og vent cirka 2 sekunder, indtil hindbæret genkender det. Indtastning

    python -m serial.tools.list_ports igen vil vise dig portene igen. Du kan muligvis se en ekstra fortegnelse dukke op - hvis det virkelig er tilfældet, så er denne nye post den post, din Arduino er forbundet til. Dette vil sandsynligvis være "/dev/ttyUSB0".

  3. Prøv at køre python -koden i dit virtuelle miljø ved at køre python3.7 client.py. Vent et par sekunder (højst ti) - hvis du står over for en undtagelse, betyder det, at vi bliver nødt til at ændre værdien for vores com -port på hindbærpi. Hvis du ser, at koden udskriver en linje, der starter med "Sendt efter nyttelast: …" Så vil du være god til at gå videre til det sidste trin med Grafana. Tip: sørg for at køre

    skærm -S python før du starter python -klienten, ellers når du afslutter din forbindelse til din hindbær pi, mister du dit kørende python -program. Teknisk behøver du ikke strengt bruge "python" som den sidste parameter, men jeg kan godt lide at navngive mine skærmsessioner i overensstemmelse hermed.

    1. For at ændre værdien for COM -porten skal du indstille en miljøvariabel, før koden køres. Du bliver nødt til at prøve dette for hver mulig outputværdi, du fik, når du kørte python -m serial.tools.list_ports. For eksempel, hvis mængden af poster, jeg opnåede, var to og var følgende:

      • /dev/ttyUSB6
      • /dev/acm0

så ville kommandoerne jeg ville køre være:

PORT = "/dev/ttyUSB6" python3.7 client.py, og hvis det ikke skulle fungere, ville jeg efterfølgende ru

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

Når du har udført disse trin, vil koden overføre data til vores instream af database database, som, når den er forbundet til Grafana, giver os mulighed for at se vores dashboard.

Trin 6: Grafana -konfiguration og visning af dashboard

Grafana -konfiguration og visning af dashboard
Grafana -konfiguration og visning af dashboard

Okay, vi er nu i den sidste strækning! Vi vil nu bruge Grafana til at oprette et simpelt dashboard.

  1. Opret forbindelse til din Grafana -instans. Da du fulgte trinene fra den originale dzone -artikel, skulle du være i stand til at logge ind med din administratorbruger. Fortsæt og log ind.
  2. Hold musen over "dashboards" -ikonet i den venstre rude - de fire firkanter. Klik på "Administrer".
  3. På den nye side skal du klikke på "Nyt instrumentbræt". Klik yderligere på "Tilføj nyt panel".
  4. Dette åbner Grafana -editoren. Vi opretter en enkel visning, der viser en enkelt metrik.

    1. I højre rude skal du ændre paneltitlen til noget meningsfuldt, f.eks. "Køkkenaflæsning". Du kan også indtaste en valgfri beskrivelse.
    2. Nederst til venstre, "Forespørgsel", tilføjer vi en enkelt tidsserie. Grafana skinner virkelig her, da vi nemt kan oprette SQL -sætninger med et klikbaseret interface. Vælg "InfluxDB" under "standard".
    3. Nu, for at læse "A" - i FROM -klausulen, vælg måling "airtestt". Hvis du ser på den originale pythonkode i funktionen get_values for arduinosensor.py, vil du se, at vi definerer denne airtestt -tabel i koden.
    4. For en prøve, lad os gå til "SELECT" -klausulen og vælge felt (mq4). Oprindeligt vil vores dashboard give os valget "mean ()" - klik på dette valg og vælg "Fjern". klik derefter på plustegnet, og vælg "særskilt ()" under "Sammenlægninger". Dette viser specifikke tidspunkter. Vi kan vælge andre målinger, men foreløbig viser vores panel forskellige aflæsninger fra mq4.
    5. Klik på Gem øverst til højre, og du er færdig!

Hvis du støder på problemer, kan du bekræfte dine indstillinger med dem på det vedhæftede skærmbillede.

Trin 7: Afslut

Wrap Up
Wrap Up

I denne vejledning kunne du oprette et robust MQTT -netværk sammensat af en enkelt knude og mægler. Du var også i stand til at visualisere dine IOT -data ved hjælp af Grafana. Endelig var du i stand til at sammensætte denne enkle systemarkitektur ud fra (forhåbentlig) komfort i din browser og pc via brug af en SSH -forbindelse.

Der er nogle ting, vi måske vil forbedre.

  • Sensormålingerne i vores graf er faktisk ikke nøjagtige sensoraflæsninger - de er udgangsspændingen fra vores sensor. De skal kalibreres. Se dette blogindlæg for flere detaljer.
  • Vores hindbær pi -konfiguration kan gøres meget mere let ved at bruge et ESP8266 -kort forbundet til arduinoen og fjerne pi'en helt. Tjek en introduktion til ESP8266 -modulet.
  • Vi vil måske tilføje advarsler til bestemte begivenheder. Heldigvis tilbyder Grafana en måde at gøre det på.

Jeg vil forlade yderligere læsning for at lokke din fantasi med IOT -verdenen. Jeg glæder mig til at se dig i den næste instruktive!

Yderligere læsninger:

Anbefalede: