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/