Sisällysluettelo:

Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla: 7 vaihetta
Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla: 7 vaihetta

Video: Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla: 7 vaihetta

Video: Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla: 7 vaihetta
Video: HSY seuraa ilmanlaatua pääkaupunkiseudulla 2024, Heinäkuu
Anonim
Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla
Seuraa ilmanlaatua Grafanan ja Raspberry Pi: n avulla

Etsin pientä pientä IOT -projektia ja ystäväni suositteli, että tutustun tähän opetusohjelmaan:

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

Suosittelen lämpimästi seuraamaan opetusohjelmaa ja jatkamaan Raspberry Pi: n asettamista seurantaa varten. Tämä opetusohjelma suorittaa lisävaiheet yksinkertaisen IoT -laitteen suunnittelussa, joka mahdollistaa korkean virhesietokyvyn, sekä kuinka hyödyllinen Raspberry Pi voi olla yhdistettynä Arduinon kanssa.

Käyn myös läpi ilma -antureiden MQ* -mallien tehokkuuden ja jonkin verran rajoitukset. MQ* -anturit ovat halpoja ja melko tehokkaita, ja ne on erittäin helppo asentaa.

Kaiken kaikkiaan tämä auttaa sinua pääsemään alkuun Arduinon yhdistämisessä Internetiin mahdollisimman yksinkertaisella tavalla ja asettaa keinon käyttää kevyempiä jalanjälkimoduuleja (re: ESP8266).

Pidä hauskaa!

Vaihe 1: Laitteet + käyttöönotto

Laitteet

  • Raspberry Pi, johon on asennettu Raspbian
  • Raspberry Pi -virtalähde
  • Arduino Uno/vastaava
  • Uros -uros USB -tyyppi B - tyyppi A (tulee Arduinon mukana)
  • Mikä tahansa MQ* -anturi (käytin MQ-2, 4, 5 ja 135)
  • Erilaisia hyppyjohtimia
  • mini leipälauta

Perustaa

Tämä opetusohjelma on tarkoitettu lempeäksi esittelyksi Arduinon ja Raspberry Pi: n käyttöön - se auttaa tietämään, kuinka käyttää linux -päätelaitetta. En kuitenkaan oleta, että minulla olisi paljon kokemusta Arduinon tai Raspberry Pi: n kanssa työskentelystä - tarvitset vain tarvittavat laitteet ja utelias asenne.

  • Sinun on suoritettava tämän opetusohjelman vaiheet.
  • Suosittelen, että käytät Secure Shell (SSH) -käyttöliittymää Raspberry Pi: n kanssa, koska sen avulla voit syöttää komentoja helposti. Yhteyden muodostaminen SSH: n kautta eroaa siitä, käytätkö Windowsia, Linuxia tai Macia. Linux ja Mac ovat melko helppokäyttöisiä ssh: n suhteen (SSH: n avauskomento on kirjaimellisesti ssh). Katso Putty for Windows. Suosittelen, että tarkistat näytön, jotta voit ylläpitää istuntoa projektin aikana.
  • Sinun on myös asennettava Python Raspbianiin. Kun olen suorittanut nämä vaiheet, tein kopion vanhasta SD -kortista, joka oli makaamassa edellisestä projektista, johon oli jo asennettu Python. Jos NOOBS/Raspbian -jakelussasi ei ole Python 3.7: tä tai uudempaa, tutustu näihin vaiheisiin, kun haluat kääntää Pythonin lähteestä.
  • Tutustu gitiin ja asenna se, jos sitä ei ole jo asennettu Raspbian -jakeluun.

Vaihe 2: Piirin asettaminen

Piirin asettaminen
Piirin asettaminen

Sinun on määritettävä yksi piiri Arduinolle.

Olen toimittanut kaavion, jota voit käyttää viitteenä.

Kaikkien MQ-* -kaasuanturien kauneus on, että kun 5 voltin ja maadoitusliitäntä on tehty, Arduinon analogisten nastojen tulovastus mahdollistaa anturin oikean toiminnan.

Varmista, että anturin katkaisukortin analoginen liitäntä on kytketty Arduinoon eikä digitaaliseen. Jos kohtaat hyvin kapean arvovalikoiman testauksen aikana, suosittelen tarkistamaan yhteytesi ensin täältä.

Vaihe 3: Arduino -koodi ja vilkkuu

