#Beispiel Relais.py #https://www.anhahe.de/ #sudo apt-get install python-smbus #Unter Einstellung/Rasperry-Pi-Konfiguration IC2 Aktivieren #sudo Pinout Listet all Pin #sudo i2cdetect -l gibt I2C Adapter aus #sudo i2cdetect -y 1 RPI ist Revision 2 deswegen 1 from tkinter import * import smbus import time import RPi.GPIO as GPIO # Open the bus bus = smbus.SMBus(1)            #Revision 2 #MCP23008 MCP23008address         =0x20   # MCP23008 Adress IC2 MCP23008RegisterIODIR   =0x00   # Register IODIR MCP23008  IO7 IO6 IO5 IO4 MCP23008RegisterIPOL    =0x01   # Register IPOL MCP23008  IP7 IP6 IP5 IP4 IP3 MCP23008RegisterGPINTEN =0x02   # Register GPINTEN MCP23008 GPINT7 MCP23008RegisterDEFVAL  =0x03   # Register DEFVAL MCP23008 DEF7 DEF6 MCP23008RegisterINTCON  =0x04   # Register INTCON MCP23008 IOC7 IOC6 MCP23008RegisterIOCON   =0x05   # Register IOCON MCP23008 — — SREAD MCP23008RegisterGPPU    =0x06   # Register GPPU MCP23008  PU7 PU6 PU5 MCP23008RegisterINTF    =0x07   # Register INTF MCP23008 INT7 INT6 INT5 MCP23008RegisterINTCAP  =0x08   # Register INTCAP MCP23008  ICP7 ICP6 MCP23008RegisterGPIO    =0x09   # Register GPIO MCP23008 GP7 GP6 GP5 MCP23008RegisterOLAT    =0x0A   # Register OLAT MCP23008  OL7 OL6 OL5 # Set up the pins as output #Address pins are always enabled on MCP23008. MCP23S08 IOCON muss bit 3 bus.write_byte_data( MCP23008address, MCP23008RegisterIODIR, 0x00 )         #Setzt MCP23008 auf I/O Ausgang (Outout) bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, 0x00 )          #alle Relais aus 0x00 beim Starten #Operator Bezeichnung                         Beispiel #~x         Bitweises Not            Ausgabe=0x03 also b0000 0011 (Taste auf #Tastertur AltGr +*) #                                               Ausgabe=Ausgabe & ~0x01 (also b0000 0001) #Ausgabe: 0x02 (b0000 0010) #|x         Binary OR                         Ausgabe=0x03 (Taste auf Tastertur AltGr #<>) #                                               Ausgabe=Ausgabe & ~0x04  Ausgabe: 0x07 #https://wiki.python.org/moin/BitwiseOperators def Relais():     global Ausgabe     Ausgabe=0x00     if (CheckVar1.get()==0):         Ausgabe=Ausgabe & ~0x01         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe ) # Relais1 Ausschalten     if (CheckVar1.get()==1):         Ausgabe=Ausgabe | 0x01         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe ) # Relais1    Einschalten     if (CheckVar2.get()==0):         Ausgabe=Ausgabe & ~0x02         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar2.get()==1):         Ausgabe=Ausgabe | 0x02         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar3.get()==0):         Ausgabe=Ausgabe & ~0x04         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar3.get()==1):         Ausgabe=Ausgabe | 0x04         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar4.get()==0):         Ausgabe=Ausgabe & ~0x08         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar4.get()==1):         Ausgabe=Ausgabe | 0x08         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar5.get()==0):         Ausgabe=Ausgabe & ~0x10         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar5.get()==1):         Ausgabe=Ausgabe | 0x10         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar6.get()==0):         Ausgabe=Ausgabe & ~MCP23008address         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar6.get()==1):         Ausgabe=Ausgabe | MCP23008address         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar7.get()==0):         Ausgabe=Ausgabe & ~0x40         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar7.get()==1):         Ausgabe=Ausgabe | 0x40         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe )     if (CheckVar8.get()==0):         Ausgabe=Ausgabe & ~0x80         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe ) # Relais 8 Ausschalten     if (CheckVar8.get()==1):         Ausgabe=Ausgabe | 0x80         bus.write_byte_data( MCP23008address, MCP23008RegisterGPIO, Ausgabe ) # Relais 8 Einschalten # Ein Fenster erstellen fenster = Tk() #Checkbox 8 Stück mit pack ins Fenster zeichen mit place die Position CheckVar1 = IntVar() C1 = Checkbutton(fenster, text = "Relais 1", variable = CheckVar1,command=Relais) C1.pack() C1.place(x=50, y=50)                                                #von oben links CheckVar2 = IntVar() C2 = Checkbutton(fenster, text = "Relais 2", variable = CheckVar2,command=Relais) C2.pack() C2.place(x=50, y=75) CheckVar3 = IntVar() C3 = Checkbutton(fenster, text = "Relais 3", variable = CheckVar3,command=Relais) C3.pack() C3.place(x=50, y=100) CheckVar4 = IntVar() C4 = Checkbutton(fenster, text = "Relais 4", variable = CheckVar4,command=Relais) C4.pack() C4.place(x=50, y=125) CheckVar5 = IntVar() C5 = Checkbutton(fenster, text = "Relais 5", variable = CheckVar5,command=Relais) C5.pack() C5.place(x=50, y=150) CheckVar6 = IntVar() C6 = Checkbutton(fenster, text = "Relais 6", variable = CheckVar6,command=Relais) C6.pack() C6.place(x=50, y=175) CheckVar7 = IntVar() C7 = Checkbutton(fenster, text = "Relais 7", variable = CheckVar7,command=Relais) C7.pack() C7.place(x=50, y=200) CheckVar8 = IntVar() C8 = Checkbutton(fenster, text = "Relais 8", variable = CheckVar8,command=Relais) C8.pack() C8.place(x=50, y=225) # Fenster Breite, Höhe w = 1000                                                # Breite  Tk fenster h = 650                                                 # Höhe  Tk fenster # Lese Bildschirm Auflösung ws = fenster.winfo_screenwidth()                        # Breite Auflösung vom Bildschirm hs = fenster.winfo_screenheight()                       # Höhe # Berechnung der Mitte x = (ws/2) - (w/2) y = (hs/2) - (h/2) fenster.geometry('%dx%d+%d+%d' % (w, h, x, y))          # Setz Fenster in Mitte fenster.resizable(0,0)                                  # Fenster ist in der Groesse nicht veraenderbar fenster.title("Steuerung UniPi www.AnHaHe.de")          #Beschriftung Kopfzeile buttonschliessen = Button(fenster, text='Fenster Schliessen', width=25, command=fenster.destroy) buttonschliessen.pack() buttonschliessen.place(x=745, y=620) fenster.mainloop()