Raspberry Pi: Tlačítko a LED dioda

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

Další podobné články