Seuraavassa vaiheessa yhdistämme Arduino -levyn Raspberry Pi: hen. Ennen kuin teemme tämän, meidän on salattava Arduino koodilla lukemaan anturi ja lähettämään anturitiedot Raspberry Pi: lle. Tämä voidaan tehdä millä tahansa tavalla, kun normaalisti työnnät koodin Arduinolle. Käytin kolmannen osapuolen työkalua Arduino IDE: n lisäksi - siksi sisällytän Arduino -kirjaston yläreunaan. Tämä ei ole tarpeen muissa hankkeissa.

Tarkista kopioitava/liitettävä koodi tämän osan lopussa.

Mitä koodi tekee

Koodi on määritetty saamaan tietoja neljästä eri anturista - jos käytät erityyppisiä antureita, on järkevää muuttaa sarjaportista lähetettävän lähtösignaalin nimet.

Silmukassa tarkistamme, pyytääkö Raspberry Pi tietoja meiltä. Siksi käytämme hyvin yksinkertaista Master/Slave -kokoonpanoa, jossa Raspberry Pi pyytää jatkuvasti tietoja Arduinolta. Tämä on paljon yksinkertaisempaa kuin laskurin käyttäminen Arduino -koodissa, koska on helpompaa testata, mitkä arvot toimivat Raspberry Pi -laitteella sen sijaan, että sinun pitäisi vilkuttaa uusia arvoja Arduinolle.

Kun arduino on vastaanottanut tietopyynnön, se muotoilee tuloksen GET -parametriksi - tämä liittyy HTTP -menetelmiin ja on yksinkertaisesti suunnitteluvaihtoehto. Jos suunnittelisit viestintämallin Arduinosta sarjaportin kautta, voit helposti siirtyä mihin tahansa muuhun, kunhan suunnittelet sen niin, että tiedot erotetaan kohtuullisesti. Valitsin GET: n, koska se on tuttu ja kestävä.

Yksinkertainen testaus…

Kun Arduino on vilkkunut ja koodi on käynnissä, avaa Arduino IDE -sarjan näyttö. Jos lähetät yhden merkin "H" (varmista sen isot kirjaimet!), Saat tiedon hyötykuorman. Onnittelut, se toimii!

Esimerkki, asynkroninen MQ-* datan kerääjä

#sisältää
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int saapuvaByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Sarja.alku (9600);
}
/* valuePrint tulostaa tämän tarran arvon.
* Luo vain sivuvaikutuksia.
*/
voidvaluePrint (merkkijonotarra, sisäinen lukeminen) {
Serial.print (etiketti);
Serial.print ("=");
Serial.print (lukeminen);
}
voidloop () {
// katso onko saapuvia sarjatietoja:
jos (Serial.available ()> 0) {
// lukee sarjapuskurin vanhin tavu:
// "Kun soitat Serial.readille, tavu poistetaan vastaanottopuskurista ja palautetaan koodillesi"
inputByte = Serial.read ();
// jos se on iso H (ASCII 72), lue arvot ja lähetä ne vadelmaisännälle.
// TODO: varmista, että viesti on aina yhtä pitkä aina
jos (saapuva tavu == 72) {
int mq2Reading = analoginenLuku (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Lukeminen);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Lukeminen);
Serial.print ("&");
valuePrint ("mq135", mq135Lukeminen);
Serial.print ("\ n");
}
}
// lue sarja vain joka sekunti
viive (1000);
}

katso rawmain.cpp, jota isännöi GitHub ❤ kanssa

Vaihe 4: Raspberry Pi Code

Nyt kun olet määrittänyt Raspberry Pi: n https://dzone.com/articles/raspberry-pi-iot-sensor… mukaisesti, voit nyt suorittaa Raspberry Client -koodin, joka lähettää tietoja MQTT: n kautta tietokantaamme. yhdistää Grafanaan.

  1. Varmista, että vadelma on yhteydessä Internetiin, ja suorita sitten git -kloonikomento kopioidaksesi koko koodi Raspberry Pi -laitteeseen. Käskysi näyttää hieman tältä:

    git -klooni

  2. Suorita raspberry Pi -päätteessä muutoshakemisto (cd) muotoon "raspberry_client":

    cd vadelma_asiakas.

  3. Sinun on käytettävä virtuaalista ympäristöä*. Yksinkertainen. Juosta

    python3 -m venv env. Tämä luo virtuaalisen ympäristön nimeltä "env", jota käytämme riippuvuuksien asentamiseen.

  4. Nyt meidän on päästävä virtuaaliseen ympäristöön. Juosta:

    lähde env/bin/aktivoi. Olet nyt valmis asentamaan projektin riippuvuudet.

  5. Juuri kloonatussa paketissa on tiedosto vaatimuksina.txt. Avaa tämä tiedosto; näet, että tarvitsemme paho-mqtt- ja pyserial-paketit sekä niiden versiot. Voit tarkastella tiedoston sisältöä suorittamalla

    kissan vaatimukset.txt. Jotta voit asentaa nämä paketit, ru

    pip install -r vaatimukset.txt.

  6. Tämä päättää kokoonpanon.

Kirjaimellisesti jokainen opetusohjelma, joka käyttää pythonia, mainitsee Virtual env: n, ja jopa tästä pienestä projektista mainitsen. Virtuaalisten ympäristöjen avulla voit erottaa riippuvuuksien versiot ja erottaa python -työnkulun - Se on mukava tapa siivota Python -työtilasi. Jos käytät ensimmäistä kertaa virtuaaliympäristöjä, lue niistä lyhyesti täältä.

Mitä koodi tekee…

Asiakas.py -tiedosto tuo yksinkertaisen joukon kirjastoja, mukaan lukien oman arduinosensorimme. Päätoiminnossa saamme arvot Arduinolta, julkaisemme tiedot MQTT -välittäjälle ja nukumme sitten 10 sekuntia.

Arduinosensor.py -tiedosto on joukko aputapoja, jotka kiertyvät paho.mqtt -kirjaston ympärille, ja ne tarjoavat myös hyödyllisiä viestintämalleja kommunikointiin Arduinon hyötykuorman kanssa (katso: parse_payload). Koodi on tietysti tämän osan lopussa.

Yksinkertainen asiakas, joka kommunikoi arduino -kohteen kanssa sarjamonitorin kautta. Odota, että löydät koodin täältä, kun se tulee julkiseksi:

fromimportlibimportimport_module
tuonti
tuonnin aika
tuonti -anturi
defmain ():
# avoin määritetty asiakas
start_time = time.time ()
Vaikka totta:
lukeminen = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", hyötykuorma = lukeminen)
time.sleep (10.0- ((time.time () -start_time) %10.0))
jos _nimi _ == "_ main_":
pää ()

katso rawclient.py, jota isännöi GitHub

Vaihe 5: Yhdistä kaikki

Meillä on määritetty Raspberry Python -koodi ja asetettu Arduino -asiakaskoodi. Siirrytään yhdistämään molemmat entiteetit yhteen.

Liitä ensin Arduino ja määritä oikea kokoonpano:

  1. Suorita Raspberry Pi -päätteessäsi

    python -m serial.tools.list_ports. Tässä luetellaan kaikki sarjaporttia tukevat USB -portit.

  2. Liitä nyt Arduino ja odota noin 2 sekuntia, ennen kuin Vadelma tunnistaa sen. Kirjoittaminen

    python -m serial.tools.list_ports jälleen näyttää portit uudelleen. Saatat nähdä lisää ilmoituksia - jos näin todella on, tämä uusi merkintä on merkintä, johon Arduino on kytketty. Tämä on todennäköisesti "/dev/ttyUSB0".

  3. Kokeile suorittaa python -koodi virtuaaliympäristössäsi suorittamalla python3.7 client.py. Odota muutama sekunti (korkeintaan kymmenen) - jos kohtaat poikkeuksen, tämä tarkoittaa, että meidän on muutettava vadelmapi: n tietoliikenneportin arvoa. Jos näet, että koodi tulostaa rivin, joka alkaa "Lähetetty seuraavalla hyötykuormalla:…", sitten voit jatkaa viimeiseen vaiheeseen Grafanan kanssa. Vinkki: muista ajaa

    näyttö -S python ennen python -asiakkaan käynnistämistä, muuten, kun lopetat yhteyden vadelma pi -laitteeseesi, menetät käynnissä olevan python -ohjelman. Teknisesti sinun ei tarvitse käyttää tiukasti "pythonia" viimeisenä parametrina, mutta pidän näytön istuntojen nimeämisestä vastaavasti.

    1. Jos haluat muuttaa COM -portin arvoa, sinun on asetettava ympäristömuuttuja ennen koodin suorittamista. Sinun on kokeiltava tätä kaikkia mahdollisia tulosten arvoja, joita sait, kun suoritat python -m serial.tools.list_ports. Jos saamiani merkintöjä olisi esimerkiksi kaksi ja ne olisivat seuraavat:

      • /dev/ttyUSB6
      • /dev/acm0

