Python-koodaus: Eka GPIO-ohjelma, LED vilkutus PUNOMO NETWORKS OY 5.8.2016 pva Oletus Sinulla on Raspin Geany-IDE konfiguroituna toimimaan SSH-etäkäytössä. Tämä on Punomon Python koodikoulun ensimmäinen GPIO-oppitunti. Käynnistä Mint-koneessa Terminal-ohjelma. Anna komento: ssh X pi@<koneesi IP osoite> geany Komento käynnistää Raspi-koneessa Geanyn ja kaappaa sen verkon kautta Mintin ruutuun. NONNIIN! Tästä se alkaa. Laiteläheinen ohjelmointi. Loput asiat ohjelmoinnista ja Python-kielen hienouksista opiskelemme laiteläheisesti. Ensin muutama sana RaspberryPi eli Raspin GPIO-liitännästä. Ja lopuksi panemme LED-lampun vilkkumaan, ohjelman ohjaamana, tietty. Raspin 26/40-pinninen GPIO-liitäntä (General Purpose Input Output, yleiskäyttöinen tulo-lähtöliitäntä) on väylä jolla Raspi liitetään ulkomaailmaan. Niinkuin nykyään hienosti sanotaan, IoT, Internet of Things, jolla laitteet liitetään internettiin, (oikeastaan me liitämme Raspin Ethernetliitännästä internettiin). GPIO-pinneihin voimme kytkeä esim. lämpötila-anturin, jonka avulla Raspi mittaa lämpötilaa ja heittää tulokset netin kautta vaikka kännykkään. Niin me tehdään vielä, myöhemmin, mutta malta opiskella ensin perusasiat. Helpoin tapa päästä Python-koodilla manipuloimaan GPIO-pinnejä on ottaa käyttöön ns kirjastot. Kirjastot tarkoittavat valmista käyttökelpoista koodia jonka jotkut osaajat ovat kehittäneet meidän yhteiseen käyttöön. Niin mekin puolestamme teemme kunhan pääsemme sinne asti opinnoissa. Pythonin RPi.GPIO-kirjastot löytyvät täältä: https://pypi.python.org/pypi/rpi.gpio Mutta uudessa Raspbian-käyttöjärjestelmässä tuo on jo valmiina: The library comes pre-installed with the latest Raspbian OS. Katsotaan ensin millainen on GPIO-liitäntä. 1
GPIO Käyttöjännitepinnit ovat joko +5V tai +3,3 V ja GND-maa eli 0V. GPIO-pinnit ovat suoraan kiinni ARMprosessorin rekistereissä, niissä ei ole mitään suojauksia. Siksi niihin ei saa missään tapauksessa tuoda yli 3,3 Voltin jännitettä. Muuten savu nousee. Eikä niistä saa ottaa liikaa virtaa. Eikä niitä saa maadoittaa = oikosulkea maihin. LED kytketään aina suojavastuksen kautta. Tässä on oltava huolellinen, noudata ohjeita kirjaimellisesti. Useilla GPIO-pinneillä on kaksois-merkitys, niitä voidaan käyttää tavallisen I/O-systeemin lisäksi esimerkiksi I2C-väyläliitäntään, tms. Selvitän mitä merkitse I2C, kunhan kurssi on edennyt sinne asti. Raspin GPIO-liitäntä, päältä katsottuna. Mitä nuo kaikki pinni-merkinnät tarkoittavat, selvitän kurssin edetessä. Don't worry. Meillä on Raspin GPIO-liittimen pinnit numeroitu 1 40 kuten kuva osoittaa, päältä katsottuna. Jokaisessa pinnissä on numeron lisäksi lisämääre, joko se on käyttöjännitteeseen liittyvä tai Raspin ARM-prosessorin rekistereihin liittyvä. Toiset koodaajat käyttävät liittimen pinninumeroita ja toisissa koodeissa on käytetty ARM-CPU:n merkintöjä, kuten GPIO2. Ole huolellinen kumman valitset, niin homma hoituu. Ja vielä hämminkiä aiheuttavaa tietoa, joillakin GPIO-pinneillä on kaksoismerkitys. Esim GPIO2 ja GPIO3 voidaan käyttää normaalisti tulona tai lähtönä, input-output, tai ohjelmassa annetulla erikoismäärityksellä nuo pinnit toimivatkin I2C-liitännän ohjauksessa. Tuosta I2C-liitännästä perusteellisesti sitten kun sen aika koittaa. 2
LED, Ligth Emitting Diode, valoa emittoiva diodi. Google on ystäväsi: https://fi.wikipedia.org/wiki/led LED, Ligth Emitting Diode, on puolijohdediodi joka johtaa sähköä vain toiseen suuntaan, päästösuuntaan ja silloin se loistaa valoa jonka väri riippuu diodin rakenteesta. Estosuunta on sama kuin diodi on poikki. Päästösuunta = anodille plus-jännite katodin suhteen. Katodille siis miinus. Kun LEDin läpi kulkee noin 10 ma virta, se loistaa (uusimmat loistavat hyvin jo 5 ma virralla) rakenteensa mukaan punaista, vihreää, keltaista, tms valoa. Sitten katsotaan miten LED kytketään ja saadaan loistamaan. Pin-1 Pin-2 Pin-11 GPIO-17 pin-11 Pin-9 ja moni muu Kts kuva ed.sivulla Virta pitää rajoittaa suojavastuksen avulla. R = U/I eli resistanssi on jännite jaettuna virralla. R = (3,3 V 2 V)/10 ma eli vastuksen arvoksi saadaan 130 ohmia, valitaan turvallinen 330 ohmia, sillä se LED vielä loistaa ihan mukavasti (riippuu väristä, koska eri väreillä on eri kynnysjännite. Kokeile eri vastuksia välillä 150 ohmia 1 kilo-ohmia. +3,3 V on GPIO-17 jännite silloin kun se on asetettu olemaan looginen 1, 2 V on punaisen LEDin kynnysjännite. Joten suojavastuksen yli jää erotus 1,3 V. Kynnysjännite on jännite jolla LED lähtee johtamaan eli virta kulkee sen läpi. Diodin piirrosmerkissä nuoli näyttää minne päin virta kulkee, sähköhän kulkee plussasta miinukseen. Kytke LED kuvan osoittamalla tavalla. LEDin positiivinen jalka GPIO-pinniin numero 11 ja 330 ohmin vastuksen kautta LEDin negatiivinen piuha maahan, eli GND, eli ground, eli 0 V. 3
Sitten koodaamaan. Annan mallikoodin ja kun olet saanut sen toimimaan, niin sitten tekemään harjoituksia. For-silmukan lohko Kirjoita koodi ja talleta se nimellä vilku.py Koodin analyysi. Kommentointi on niin perusteellinen, ettei se kaivanne enempää selitystä. Raspin GPIO-liitännän käyttöön Python-kielen kanssa on tehty työtä helpottamaan valmista koodia joita tarvitaan jotta homma toimii. Meille jää vain valita käytettävä pinni ja sen määritykset, loput hoitaa kirjastotiedosto. Kirjastot otetaan käyttöön ohjelman alkuun laitettavilla import-käskyillä. Toinen import on GPIOliitäntää varten ja toinen viiveen määritystä varten. pin = 11, eli määrittelemme muuttujan pin ja annamme sille arvon 11. For-silmukassa oleva määritys: GPIO.output (pin, GPIO.HIGH) asettaa pinni-11 (GPIO-17) olemaan looginen 1 eli 3,3 V, silloin LED loistaa. Kun se määritetään olemaan LOW, eli looginen 0, eli 0 V, silloin LED ei loista. 4
Kun ohjelma ajetaan, LED vilkkuu 10 kertaa ja samalla se käynnistää LXTerminaalin, jossa näkyy seuraavaa: Joka kierroksella tulostetaan kierroslaskuri ja LED ON-OFF. 5