A tkinter modul természetesen fut a Raspberry Pi Python környezetében is. A gép hardveres lehetőségeit (GPIO port vezérlés) kombinálva a GUI adta funkciókkal kiváló grafikus vezérlő programokat tudunk készíteni. Erre mutatunk be a tutorial végén egy konkrét gyakorlati példát.
A vezérelt eszköz a Aqex cég négy relét tartalmazó bővítő modulja (qReCon 4 relays HAT). A panel a reléken kívül a vezérlő áramköröket, valamint a vezetékek csatlakoztatására szolgáló sorkapcsokat tartalmazza.
A program az előbbiekben megismert widgetekből a Button és a Label elemeket használja, illetve ezek segítségével működteti a 31, 33, 35, 37-es GPIO portokhoz kapcsolódó reléket. A program alapvetően normál monitorra íródott, de a geometry kulcsszó után megadott paraméterekkel könnyen optimalizálható az official Raspberry Pi display-re. Ebben az esetben érdemes átméretezni a vezérlő elemeket.
A teljes kód:
import RPi.GPIO as GPIO
from tkinter import *
GPIO.setmode(GPIO.BOARD)
GPIO.setup(31, GPIO.OUT)
GPIO.setup(33, GPIO.OUT)
GPIO.setup(35, GPIO.OUT)
GPIO.setup(37, GPIO.OUT)
ablak = Tk()
ablak.title("4-relay")
ablak.geometry("250x200")
ablak.resizable(0, 0)
on1 = 0
on2 = 0
on3 = 0
on4 = 0
elsoGombAllapot = StringVar()
masodikGombAllapot = StringVar()
harmadikGombAllapot = StringVar()
negyedikGombAllapot = StringVar()
def elsoGomb():
global on1
if on1 == 0:
on1 = 1
elsoGombAllapot.set("felkapcsolva")
GPIO.output(31, 1)
else:
on1 = 0
elsoGombAllapot.set(" lekapcsolva")
GPIO.output(31, 0)
def masodikGomb():
global on2
if on2 == 0:
on2 = 1
masodikGombAllapot.set("felkapcsolva")
GPIO.output(33, 1)
else:
on2 = 0
masodikGombAllapot.set(" lekapcsolva")
GPIO.output(33, 0)
def harmadikGomb():
global on3
if on3 == 0:
on3 = 1
harmadikGombAllapot.set("felkapcsolva")
GPIO.output(35, 1)
else:
on3 = 0
harmadikGombAllapot.set(" lekapcsolva")
GPIO.output(35, 0)
def negyedikGomb():
global on4
if on4 == 0:
on4 = 1
negyedikGombAllapot.set("felkapcsolva")
GPIO.output(37, 1)
else:
on4 = 0
negyedikGombAllapot.set(" lekapcsolva")
GPIO.output(37, 0)
def quit():
ablak.destroy()
GPIO.output(31, 0)
GPIO.output(33, 0)
GPIO.output(35, 0)
GPIO.output(37, 0)
GPIO.cleanup()
Button(ablak, text="1. relé", command=elsoGomb).grid(column=0, row=0)
Button(ablak, text="2. relé", command=masodikGomb).grid(column=0, row=1)
Button(ablak, text="3. relé", command=harmadikGomb).grid(column=0, row=2)
Button(ablak, text="4. relé", command=negyedikGomb).grid(column=0, row=3)
Button(ablak, text="Quit", command=quit).grid(column=2, row=10)
Label(ablak, text="1. allapota:").grid(column=2, row=0)
Label(ablak, textvariable = elsoGombAllapot).grid(column=3, row=0)
Label(ablak, text="2. allapota:").grid(column=2, row=1)
Label(ablak, textvariable = masodikGombAllapot).grid(column=3, row=1)
Label(ablak, text="3. allapota:").grid(column=2, row=2)
Label(ablak, textvariable = harmadikGombAllapot).grid(column=3, row=2)
Label(ablak, text="4. allapota:").grid(column=2, row=3)
Label(ablak, textvariable = negyedikGombAllapot).grid(column=3, row=3)
ablak.mainloop()
A fentiekben bemutatott Aqex qReCon relay HAT megvásárolható a MálnaPC Webshopjában!
A cikk előző része: http://www.malnasuli.hu/python/kiindulo-gui-alkalmazas-az-elso-ablakunk-tkinter-2-resz/