sitten komennot, jotka ajaisin, olisivat:

PORT = "/dev/ttyUSB6" python3.7 client.py, ja jos se ei toimisi, olisin myöhemmin ru

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

Kun olet suorittanut nämä vaiheet, koodi sitoutuu tietoihin influenxdb -tietokantainstanssiin, joka Grafanaan yhdistettynä antaa meille mahdollisuuden tarkastella koontinäyttöämme.

Vaihe 6: Grafanan määritys ja koontinäytön katselu

Grafanan määritykset ja kojelaudan katselu
Grafanan määritykset ja kojelaudan katselu

Okei, nyt ollaan viimeisessä vaiheessa! Luomme nyt Grafanan avulla yksinkertaisen kojelaudan.

  1. Yhdistä Grafana -ilmentymään. Koska olet noudattanut alkuperäisen dzone -artikkelin ohjeita, sinun pitäisi pystyä kirjautumaan sisään järjestelmänvalvojan kanssa. Mene eteenpäin ja kirjaudu sisään.
  2. Vie hiiri vasemmassa ruudussa "koontinäytöt" -kuvakkeen - neljän ruudun - päälle. Napsauta "Hallinnoi".
  3. Napsauta uudella sivulla "Uusi hallintapaneeli". Napsauta sitten "Lisää uusi paneeli".
  4. Tämä avaa Grafana -editorin. Luomme yksinkertaisen näkymän, joka näyttää yhden mittarin.

    1. Vaihda oikeanpuoleisessa ruudussa paneelin otsikko johonkin merkitykselliseen, kuten "Keittiön lukemat". Voit myös syöttää valinnaisen kuvauksen.
    2. Lisäämme vasempaan alakulmaan "Kysely" yhden aikasarjan. Grafana todella loistaa täällä, koska voimme helposti luoda SQL -lausekkeita napsautuspohjaisella käyttöliittymällä. Valitse "oletus" -kohdasta InfluxDB.
    3. Nyt, jos haluat lukea "A" - valitse FROM -lausekkeesta mittaus "airtestt". Jos tarkastelet alkuperäistä python -koodia arduinosensor.py -funktion get_values -funktiossa, huomaat, että määritämme tämän airtestt -taulukon koodissa.
    4. Mennään näyte "SELECT" -lauseeseen ja valitaan kenttä (mq4). Alun perin hallintapaneelimme antoi meille valinnan "mean ()" - napsauta tätä vaihtoehtoa ja valitse "Poista". napsauta sitten plusmerkkiä ja valitse "Koostumukset" -kohdasta "erillinen ()". Tämä näyttää tietyt ajankohdat. Voimme valita muita mittauksia, mutta toistaiseksi paneelimme näyttää eri lukemat kuin mq4.
    5. Napsauta Tallenna oikeassa yläkulmassa ja olet valmis!

Jos kohtaat ongelmia, voit tarkistaa asetukset liitteenä olevan kuvakaappauksen asetuksista.

Vaihe 7: Kokoa

Paketoida
Paketoida

Tässä opetusohjelmassa pystyit luomaan vankan MQTT -verkon, joka koostuu yhdestä solmusta ja välittäjästä. Pystyit myös visualisoimaan IOT -tietosi Grafanan avulla. Lopuksi pystyit säveltämään tämän yksinkertaisen järjestelmäarkkitehtuurin (toivottavasti) selaimesi ja tietokoneesi mukavuudesta käyttämällä SSH -yhteyttä.

Joitakin asioita voimme haluta parantaa.

  • Kaavion anturilukemat eivät itse asiassa ole tarkkoja anturilukemia - ne ovat anturimme lähtöjännite. Ne on kalibroitava, katso lisätietoja tästä blogikirjoituksesta.
  • Vadelmapi -kokoonpanomme voidaan tehdä paljon kevyemmäksi käyttämällä arduinoon kytkettyä ESP8266 -korttia ja poistamalla pi kokonaan. Tutustu ESP8266 -moduulin esittelyyn.
  • Haluamme ehkä lisätä hälytyksiä tietyistä tapahtumista. Onneksi Grafana tarjoaa tavan tehdä se.

Jätän vielä lukemista houkutellakseni mielikuvituksesi IOT: n maailmaan. Odotan innolla sinua seuraavassa opetusohjelmassa!

Lisää lukemia:

Suositeltava: