Innholdsfortegnelse:

Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi: 7 trinn
Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi: 7 trinn

Video: Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi: 7 trinn

Video: Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi: 7 trinn
Video: Йога для начинающих дома с Алиной Anandee #2. Здоровое гибкое тело за 40 минут. Универсальная йога. 2024, Juli
Anonim
Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi
Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi

Jeg var på utkikk etter et lite lite IOT -prosjekt, og en venn anbefalte at jeg sjekket denne opplæringen:

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

Jeg anbefaler på det sterkeste å følge opplæringen for å følge med i konfigureringen av en Raspberry Pi for overvåking. Denne opplæringen vil fullføre ytterligere trinn i utformingen av en enkel IoT -enhet som gir høy feiltoleranse, samt hvor nyttig en Raspberry Pi kan være når den kobles sammen med Arduino.

Jeg går også inn på effektiviteten og noe begrensning av MQ* -modellene for luftsensorer. MQ* -sensorer er billige og ganske effektive, og er superenkle å sette opp.

Totalt sett vil dette hjelpe deg med å komme i gang med å koble en Arduino til internett på den enkleste måten, og legger til rette for bruk av lettere fotavtrykkmoduler (re: ESP8266).

Ha det gøy!

Trinn 1: Utstyr + Oppsett

Utstyr

  • Raspberry Pi med Raspbian installert
  • Raspberry Pi strømforsyning
  • Arduino Uno/ekvivalent
  • Mann til mann USB type B til Type A (skal komme med Arduino)
  • Enhver av MQ* -sensorene (jeg brukte MQ-2, 4, 5 og 135)
  • Assorterte hoppetråder
  • mini brødbrett

Sett opp

Denne opplæringen er ment som en skånsom introduksjon til bruk av Arduino og Raspberry Pi - det vil hjelpe å vite hvordan du bruker linux -terminalen. Imidlertid antar jeg ikke mye erfaring med å jobbe med Arduino eller Raspberry Pi - alt du egentlig trenger er utstyret som tilbys og en nysgjerrig holdning.

  • Du må fullføre trinnene i denne opplæringen.
  • Jeg anbefaler at du bruker Secure Shell (SSH) til grensesnitt med Raspberry Pi, da dette lar deg legge inn kommandoer enkelt. Tilkobling via SSH er forskjellig om du bruker Windows, Linux eller Mac. Linux og Mac er ganske enkle å bruke når det gjelder ssh (kommandoen for å åpne SSH er bokstavelig talt ssh). Sjekk ut Putty for Windows. Jeg anbefaler at du sjekker ut skjermen som en måte å vedlikeholde økten din under prosjektet.
  • Du må også installere Python på Raspbian. Da jeg fullførte disse trinnene, laget jeg en kopi av et gammelt SD -kort jeg hadde liggende fra et tidligere prosjekt, som allerede hadde Python installert. Hvis distribusjonen av NOOBS/Raspbian ikke har Python 3.7 eller nyere, sjekk ut disse trinnene for å kompilere Python fra kilde.
  • Bli kjent med git og installer den hvis den ikke allerede er installert i din distribusjon av Raspbian.

Trinn 2: Sette opp kretsen

Sette opp kretsen
Sette opp kretsen

Det er en krets du må sette opp i Arduino.

Jeg har gitt en skjematisk oversikt som du kan bruke som referanse.

Det fine med alle MQ-* gassensorene er at når en 5 Volt og jordtilkobling er gjort, lar inngangsmotstanden til Arduino's analoge pinner sensoren fungere korrekt.

Vær forsiktig med å sørge for at den analoge tilkoblingen fra bryterkortet i sensoren er koblet til Arduino og ikke den digitale tilkoblingen. Hvis du står overfor et veldig smalt verdiområde når du tester, anbefaler jeg at du sjekker tilkoblingen din her først.

Trinn 3: Arduino -kode og blinkende

I trinnet etter dette vil vi koble Arduino -kortet til Raspberry Pi. Før vi gjør dette, må vi blinke Arduino med kode for å lese sensoren samt overføre sensordata til Raspberry Pi. Dette kan gjøres på en hvilken som helst måte du vanligvis skyver kode til Arduino. Jeg brukte et tredjepartsverktøy bortsett fra Arduino IDE - derfor inkluderer jeg Arduino -biblioteket øverst. Dette er ikke nødvendig for andre prosjekter.

Kontroller koden for å kopiere/lime inn på slutten av denne delen.

Hva gjør koden

Koden er satt opp for å hente data fra fire forskjellige sensorer - hvis du bruker forskjellige typer sensorer, vil det være fornuftig å endre navnene på utgangssignalet som sendes fra serieporten.

I løkken sjekker vi om Raspberry Pi ber om data fra oss. Derfor bruker vi en veldig enkel Master/Slave -konfigurasjon der Raspberry Pi kontinuerlig vil sende forespørsler til Arduino om data. Dette er mye enklere enn å ha en teller i Arduino -koden fordi det er lettere å teste hvilke verdier som fungerer fra Raspberry Pi, i stedet for å måtte blinke nye verdier til Arduino.

