Talaan ng mga Nilalaman:
- Hakbang 1: Kagamitan + Pag-set up
- Hakbang 2: Pag-set up ng Circuit
- Hakbang 3: Arduino Code at Flashing
- Hakbang 4: Raspberry Pi Code
- Hakbang 5: Pagsasama-sama sa Lahat ng Ito
- Hakbang 6: Pag-configure ng Grafana at Pagtingin sa Dashboard
- Hakbang 7: I-balot
Video: Subaybayan ang Kalidad ng Hangin Gamit ang Grafana at Raspberry Pi: 7 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
Naghahanap ako para sa isang maliit na maliit na proyekto ng IOT at inirerekomenda ng isang kaibigan na suriin ko ang tutorial na ito:
dzone.com/articles/raspberry-pi-iot-sensor…
Masidhing inirerekumenda ko ang pagsunod sa tutorial na susundan sa pagse-set up ng isang Raspberry Pi para sa pagsubaybay. Ang tutorial na ito ay makukumpleto ang karagdagang mga hakbang sa disenyo ng isang simpleng aparato ng IoT na nagbibigay-daan para sa isang mataas na pagpapaubaya sa error, pati na rin kung gaano kapaki-pakinabang ang isang Raspberry Pi na maaaring kapag ipinares sa Arduino.
Pumunta rin ako sa pagiging epektibo at medyo limitasyon ng mga modelo ng MQ * ng mga air sensor. MQ * sensor ay mura at medyo epektibo, at napakadaling i-set up.
Sa pangkalahatan ay makakatulong ito sa iyo upang makapagsimula sa pagkonekta ng isang Arduino sa internet sa pinakasimpleng paraan na posible, at nagtatakda ng paraan para sa paggamit ng mas magaan na mga module ng bakas ng paa (muling: ESP8266).
Magsaya ka!
Hakbang 1: Kagamitan + Pag-set up
Kagamitan
- Raspberry Pi na may naka-install na Raspbian
- Suplay ng kuryente ng Raspberry Pi
- Arduino Uno / Katumbas
- Lalaki sa lalaki USB type B hanggang Type A (dapat kasama ng iyong Arduino)
- Anuman sa mga sensor ng MQ * (Ginamit ko ang MQ-2, 4, 5, at 135)
- Iba't ibang mga wire ng lumulukso
- mini breadboard
Mag-set up
Ang tutorial na ito ay sinadya bilang isang banayad na intro sa paggamit ng Arduino at Raspberry Pi - makakatulong itong malaman kung paano gamitin ang linux terminal. Gayunpaman, hindi ko inaakalang maraming karanasan sa pagtatrabaho sa Arduino o Raspberry Pi - ang kailangan mo lang ay ang kagamitan na ibinigay at isang mausisa na pag-uugali.
- Kakailanganin mong kumpletuhin ang mga hakbang sa tutorial na ito.
- Inirerekumenda ko na gamitin mo ang Secure Shell (SSH) upang makipag-ugnay sa Raspberry Pi, dahil pinapayagan kang mag-input ng mga utos nang madali. Ang pagkonekta sa pamamagitan ng SSH ay magkakaiba kung gumagamit ka ng Windows, Linux o Mac. Ang Linux at Mac ay medyo madaling gamitin patungkol sa ssh (ang utos na buksan ang SSH ay literal na ssh). Suriin ang Putty para sa Windows. Inirerekumenda kong suriin mo ang screen bilang isang paraan upang mapanatili ang iyong session sa panahon ng proyekto.
- Kakailanganin mo ring i-install ang Python sa Raspbian. Nang makumpleto ko ang mga hakbang na ito, gumawa ako ng isang kopya ng isang lumang SD card na nakahiga ako mula sa isang nakaraang proyekto, na na-install na ang Python. Kung ang iyong pamamahagi ng NOOBS / Raspbian ay walang Python 3.7 o mas mataas, suriin ang mga hakbang na ito upang maipon ang Python mula sa mapagkukunan.
- Kilalanin ang git at i-install ito kung sakaling hindi pa naka-install sa iyong pamamahagi ng Raspbian.
Hakbang 2: Pag-set up ng Circuit
Mayroong isang circuit na kakailanganin mong i-set up sa Arduino.
Nagbigay ako ng isang eskematiko na maaari mong gamitin bilang isang sanggunian.
Ang kagandahan ng lahat ng MQ- * gas sensors ay sa sandaling magawa ang isang 5 Volt at Ground na koneksyon, pinapayagan ng input na paglaban ng mga analog pin ng Arduino ang sensor na gumana nang tama.
Mag-ingat upang matiyak na ang koneksyon ng Analog mula sa breakout board sa sensor ay konektado sa Arduino at hindi sa digital na koneksyon. Kung nakaharap ka sa isang napakaliit na saklaw ng mga halaga kapag sumusubok, inirerekumenda kong suriin mo muna ang iyong koneksyon dito.
Hakbang 3: Arduino Code at Flashing
Sa hakbang na sumusunod sa isang ito, ikonekta namin ang board ng Arduino sa Raspberry Pi. Bago natin ito gawin, kailangan nating i-flash ang Arduino na may code upang mabasa ang sensor pati na rin ang paglilipat ng data ng sensor sa Raspberry Pi. Maaari itong magawa sa anumang paraan na normal mong itulak ang code sa Arduino. Gumamit ako ng isang tool ng third party bukod sa Arduino IDE - samakatuwid, isinasama ko ang librong Arduino sa itaas. Hindi ito kinakailangan para sa iba pang mga proyekto.
Suriin ang code upang makopya / i-paste sa dulo ng seksyong ito.
Ano ang ginagawa ng code
Ang code ay naka-set up upang makakuha ng data mula sa apat na magkakaibang mga sensor - kung gumagamit ka ng iba't ibang mga uri ng mga sensor, magiging makatuwiran na baguhin ang mga pag-naming sa output signal na ipinadala mula sa Serial port.
Sa loop sinusuri namin kung ang Raspberry Pi ay humiling ng data mula sa amin. Samakatuwid, gumagamit kami ng isang napaka-simpleng pagsasaayos ng Master / Slave kung saan ang Raspberry Pi ay patuloy na maghihiling sa Arduino para sa data. Ito ay mas simple kaysa sa pagkakaroon ng isang counter sa Arduino code dahil mas madaling masubukan kung anong mga halaga ang gumagana mula sa Raspberry Pi, sa halip na mai-flash ang mga bagong halaga sa Arduino.
Ang arduino, sa sandaling nakatanggap ng isang kahilingan para sa data, ay mai-format ang output bilang isang parameter na GET - nauugnay ito sa mga pamamaraan ng HTTP at simpleng pagpipilian ng disenyo. Kung magdidisenyo ka ng isang iskema sa komunikasyon mula sa Arduino sa pamamagitan ng Serial Port, madali kang makakakuha ng anupaman, hangga't dinisenyo mo ito upang ang data ay makatuwirang pinaghiwalay. Pinili ko ang GET dahil pamilyar at matatag ito.
Simpleng pagsubok …
Sa sandaling ma-flash ang Arduino at tumakbo ang code, buksan ang Serial Monitor ng Arduino IDE. Kung magpapadala ka ng solong character na "H" (tiyakin ang kapital nito!) Makukuha mo ang payload ng data. Congrats, gumagana ito!
Isang sample, asynchronous na kolektor ng MQ- * data
# isama |
int mq2 = A2; |
int mq4 = A3; |
int mq5 = A4; |
int mq135 = A5; |
int papasok naByte; |
voidsetup () { |
pinMode (mq2, INPUT); |
pinMode (mq4, INPUT); |
pinMode (mq5, INPUT); |
pinMode (mq135, INPUT); |
Serial.begin (9600); |
} |
/ * Ang halaga ng print ay naglilimbag ng halaga para sa label na ito. |
* Lumilikha lamang ng mga epekto |
*/ |
voidvaluePrint (String label, int pagbabasa) { |
Serial.print (label); |
Serial.print ("="); |
Serial.print (pagbabasa); |
} |
voidloop () { |
// tingnan kung may papasok na serial data: |
kung (Serial.available ()> 0) { |
// basahin ang pinakalumang byte sa serial buffer: |
// "Kapag tumawag ka sa Serial.read isang byte ay aalisin mula sa natanggap na buffer at ibinalik sa iyong code" |
papasokByte = Serial.read (); |
// kung ito ay isang capital H (ASCII 72), basahin ang mga halaga at ipadala ang mga ito sa host ng raspberry. |
// TODO: tiyakin na ang mensahe ay palaging pareho ang haba, sa bawat oras |
kung (papasokByte == 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"); |
} |
} |
// basahin ang serial lamang bawat segundo |
pagkaantala (1000); |
} |
tingnan ang rawmain.cpp na naka-host sa ❤ ng GitHub
Hakbang 4: Raspberry Pi Code
Ngayon na na-configure mo ang Raspberry Pi ayon sa https://dzone.com/articles/raspberry-pi-iot-sensor…, maaari mo nang patakbuhin ang Raspberry Client code na magpapadala ng data sa pamamagitan ng MQTT sa aming database, na kung saan ay kumokonekta sa Grafana.
-
Tiyaking nakakonekta ang iyong raspberry sa internet at pagkatapos ay magsagawa ng isang git clone command upang kopyahin ang buong code sa Raspberry Pi. Ang iyong utos ay magiging hitsura ng kaunti tulad ng:
git clone
-
Sa loob ng terminal ng raspberry Pi, magsagawa ng isang pagbabago ng direktoryo ng pagbabago (cd) sa "raspberry_client":
cd raspberry_client.
-
Kakailanganin mong gumamit ng isang virtual na kapaligiran *. Simple Takbo
python3 -m venv env. Lilikha ito ng isang virtual na kapaligiran na tinatawag na "env" na gagamitin namin upang mai-install ang mga dependency.
-
Ngayon, kailangan nating ipasok ang aming virtual na kapaligiran. Patakbuhin:
pinagmulan env / bin / buhayin. Handa ka na ngayong i-install ang mga dependency ng proyekto.
-
Sa package na na-clone mo lang mayroong isang file na tinatawag na mga kinakailangan.txt. Buksan ang file na ito; makikita mo na kailangan namin ang paho-mqtt at pyserial packages, pati na rin ang kani-kanilang mga bersyon. Maaari mong tingnan ang mga nilalaman ng file sa pamamagitan ng pagpapatakbo
kinakailangan ng pusa.txt. Upang mai-install ang mga package na ito, ru
i-install ang pip-mga kinakailangan.txt.
- Balot nito ang pagsasaayos.
Literal na ang bawat tutorial na gumagamit ng sawa ay gumagawa ng isang pagbanggit ng Virtual env, at kahit para sa maliit na proyekto na ito, babanggitin ko. Pinapayagan ka ng mga virtual na kapaligiran na paghiwalayin ang mga bersyon ng mga dependency, pati na rin paghiwalayin ang iyong workflow ng sawa - Ito ay isang magandang paraan ng pag-ayos ng iyong mga workspace ng Python. Kung ito ang iyong unang pagkakataon sa paggamit ng mga virtual na kapaligiran, magkaroon ng isang maikling pagbasa sa mga ito dito.
Ano ang ginagawa ng code…
Ang client.py file ay mag-a-import ng isang simpleng hanay ng mga aklatan kasama ang aming sariling arduinosensor. Sa pangunahing pag-andar, makukuha namin ang mga halaga mula sa Arduino, mai-publish ang data sa MQTT broker, at pagkatapos ay matulog ng 10 segundo.
Ang arduinosensor.py file ay isang hanay ng mga pamamaraan ng tumutulong na balot sa library ng paho.mqtt, pati na rin magbigay ng ilang kapaki-pakinabang na iskema sa komunikasyon para sa pakikipag-usap sa kargamento ng Arduino (tingnan ang: parse_payload). Siyempre, ang code ay nakakabit sa dulo ng seksyong ito.
Isang simpleng kliyente na nakikipag-usap sa isang item ng arduino sa pamamagitan ng Serial monitor. Asahan na hanapin ang code dito kapag naging publiko ito:
mula saimportlibimportimport_module |
mga importo |
importime |
importarduinosensor |
defmain (): |
# bukas na tinukoy na kliyente |
start_time = time.time () |
habang Totoo: |
pagbabasa = arduinosensor.get_values (os.en environment.get ('PORT', "/ dev / ttyUSB0")) |
arduinosensor.pub ("python_client", payload = pagbabasa) |
oras. tulog (10.0- ((time.time () -start_time)% 10.0)) |
if_name _ == "_ main_": |
pangunahing () |
tingnan ang rawclient.py naka-host sa ❤ ng GitHub
Hakbang 5: Pagsasama-sama sa Lahat ng Ito
Mayroon kaming naka-set up na code ng Raspberry Python, at mayroon kaming naka-set up na code ng client ng Arduino. Magpatuloy tayo sa pagkonekta sa parehong mga entity nang magkasama.
Una, ikonekta natin ang Arduino at i-set up ang tamang pagsasaayos:
-
Sa iyong terminal ng Raspberry Pi, tumakbo
python -m serial.tools.list_ports. Ililista nito ang lahat ng mga USB port na sumusuporta sa serial na komunikasyon.
- Ngayon, isaksak ang iyong Arduino at maghintay ng halos 2 segundo para makilala ito ng Raspberry. Nagta-type sa
python -m serial.tools.list_ports muli ay ipapakita sa iyo ang mga port. Maaari kang makakita ng isang karagdagang listahan na nagpapakita - kung iyon talaga ang kaso, kung gayon ang bagong entry na ito ay ang entry na konektado ang iyong Arduino. Malamang na ito ay magiging "/ dev / ttyUSB0".
-
Subukang patakbuhin ang code ng sawa sa loob ng iyong virtual na kapaligiran sa pamamagitan ng pagpapatakbo ng python3.7 client.py. Maghintay ng ilang segundo (hindi hihigit sa sampung) - kung nahaharap ka sa isang pagbubukod, nangangahulugan ito na kailangan naming baguhin ang halaga para sa aming com port sa raspberry pi. Kung nakikita mo na ang code ay naglilimbag ng isang linya na nagsisimula sa "Naipadala na sumusunod na kargamento:…" Kung gayon, magiging mabuti kang magpatuloy sa huling hakbang kasama si Grafana. Tip: tiyaking tatakbo
screen -S python bago mo simulan ang client ng sawa, kung hindi man, kapag natapos mo ang iyong koneksyon sa iyong raspberry pi, mawawala sa iyo ang iyong tumatakbo na programa ng sawa. Sa teknikal na paraan, hindi mo kailangang mahigpit na gamitin ang "python" bilang huling parameter, ngunit nais kong pangalanan ang mga session ng aking screen nang naaayon.
-
Upang mabago ang halaga para sa COM port, magtatakda ka ng isang variable ng kapaligiran bago patakbuhin ang code. Kailangan mong subukan ito para sa bawat posibleng halaga ng output na nakuha mo kapag nagpapatakbo ng sawa -m serial.tools.list_ports. Halimbawa, kung ang halaga ng mga entry na nakuha ko ay dalawa, at ang mga sumusunod:
- / dev / ttyUSB6
- / dev / acm0
-
kung gayon ang mga utos na tatakbo ko ay:
PORT = "/ dev / ttyUSB6" python3.7 client.py, at kung hindi iyon gagana, susunod na ru
PORT = "/ dev / acm0" python3.7 client.py
Sa sandaling nakumpleto mo ang mga hakbang na ito, maglalagay ang code ng data sa aming halimbawa ng influxdb database kung saan, kapag nakakonekta sa Grafana, papayagan kaming tingnan ang aming dashboard.
Hakbang 6: Pag-configure ng Grafana at Pagtingin sa Dashboard
Sige, nasa final kahabaan na tayo ngayon! Gagamitin namin ngayon ang Grafana upang lumikha ng isang simpleng dashboard.
- Kumonekta sa iyong halimbawa ng Grafana. Dahil sinundan mo ang mga hakbang mula sa orihinal na artikulo ng dzone, dapat kang makapag-log in sa iyong gumagamit ng administrator. Sige at mag-login.
- Sa kaliwang pane, mag-hover sa icon na "dashboard" - ang apat na mga parisukat. Mag-click sa "Pamahalaan".
- Sa bagong pahina, mag-click sa "Bagong Dashboard". Dagdag dito, i-click ang "Magdagdag ng bagong panel".
-
Bubukas nito ang editor ng Grafana. Lilikha kami ng isang simpleng view na nagpapakita ng isang solong sukatan.
- Sa kanang pane, baguhin ang pamagat ng panel sa isang makabuluhang bagay, tulad ng "Mga Pagbasa sa Kusina". Maaari ka ring maglagay ng isang opsyonal na Paglalarawan.
- Sa kaliwang bahagi sa ibaba, "Query", magdaragdag kami ng isang solong serye ng oras. Talagang nagniningning si Grafana dito dahil madali naming makakalikha ng mga pahayag ng SQL sa isang interface na batay sa pag-click. Sa ilalim ng "default", piliin ang InfluxDB.
- Ngayon, para sa pagbabasa ng "A" - sa sugnay na MULA, piliin ang pagsukat ng "airtestt". Kung titingnan mo ang orihinal na python code sa get_values function ng arduinosensor.py, makikita mo na tinukoy namin ang talahanayan ng airtestt na ito sa loob ng code.
- Para sa isang sample, pumunta tayo sa sugnay na "PUMILI" at pumili ng patlang (mq4). Orihinal na bibigyan kami ng aming dashboard ng pagpipilian na "ibig sabihin ()" - mag-click sa pagpipiliang ito at piliin ang "Alisin". pagkatapos, mag-click sa plus sign at, sa ilalim ng "Mga pagsasama-sama" piliin ang "natatanging ()". Ipapakita nito ang tiyak na mga puntos ng oras. Maaari kaming pumili ng iba pang mga hakbang ngunit sa ngayon, magpapakita ang aming panel ng mga natatanging pagbabasa mula sa mq4.
- I-click ang I-save sa kanang tuktok, at tapos ka na!
Kung sakaling magkaroon ka ng problema, maaari mong i-verify ang iyong mga setting sa mga nasa naka-attach na screenshot.
Hakbang 7: I-balot
Sa tutorial na ito nakapag-set up ka ng isang matatag na MQTT network na binubuo ng isang solong node at broker. Nagawa mo ring mailarawan ang iyong data ng IOT gamit ang Grafana. Panghuli, nagawa mong buuin ang simpleng arkitektura ng system na ito mula (sana) ang ginhawa ng iyong browser at PC sa pamamagitan ng paggamit ng isang koneksyon sa SSH.
Mayroong ilang mga bagay na maaari nating pagbutihin.
- Ang mga pagbabasa ng sensor sa aming grap ay hindi tumpak na mga pagbabasa ng sensor - ang mga ito ay ang boltahe ng output mula sa aming sensor. Kailangan nilang mai-calibrate, kumunsulta sa post sa blog na ito para sa karagdagang detalye.
- Ang aming pagsasaayos ng raspberry pi ay maaaring gawing mas magaan sa pamamagitan ng paggamit ng isang board na ESP8266 na konektado sa arduino, at ganap na alisin ang pi. Suriin ang isang intro sa module na ESP8266.
- Maaaring gusto naming magdagdag ng mga alerto para sa mga tukoy na kaganapan. Sa kabutihang palad, nag-aalok si Grafana ng isang paraan ng paggawa nito.
Mag-iiwan ako ng karagdagang pagbabasa upang maakit ang iyong imahinasyon sa mundo ng IOT. Inaasahan kong makita ka sa susunod na maituturo!
Karagdagang mga pagbabasa:
Inirerekumendang:
Simpleng Pagsubaybay sa Kalidad ng Hangin Sa TFT LCD Display-- Ameba Arduino: 3 Hakbang
Simpleng Pagsubaybay sa Kalidad ng Air Sa TFT LCD Display-- Ameba Arduino: Panimula Ngayon na ang karamihan sa mga tao ay nanatili sa bahay upang maiwasan ang malapit na pakikipag-ugnay sa potensyal na carrier ng virus ng COVID-19, ang kalidad ng hangin ay nagiging isang mahalagang kadahilanan sa kagalingan ng mga tao, lalo na sa mga tropikal na bansa kung saan ang paggamit ng air-con ay kinakailangan sa panahon ng da
Monitor ng Kalidad ng Hangin Sa MQ135 at Panlabas na Temperatura at Sensor ng Humidity Higit sa MQTT: 4 na Hakbang
Monitor ng Kalidad ng Hangin Sa MQ135 at Panlabas na Temperatura at Sensor ng Humidity Higit sa MQTT: Ito ay para sa mga layunin sa pagsubok
Sukatin ang Kalidad ng Hangin: 17 Mga Hakbang
Sukatin ang Kalidad ng Hangin: Kalidad ng hangin at pinong mga maliit na butil: Ang mga nasuspindeng maliit na butil (naitukoy sa " PM " para sa " Partulateate matter ") sa pangkalahatan ay pinong mga solidong partikulo na dala ng hangin (Wikipedia). Ang mga pinong partikulo ay tumagos nang malalim sa baga. Maaari silang maging sanhi sa
Pagsubaybay sa Kalidad ng Hangin Sa DSM501A Sa Nokia LCD: 7 Mga Hakbang
Pagsubaybay sa Kalidad ng Air Sa DSM501A Sa Nokia LCD: Kamusta mga kaibigan! Sa maikling itinuturo na ito ay ipapakita ko sa iyo kung paano masubaybayan ang air qulaity sa iyong bahay o saanman. Napakadali upang tipunin ang badyet na presyo na ito sa istasyon ng pagsubaybay sa kalidad ng hangin
Pagsubaybay sa Kalidad ng Hangin Gamit ang Particle Photon: 11 Hakbang (na may Mga Larawan)
Pagsubaybay sa Kalidad ng Hangin Gamit ang Particle Photon: Sa proyektong ito ang PPD42NJ particle sensor ay ginagamit upang sukatin ang kalidad ng hangin (PM 2.5) na naroroon sa hangin na may Particle Photon. Hindi lamang nito ipinapakita ang data sa Particle console at dweet.io ngunit ipinapahiwatig din ang kalidad ng hangin gamit ang RGB LED sa pamamagitan ng pagbabago nito