UniPi: die Relais mit Python schalten
Mit dem UniPi-Board bekommt ein Raspberry Ein- und Ausgaenge die vernünftig gegen Störungen geschützt sind. Die Anschlüsse erfolgen über Printklemmen, was einen einfachen Einbau und Austausch ermöglicht.
Der Raspberry wird oben auf das Board gesetzt und über die Steckerleisten mit Strom versorgt.
Ansteuerung der Relais
Die Relais hängen nicht an den GPIOs vom Raspberry sondern an einem MCP23008, der über den I2C-Bus mit dem PI verbunden ist.
Der Chip wird über die Adresse 0x20 auf dem Bus angesprochen. Ein Blick ins Datenblatt zeigt dass für diese Betriebsart vor allem zwei Register wichtig sind:
- IODIR I/O-Direction (Register 0)
- GPIO General Purpose (Register 9)
Nach einem Reset sind alle Ports als Input geschaltet. Zur Initialisierung muss 0x00 in IODIR geschrieben werden.
Danach wird der Zustand der Relais direkt über das GPIO-Register gesteuert.
Test auf der bash
Vor dem Test sicherstellen dass I2C mit raspi-config freigeschaltet wurde!
# IODIR auf 0x00 setzen -> 8 Ausgaenge i2cset -y 1 0x20 0x00 0x00 # Ein Relais schalten i2cset -y 1 0x20 0x09 0x01
Wenn das Relais klackert ist der Test gelungen.
Ansteuerung mit python
Dank dem smbus-Modul ist das fast ebenso einfach:
import smbus import time # Open the bus bus = smbus.SMBus(1) # Set up the pins as output bus.write_byte_data( 0x20, 0x00, 0x00 ) # Toggle the relays on and off for value in [0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80]: bus.write_byte_data( 0x20, 0x09, value ) time.sleep( 1 )
Das Programm importiert die benötigten Module und initialisiert den SMBus. Dann wird das Port auf dem MCP23008 als Ausgang geschaltet und danach alle Relais einmal aktiviert.