Innholdsfortegnelse:
- Trinn 1: Utstyr + Oppsett
- Trinn 2: Sette opp kretsen
- Trinn 3: Arduino -kode og blinkende
- Trinn 4: Raspberry Pi -kode
- Trinn 5: Sett alt sammen
- Trinn 6: Grafana -konfigurasjon og visning av dashbord
- Trinn 7: Avslutt
Video: Spor luftkvalitet ved hjelp av Grafana og Raspberry Pi: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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
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.
-
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
-
Innen bringebær Pi -terminalen, utfør en kommando for endringskatalog (cd) til "raspberry_client":
cd bringebær_klient.
-
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.
-
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.
-
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.
- 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:
-
Kjør på Raspberry Pi -terminalen
python -m serial.tools.list_ports. Dette viser alle USB -portene som støtter seriell kommunikasjon.
-
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".
-
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.
-
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
Ok, vi er nå i siste strekk! Vi vil nå bruke Grafana til å lage et enkelt dashbord.
- 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.
- Hold musepekeren over "dashbord" -ikonet i den venstre ruten - de fire rutene. Klikk på "Administrer".
- Klikk på "Nytt dashbord" på den nye siden. Klikk videre på "Legg til nytt panel".
-
Dette åpner Grafana -redaktøren. Vi lager en enkel visning som viser en enkelt beregning.
- I den høyre ruten endrer du paneltittelen til noe meningsfylt, for eksempel "Kjøkkenavlesninger". Du kan også skrive inn en valgfri beskrivelse.
- 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".
- 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.
- 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.
- 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
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:
DIY -- Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: 6 trinn
DIY || Hvordan lage en edderkopprobot som kan kontrolleres ved hjelp av smarttelefon ved hjelp av Arduino Uno: Mens du lager en edderkopprobot, kan du lære så mange ting om robotikk. Som å lage roboter er både underholdende og utfordrende. I denne videoen skal vi vise deg hvordan du lager en Spider -robot, som vi kan bruke ved hjelp av smarttelefonen vår (Androi
Spor og spor for små butikker: 9 trinn (med bilder)
Spor og spor for små butikker: Dette er et system som er laget for små butikker som skal monteres på e-sykler eller e-scootere for leveranser av kort rekkevidde, for eksempel et bakeri som ønsker å levere bakverk. Hva betyr Track and Trace? Track and trace er et system som brukes av ca
Sensorlogging ved hjelp av InfluxDB, Grafana og Hassio: 5 trinn
Sensorlogging ved hjelp av InfluxDB, Grafana og Hassio: I dette innlegget lærer vi hvordan du bruker InfluxDB for langsiktig sensordatalagring, og vi bruker Grafana for dataanalyse. Dette er en del av hjemmeautomatiseringsserien der vi lærer hvordan du konfigurerer og bruker Home Assistant, så alt dette vil bli gjort med Hassio
Overvåke akselerasjon ved bruk av Raspberry Pi og AIS328DQTR ved hjelp av Python: 6 trinn
Overvåke akselerasjon ved hjelp av Raspberry Pi og AIS328DQTR Bruke Python: Akselerasjon er begrenset, tror jeg i henhold til noen fysikklover.- Terry Riley En gepard bruker fantastisk akselerasjon og raske endringer i hastighet når jeg jager. Den raskeste skapningen i land en gang i blant bruker sitt høyeste tempo for å fange byttedyr. Den
Hvordan lage en drone ved hjelp av Arduino UNO - Lag en quadcopter ved hjelp av mikrokontroller: 8 trinn (med bilder)
Hvordan lage en drone ved hjelp av Arduino UNO | Lag en Quadcopter ved hjelp av mikrokontroller: Introduksjon Besøk min Youtube -kanal En Drone er en veldig dyr gadget (produkt) å kjøpe. I dette innlegget skal jeg diskutere hvordan jeg får det billig? Og hvordan kan du lage din egen slik til en billig pris … Vel, i India er alle materialer (motorer, ESCer