Tento týden pokračujeme se základy programování na Raspberry Pi v jazyce Python. Minulý týden jste si mohli vyzkoušet, jak dálkově ovládat Raspberry přes síť a blikat připojenou LED diodou.
Dnes navážeme čtením vstupního pinu s připojeným tlačítkem, pomocí kterého si zapneme LED diodu.
Pokud jste četli minulý návod, tak víte, že jsme si zkoušeli napsat program v Pythonu, přičemž pro psaní a spouštění jsme využili prostředí Python 3 (IDLE). Dnes v něm budeme pokračovat, kdy pro účely práce s tlačítkem jsem upravil program s blikáním LED diody. Nyní tedy budete schopni ovládat LED diodu pomocí tlačítka, které ji při stisku zapne.
Nejprve ale k zapojení tlačítka. Pro obyčejné zapojení se běžně používá tlačítko společně s odporem, který je zapojen jako pull-up či pull-down (odpor na napájecí napětí či zem pro přivedení klidové hodnoty). My ale můžeme využít toho, že u Raspberry Pi má většina pinů možnost využít vestavěného připojení obou odporů. A tím nám bude stačit zapojit tlačítko pouze jedním pinem na pin 3V3 a druhým na datový pin, kdy já jsem vybral pin GPIO 20, který je vedle pinu s LED diodou.
Nyní se můžeme podívat na upravený program. Na jeho začátku je opět připojení modulu s prací s GPIO a časem a níže jsou uvedeny čísla pinů pro LED diodu a tlačítko. Definice podprogramu setup obsahuje první dva řádky stejné z minulého příkladu pro LED, tedy nastavení číslování BCM a pinu s LED diodou jako výstupu. Na třetím řádku je pak přidané nastavení pinu s tlačítkem jako vstupu společně s nastavením připojeného pull-down odporu (PUD_DOWN, pull-up se nastaví pomocí PUD_UP).
Podprogram blink obsahuje opět nekonečnou smyčku „while True“. Na jejím začátku je uveden příkaz s načtením stavu tlačítka do proměnné, která je následně testována na její stav. Pokud je tedy její stav logická jednička (logická hodnota True), tak nastavíme na GPIO pin s LED diodou napájecí napětí (HIGH) a tím rozsvítíme LED diodou. Pokud by ale tlačítko stisknuto nebylo, provedeme vypnutí LED diody.
Jako poslední definici vidíme opět ukončovací podprogram, který vypne LED diodu a uvolní všechny GPIO porty. A na konci programu zůstává nezměněný popis celého běhu, kdy nejprve vykonáme podprogram setup a poté zahájíme podprogram blink. Pokud je ale tento přerušen, vykonáme podprogram „ukonci“.
# Pripojeni modulu pro praci s GPIO piny import RPi.GPIO as GPIO # Pripojeni modulu pro praci s casem import time LedPin = 21 # Cislo LED pinu TlacitkoPin = 20 # Cislo pinu tlacitka def setup(): # Podprogramu setup, provede se na zacatku GPIO.setmode(GPIO.BCM) # Cislovani pinu - BCM nebo BOARD GPIO.setup(LedPin, GPIO.OUT) # Nastaveni pinu LED jako vystupu # Nastaveni pinu s tlacitkem jako vstupu s pull-down odporem GPIO.setup(TlacitkoPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) def blink(): # Podprogram blink, ktery se bude vykonavat while True: # Nekonecna smycka, jako loop u Arduina stavTlacitka = GPIO.input(TlacitkoPin) # Nactenu stavu tlacitka do promenne # Kontrola stavu tlacitka if (stavTlacitka == True): GPIO.output(LedPin, GPIO.HIGH) # Zapnuti LED diody pomoci prikazu GPIO.HIGH else: GPIO.output(LedPin, GPIO.LOW) # Vypnuti LED diody pomoci prikazu GPIO.LOW def ukonci(): # Podprogram, ktery bude zavolan pri ukonceni programu GPIO.output(LedPin, GPIO.LOW) # Vypnuti LED diody GPIO.cleanup() # Uvolneni vsech GPIO portu pro dalsi pouziti if __name__ == '__main__': # Program zacina ZDE setup() # Zavolani podprogramu setup try: # Zavolani podrogramu blink s osetrenim vyjimky nize blink() except KeyboardInterrupt: # Pri stisku zkratky 'Ctrl+C' se vykona podprogram ukonci ukonci()
Po nakopírování uvedeného programu do souboru Tlacitko.py ho uložíme a můžeme přejít ke spuštění. To můžete udělat buď pomocí tlačítka F5 nebo zavoláním v nabídce „Run-Run Module“. Nyní můžete vidět v konzoli Python Shell informaci o restartu skriptu Tlacitko.py a pro otestování můžete rozsvítit LED diodu pomocí stisku tlačítka. A také si můžete vyzkoušet, že když v konzoli Python Shell stisknete klávesovou zkratku Ctrl+C, blikání se ukončí. Případně lze ukončení vyvolat v nabídce „Shell-Interrupt Execution“.
Nyní jsme si ukázali, jak ovládat nejen výstup z GPIO pinů, ale také vstup. V dalších návodech si ukážeme jak pracovat se sběrnicí I2C a SPI a díky tomu ovládat různé senzory, displeje a další rozšiřovací moduly.
Zmíněné Raspberry Pi desky na eshopu:
Raspberry Pi 3 B:
https://dratek.cz/arduino/1385-raspberry-pi-3-model-b-quad-core-1-2-ghz-64bit-cpu-1gb-ram-wifi-bluetooth-4-1-1473147122.html
Raspberry Pi 3 B+:
https://dratek.cz/arduino/3067-raspberry-pi-3-model-b-64-bit-1gb-ram.html
Raspberry Pi Zero:
https://dratek.cz/arduino/3106-raspberry-pi-zero-h.html