Arduinoen, en gang mottatt en forespørsel om data, vil formatere utgangen som en GET -parameter - dette er relatert til HTTP -metoder og er ganske enkelt et designvalg. Hvis du skulle utforme et kommunikasjonsskjema fra Arduino via Serial Port, kan du enkelt gå til alt annet, så lenge du designer det slik at data er rimelig atskilt. Jeg valgte GET fordi det er kjent og robust.

Enkel testing …

Når du har blinket Arduino og koden kjører, åpner du Arduino IDEs serielle skjerm. Hvis du sender enkelttegnet "H" (sørg for hovedstaden!) Får du nyttelasten med data. Gratulerer, det fungerer!

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

#inkludere
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 skriver ut verdien for denne etiketten.
* Skaper bare bivirkninger.
*/
voidvaluePrint (String label, int reading) {
Serial.print (etikett);
Serial.print ("=");
Serial.print (lesing);
}
voidloop () {
// se om det er innkommende serielle data:
hvis (Serial.available ()> 0) {
// les den eldste byte i den serielle bufferen:
// "Når du ringer Serial.read, fjernes en byte fra mottaksbufferen og returneres til koden din"
incomingByte = Serial.read ();
// hvis det er et stort H (ASCII 72), les verdiene og send dem til bringebærverten.
// TODO: sørg for at meldingen alltid er like lang, 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");
}
}
// les serien bare hvert sekund
forsinkelse (1000);
}

se rawmain.cpp hostet av ❤ av GitHub

Trinn 4: Raspberry Pi -kode

Nå som du har konfigurert Raspberry Pi i henhold til https://dzone.com/articles/raspberry-pi-iot-sensor …, kan du nå kjøre Raspberry Client-koden som sender data via MQTT til databasen vår, som også kobles til Grafana.

  1. Sørg for at bringebæret er koblet til internett, og utfør deretter en git -klonekommando for å kopiere hele koden til Raspberry Pi. Kommandoen din vil se litt ut som:

    git -klon

  2. Innen bringebær Pi -terminalen, utfør en kommando for endringskatalog (cd) til "raspberry_client":

    cd bringebær_klient.

  3. Du må bruke et virtuelt miljø*. Enkel. Løpe

    python3 -m venv env. Dette vil skape et virtuelt miljø kalt "env" som vi vil bruke til å installere avhengigheter.

  4. Nå må vi gå inn i vårt virtuelle miljø. Løpe:

    kilde env/bin/aktivere. Du er nå klar til å installere avhengighetene til prosjektet.

  5. I pakken du nettopp klonet er det en fil som heter requirements.txt. Åpne denne filen; du vil se at vi krever paho-mqtt og pyserial pakker, samt deres respektive versjoner. Du kan se innholdet i filen ved å kjøre

    kattkrav. tekst. For å installere disse pakkene, ru

    pip install -r krav.txt.

  6. Dette avslutter konfigurasjonen.

Bokstavelig talt hver opplæring som bruker python nevner Virtual env, og selv for dette lille prosjektet nevner jeg. Virtuelle miljøer lar deg skille versjoner av avhengigheter, samt skille python -arbeidsflyten din - Det er en fin måte å rydde opp i Python -arbeidsområder. Hvis dette er første gang du bruker virtuelle miljøer, kan du lese deg litt om dem her.

Hva gjør koden …

Client.py -filen vil importere et enkelt sett med biblioteker, inkludert vår egen arduinosensor. I hovedfunksjonen vil vi få verdiene fra Arduino, publisere dataene til MQTT -megleren og deretter sove i 10 sekunder.

Arduinosensor.py -filen er et sett med hjelpemetoder som vikles rundt paho.mqtt -biblioteket, samt gir et nyttig kommunikasjonsskjema for å kommunisere med Arduinos nyttelast (se: parse_payload). Selvfølgelig er koden vedlagt på slutten av denne delen.

En enkel klient som kommuniserer med et arduino -element via seriell skjerm. Forvent å finne koden her når den blir offentlig:

fraimportlibimportimport_module
importos
importtid
importarduinosensor
defmain ():
# åpen definert klient
start_time = time.time ()
whileTrue:
lesing = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", nyttelast = lesing)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
hoved()

se rawclient.py hostet av ❤ av GitHub

Trinn 5: Sett alt sammen

Vi har Raspberry Python -koden satt opp, og vi har konfigurert Arduino -klientkoden. La oss gå videre til å koble begge enhetene sammen.

La oss først koble Arduino og sette opp riktig konfigurasjon:

  1. Kjør på Raspberry Pi -terminalen

    python -m serial.tools.list_ports. Dette viser alle USB -portene som støtter seriell kommunikasjon.

  2. Nå, koble til Arduino og vent ca 2 sekunder til bringebæret gjenkjenner det. Skriver inn

    python -m serial.tools.list_ports nok en gang vil vise deg portene igjen. Du kan se en ekstra oppføring dukke opp - hvis det faktisk er tilfelle, er denne nye oppføringen oppføringen som Arduino er koblet til. Dette vil sannsynligvis være "/dev/ttyUSB0".

  3. Prøv å kjøre python -koden i det virtuelle miljøet ditt ved å kjøre python3.7 client.py. Vent noen sekunder (høyst ti) - hvis du står overfor et unntak, betyr dette at vi må endre verdien for vår com -port på bringebær -pi. Hvis du ser at koden skriver ut en linje som begynner med "Sendt etter nyttelast: …" Da vil du være god til å gå videre til det siste trinnet med Grafana. Tips: sørg for å kjøre

    skjerm -S python før du starter python -klienten, hvis ikke, når du avslutter tilkoblingen til bringebær -pi, mister du det kjørende python -programmet. Teknisk trenger du ikke strengt bruke "python" som den siste parameteren, men jeg liker å navngi skjermøktene mine deretter.

    1. For å endre verdien for COM -porten, må du angi en miljøvariabel før du kjører koden. Du må prøve dette for alle mulige utgangsverdier du fikk når du kjørte python -m serial.tools.list_ports. For eksempel hvis mengden oppføringer jeg fikk var to, og var følgende:

      • /dev/ttyUSB6
      • /dev/acm0

da ville kommandoene jeg ville kjøre:

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

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

Når du har fullført disse trinnene, vil koden overføre data til vår instreamdb database -forekomst, som når vi er koblet til Grafana, lar oss se oversikten vår.

Trinn 6: Grafana -konfigurasjon og visning av dashbord

Grafana -konfigurasjon og oversikt over dashbord
Grafana -konfigurasjon og oversikt over dashbord

Ok, vi er nå i siste strekk! Vi vil nå bruke Grafana til å lage et enkelt dashbord.

  1. Koble til din Grafana -forekomst. Siden du fulgte trinnene fra den opprinnelige dzone -artikkelen, bør du kunne logge på med administratorbrukeren din. Fortsett og logg inn.
  2. Hold musepekeren over "dashbord" -ikonet i den venstre ruten - de fire rutene. Klikk på "Administrer".
  3. Klikk på "Nytt dashbord" på den nye siden. Klikk videre på "Legg til nytt panel".
  4. Dette åpner Grafana -redaktøren. Vi lager en enkel visning som viser en enkelt beregning.

    1. I den høyre ruten endrer du paneltittelen til noe meningsfylt, for eksempel "Kjøkkenavlesninger". Du kan også skrive inn en valgfri beskrivelse.
    2. Nederst til venstre, "Spørring", legger vi til en enkelt tidsserie. Grafana skinner virkelig her, ettersom vi enkelt kan lage SQL -setninger med et klikkbasert grensesnitt. Velg "InfluxDB" under "standard".
    3. Nå, for å lese "A" - i FROM -klausulen, velg måling "airtestt". Hvis du ser på den opprinnelige pythonkoden i get_values -funksjonen til arduinosensor.py, ser du at vi definerer denne airtestt -tabellen i koden.
    4. For et eksempel, la oss gå til "SELECT" -klausulen og velge feltet (mq4). Opprinnelig vil dashbordet gi oss valget "mean ()" - klikk på dette valget og velg "Fjern". klikk deretter på pluss -tegnet og velg "distinkt ()" under "Aggregasjoner". Dette vil vise bestemte tidspunkter. Vi kan velge andre tiltak, men foreløpig vil panelet vårt vise forskjellige avlesninger fra mq4.
    5. Klikk på Lagre øverst til høyre, og du er ferdig!

Hvis du får problemer, kan du bekrefte innstillingene dine med dem på det vedlagte skjermbildet.

Trinn 7: Avslutt

Slutt opp
Slutt opp

I denne opplæringen kunne du sette opp et robust MQTT -nettverk som består av en enkelt node og megler. Du var også i stand til å visualisere IOT -dataene dine ved hjelp av Grafana. Til slutt var du i stand til å komponere denne enkle systemarkitekturen ut fra (forhåpentligvis) komforten i nettleseren og PCen din ved bruk av en SSH -tilkobling.

Det er noen ting vi kanskje vil forbedre.

  • Sensoravlesningene i grafen vår er faktisk ikke nøyaktige sensoravlesninger - de er utgangsspenningen fra sensoren vår. De må kalibreres. Se dette blogginnlegget for mer informasjon.
  • Vår bringebær pi -konfigurasjon kan gjøres mye lettere når du bruker et ESP8266 -kort som er koblet til arduinoen, og fjerner pi -en helt. Sjekk en introduksjon til ESP8266 -modulen.
  • Det kan være lurt å legge til varsler for bestemte hendelser. Heldigvis tilbyr Grafana en måte å gjøre det på.

Jeg vil la litt mer lese for å lokke fantasien din med IOT -verdenen. Jeg gleder meg til å se deg i den neste instruerbare!

Ytterligere lesninger:

Anbefalt: