INHOUDSOPGAWE:
- Stap 1: Toerusting + Opstel
- Stap 2: Die opstel van die stroombaan
- Stap 3: Arduino -kode en flits
- Stap 4: Framboos Pi -kode
- Stap 5: Alles saamvoeg
- Stap 6: Grafana -konfigurasie en kontroleskerm
- Stap 7: Sluit af
Video: Volg luggehalte met Grafana en Raspberry Pi: 7 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
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
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.
-
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
-
Voer binne die terminale van die framboos Pi 'n opdrag om die gids te verander (cd) in "raspberry_client":
cd framboos_kliënt.
-
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.
-
Nou moet ons ons virtuele omgewing betree. Hardloop:
bron env/bin/aktiveer. U is nou gereed om die afhanklikheid van die projek te installeer.
-
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.
- 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:
-
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.
-
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.
-
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.
-
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
Goed, ons is nou in die laaste reeks! Ons sal nou Grafana gebruik om 'n eenvoudige paneelbord te skep.
- 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.
- Beweeg op die linkerpaneel oor die ikoon "dashboards" - die vier blokkies. Klik op "Bestuur".
- Klik op die nuwe bladsy op "Nuwe paneelbord". Klik verder op "Voeg nuwe paneel by".
-
Dit maak die Grafana -redakteur oop. Ons maak 'n eenvoudige aansig wat 'n enkele metriek toon.
- Verander die paneltitel in die regtervenster na iets betekenisvol, soos "Kombuislesings". U kan ook 'n opsionele beskrywing invoer.
- 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".
- 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.
- 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.
- 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
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:
Eenvoudige monitering van luggehalte met TFT LCD-skerm- Ameba Arduino: 3 stappe
Eenvoudige monitering van luggehalte met TFT LCD-skerm-Ameba Arduino: Inleiding Noudat die meeste mense tuis bly om noue kontak met moontlike COVID-19-virusdraer te vermy, word luggehalte 'n belangrike faktor vir mense se welstand, veral in tropiese lande waar lugversorging is 'n moet tydens die dag
Luggehalte -monitering met DSM501A met Nokia LCD: 7 stappe
Monitering van luggehalte met DSM501A Met Nokia LCD: Hallo vriende! In hierdie kort instruksies sal ek u wys hoe u die lugkwaliteit by u huis of op enige plek kan monitor
Volg versnellingsvariasies met framboos Pi en MMA7455 met behulp van Python: 6 stappe
Volg versnellingsvariasies met Raspberry Pi en MMA7455 met behulp van Python: ek het nie gestruikel nie, ek het swaartekrag getoets. Dit werk nog steeds … 'n Voorstelling van 'n versnelde ruimtependel het verduidelik dat 'n klok op die hoogste punt van die pendelbus vinniger as een by die basis sou kies as gevolg van die uitbreiding van gravitasietyd. Sommige
Monitering van luggehalte met behulp van deeltjiesfoton: 11 stappe (met foto's)
Monitering van luggehalte met behulp van deeltjiefoton: In hierdie projek word PPD42NJ deeltjesensor gebruik om die luggehalte (PM 2.5) in die lug met Particle Photon te meet. Dit wys nie net die data op deeltjiekonsole en dweet.io nie, maar dui ook die luggehalte aan met behulp van RGB LED deur dit te verander
Hoe om 'n lyn te volg met behulp van Arduino: 8 stappe (met foto's)
Hoe om 'n lynvolgster te maak met behulp van Arduino: As u aan die gang is met robotika, is een van die eerste projekte wat 'n beginner maak, 'n lynvolger. Dit is 'n spesiale speelgoedmotor met 'n eiendom om langs 'n lyn te loop wat gewoonlik swart van kleur is en in teenstelling met die agtergrond