Moduly PI-AIO a PI-DIO jsou připojené k Raspberry Pi na I2C sběrnici na pinech GPIO2 (SDA) a GPIO3 (SCL). Pro ovládání je tedy možné použít I2C stack, který je již integrovaný v Raspberry OS. Podívejme se, jak na to v programovacím jazyku Python.

Předpokládejme, že máte již Raspberry OS nainstalovaný a funkční. Není nutné instalovat žádné doplňkové balíčky, vše potřebné je již v základním nastavení.

Doporučujeme přečíst si datasheet k obou modulům, jakým způsobem je zapojen.

V prvé řadě je vhodné přímo při startu systému nastavit piny GPIO2 a GPIO2 na I2C mód. Do souboru /boot/firmware/config.txt stačí přidat řádek:

dtoverlay=i2c-gpio,i2c_gpio_sda=2,i2c_gpio_scl=3

Tím se v systému vytvoří nová I2C sběnice, pravděpodobně bude mít číslo 22 (i2c-22), protože v systému již existují sběrnice 20 a 21.

U modulu PI-DIO je obvod MCP23008 resetován pomocí pinu GPIO4. Je to z toho důvodu, aby při selhání systému po resetu byly výstupy v klidovém stavu vypnuty. pokud by to tak nebylo, mohly by být po resetu výstupy stále zapnuté, což může být nebezpečné. Z příkazové řádky je možné toho docílit takto:

> gpioset 0 4=1

Poté můžeme zkusit detekovat obvody na sběrnici i2c-22 příkazem:

> gpiodetect 22

Zobrazit by se měly všechny detekované obvody, u nás tedy 0x20 u PI-DIO a 0x60 a 0x68 u PI-AIO. Číslo se může lišit podle nastavení jumperů na modulu.

PI-DIO

Nyní vytvoříme jednoduchý program v Pythonu. Nejprve je nutné vytvořit přístup na I2C sběrnici:

i2cbus = SMBus(I2CBUS)

Kde I2CBUS je číslo sběrnice, v našem případě je to 22.

Poté zinicializujeme vstupy a výstupy GPIO expandéru:

i2cbus.write_byte_data(I2CADDR, MCP_IODIR, DIN1 | DIN2 | DIN3 | DIN4 | DOF1 | DOF2)
I2CADDR je adresa MCP23008 a MCP_IODIR je adresa GPIO registru.

Číst vstupy DIN a DOUT Fault můžeme pomocí příkazu:

val = i2cbus.read_byte_data(I2CADDR, MCP_GPIO)

Ovládat výstupy DOUT můžeme pomocí příkazu:

i2cbus.write_byte_data(I2CADDR, MCP_GPIO, val)

Hodnotě val nastavíme bity 5 resp. 7 pro DOUT1 resp. DOUT2.

PI-AIO

U modulu PI-AIO je to podobné. Nejprve se přihlásíme k I2C sběrnici:

i2cbus = SMBus(I2CBUS)

U AD převodníku MCP3424 spustíme převod zápisem do konfiguračního registru:

i2cbus.write_byte(I2CADDR, channel | MCP3424_RATE_15SPS_16B | MCP3424_GAIN_1 | MCP3424_RDY)

A poté přečteme výsledek:

read = i2c_msg.read(I2CADDR, 3)
i2cbus.i2c_rdwr(read)
val1 = int.from_bytes(read.buf[0])
val2 = int.from_bytes(read.buf[1])
val = (val1 << 8) + val2

U DA převodníku MCP47CMB22 je to podobné. Výstup nastavíme zápisem do registru:

val1 = (val >> 8) & 0xff
val2 = val & 0xff
write = i2c_msg.write(I2CADDR, [channel, val1, val2])
i2cbus.i2c_rdwr(write)

Kompletní program

Jako ukázka mohou sloužit tři programy pro ovládání dio, ain a aout. Těmi lze ovládat vstupy a výstupy z příkazové řádky. Příklady použití pro PI-DIO:

python dio.py din1        # Read input 1
python dio.py dout1 1   # Enable output 1
python dio.py dout1 0   # Disable output 1
python dio.py dof1        # Read output 1 fault

Pro analogové vstupy a výstupy (program převádí vstupy 0-10 V a výstupy 0-5 V):

ain 1        # Read analog input 1
aout 1 2.5 # Set analog output 1 to 2.5V

Programy lze stáhnout zde.

 

Cookies

Pro lepší používání stránek a pro náš obchod používáme jen nezbytné cookies.