вторник, 17 сентября 2013 г.

I2C расширитель GPIO PCF8574 в GNU/Linux - это не могло быть проще

Наверное только ленивый не писал в блоге про подключение PCF8574 к Raspberry Pi или аналогичной плате. И мой черёд пришёл, только это будет BeagleBone Black и 2 микросхемы PCF8574.

На BeagleBone Black довольно много GPIO, но по соображениям экономии, расширяемости и удобства подключения в конечном устройстве выбор пал на PCF8574. Это простой расширитель входов-выходов на I2C. Подключение его ничем не отличается от других I2C устройств. Адрес задаётся уровнями на соответствующих выводах A0-A2.
Я использовал I2C2 на BBB, его выводы на гребёнке P9:
19 - SCL
20 - SDA
Установим для начала i2c-tools. В Debian есть в репозиториях:
apt-get install i2c-tools
Далее делаем:
i2cdetect -y -r 1
1 тут означает номер i2c шины начиная с 0. Т.к. их 2 на BBB, то 2 соответствует номеру 1. Файлы шины i2c находятся в /dev/i2c-0 и i2c-1. Выхлоп должен выглядеть примерно так:
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Видим по адресам 0x20 и 0x21 находятся наши PCF8574.

Пробуем что-нибудь записать/прочитать на Python. Потребуется модуль python-smbus. В Debian он есть в репозиториях:
apt-get install python-smbus
Ну и собственно пишем в микросхему с адресом 0x20:
                                                                                
import smbus
bus = smbus.SMBus(1) # 1 - bus number
bus.write_byte(0x20, 0x5A)

И прочитаем из 0x21

data = bus.read_byte(0x21)

И всё. На данный момент python-smbus доступен только для Python2, так что кто хочет использовать Python3 придётся писать модуль на Си самостоятельно. Кстати, на сайте i2c-tools есть и такой пример.

Чуть не забыл маленький штрих. Приведённые команды исполняются от root. Чтобы иметь доступ к i2c от простого пользователя нужно добавить пользователя в группу i2c:
usermod -a -G i2c debian
Теперь пользователь debian будет иметь доступ к /dev/i2c-{0,1}. Уточните права, владельца и группу для этих файлов устройств, на других дистрибутивах они могут отличаться.
Мой Debian взят тут http://www.armhf.com/. Инструкция по прошивке образа в распаяную на плате флешку тут.

Debian использую взамен Angstrom по одной простой причине: в предустановленном Angstrom используется systemd и для управления сетью своя приблуда connman. Возникла проблема со вторым, стал разбираться - оказывается косяк известный и лечится костылём. Костыль реализуется посредством systemd. Но разбираться с этим выкидышем заоблачного ЧСВ автора желания не было. И надеюсь не придётся ближайшие годы.

















1 комментарий:

  1. In my judgment, people ought to simply invest in V-Bucks if you\\\'re a diehard Fortnite player then anyone enjoy across multiple platforms. Fortnite V-Bucks acquired in Save the World could therefore be invested in new places in Conflict Royale. salsaroc.com fortnite v bucks

    ОтветитьУдалить