Каталог

Связь с устройствами I2C

I2C (Inter-Integrated Circuit), двухпроводной интерфейс, представляет собой последовательный интерфейс, используемый для быстрого подключения нескольких устройств к контроллерам и процессорам, таким как Omega2. Примеры I2C- устройств:

  • Датчики температуры, влажности, тока
  • Различные приводы, например, звонок или лампочка
  • Контроллеры, например, реле или моторчик

Связь осуществляется по 2 линиям связи, каждая из которых имеет свой вывод на Omega2:

  • Clock (SCL) – сигнализирует о передаче данных
  • Data (SDA) - переносит данные

Шина I2C использует архитектуру «ведущий-ведомый», что означает следующее:

  • Ведущие - устройства, которые контролируют, когда и кому они отправляют и получают данные.
    • Ведущий посылает команды, которые включают адрес ведомого, который должен его получить.
    • При использовании I2C, Omega2 сконфигурирован единственный ведущий.
  • Ведомые - устройства, которые реагируют на ведущих, когда они получают команду, адресованную им.
    • Каждый ведомый идентифицируется шестнадцатеричным адресом (например, 0x27).
    • Ведомые игнорируют команды, адресованные не им.
  • Ведущие и ведомые работают в двух режимах:
    • transmit - отправка данных
    • receive - прием данных

Для получения дополнительной информации см. статью на Википедии о I2C.

Omega и I2C

Все взаимодействия I2C на Omega2 выполняются с использованием файла виртуального устройства /dev/i2c-0. Это стало возможным благодаря sysfs, псевдо-файловой системе, которая в файлах содержит информацию об аппаратном обеспечении Omega и позволяет пользователю управлять оборудованием, редактируя файлы.

На аппаратном обеспечении

Выводы I2C (SCL и SDA) на Omega2 и на док-станции расширения выделены ниже.

схема omega2

i2c omega2

Примечание. На некоторых старых док-станциях SCL обозначается как контакт 20, а SDA обозначается как контакт 21.

Управление I2C-устройствами из командной строки

Для работы с устройствами I2C используют две утилиты командной строки, i2cget и i2cset. Эти инструменты работают путем доступа к данным, хранящимся в регистрах на устройстве. Регистр - это место в памяти устройства. При чтении/записи на устройство I2C вам необходимо указать регистр на устройстве, к которому вы хотите получить доступ.

Чтение байта

Команда i2cget используется для чтения значения определенного регистра на устройстве I2C. 

Пример использования команды:

i2cget -y 0

Параметры команды описаны ниже:

  • -y – пропустить подтверждение команды i2cget
  • 0 - использовать шину I2C. Omega2 имеет одну шину I2C, обозначенную как шина 0.
  • - адрес ведомого устройства, например, 0x40
  • - регистр на ведомом устройстве, откуда считывать, например, 0x00

Например, допустим, у нас есть датчик температуры I2C по адресу 0x40, действующий как ведомый со следующими регистрами:

  • 0x00 - сохраняет температуру в градусах Фаренгейта
  • 0x01 - сохраняет температуру в градусах Цельсия

Допустим, нам интересно считать температуру в градусах Фаренгейта. Делаем это, используя следующую команду:

i2cget -y 0 0x40 0x00

Результат 0x48, что равно 72 в десятичном исчислении (22 градуса по Цельсию).

Запись байта

i2cset позволяет установить значение регистра на целевом устройстве I2C. Типичная команда:

i2cset -y 0

Параметры команды описаны ниже:

  • -y - пропустить подтверждение команды i2cset
  • 0 - использовать шину I2C. Omega2 имеет одну шину I2C, обозначенную как шина 0.
  • - адрес ведомого устройства, например, 0x27
  • - регистр на ведомом устройстве, который должен быть записан, например, 0x00
  • - значение для записи, например, 0x33

Предположим, у нас есть контроллер освещенности в помещении I2C по адресу 0x27, действующий как ведомый со следующими регистрами:

  • 0x00 - гостиная, 0 – выкл., 1 – вкл.
  • 0x01 - кухня
  • 0x02 - спальня

Например, чтобы включить свет в гостиной, и выключить на кухне, запустим следующие команды:

i2cset -y 0 0x27 0x00 0x01          # вкл. в гостинной 

i2cset -y 0 0x27 0x01 0x00          # выкл. на кухне

Расширения Omega

Некоторые расширения используют I2C для связи с Omega. Чтобы узнать больше о том, как с ними работать, ознакомьтесь с руководствами:

  • Relay Expansion (реле)
  • PWM Expansion (широтно-импульсная модуляция)
  • OLED Expansion (OLED – дисплей)

Перемещение за пределы командной строки

I2C с использованием Python

Разработан модуль I2C Python, который вы можете импортировать в свое приложение. Все подробности см. в I2C Python Module.

Пример. Управление I2C - ЖК-дисплеем.

Это пособие приводят Мэтью Огборн и Дэвид Стайн.

Сначала найдите или купите I2C ЖК-дисплей. Их можно найти в Интернете на Amazon или Ebay.

Установите на свой Omega2 следующие пакеты:

opkg update

opkg install git git-http python pyOnionI2C

Затем установите библиотеку (от Дэвида) для ЖК-дисплея:

cd /root

git clone https://bitbucket.org/fires/fireonion_i2c_lcd

Подключите ваш ЖК-дисплей, как показано ниже:

выводы omega-дисплей

Если вы задумались, «подождите, этот дисплей 5В, а Omega - 3,3 В, как это будет работать?», вы очень внимательны! Что случится, если мы будем использовать 5В на док-станции для питания дисплея, а затем управлять дисплеем с помощью I2C-сигналов Omega с напряжением 3.3В? Это безопасно для Omega, поскольку на GPIO не будет 5В на входе, если мы не пытаемся выполнить I2C-считывание (предполагается, что большинство экранов не поддерживают считывание значения регистров). ЖК-дисплей способен считывать команды от Omega, поскольку логический максимум 3,3В больше, чем логический максимум порогового напряжения на большинстве TTL-схем, используемых в дисплеях.

Перейдите в каталог src:

cd fireonion_i2c_lcd/src

Для использования библиотеки вы можете использовать параметры командной строки:

Наберите:

python lcd.py –help

На выходе:

Usage: lcd.py [options]

Options:

-h, --help show this help message and exit

-a ADDRESS, --address=ADDRESS

I2C Adress

-p, --persistent -p = do not clear display before new write (не очищать дисплей перед новой записью)

--line1=LINE1 text to line 1 (текст на 1 линии)

--line2=LINE2 text to line 2

--line3=LINE3 text to line 3

--line4=LINE4 text to line 4

--backlight-off Turn off backlight (выкл. подсветку)

Пример:

root@Omega-1CD7:~/fires-fireonion_i2c_lcd/src# python lcd.py -a 0x3f --line1="Onion LCD LIB" --line2="--davidstein.cz--"

Теперь вы должны увидеть образец текста на ЖК-дисплее. Вы можете отредактировать lcd.py, чтобы изменить отображаемый текст. Также можете импортировать всю библиотеку в свой проект Python!

i2c дисплей

Дополнительная информация в блоге Дэвида.

I2C с использованием C/C ++

Также разработана библиотеку I2C для C и C ++. Все подробности см. в «Библиотеке I2C C» 

 

footer shadow
Контакты

г. Москва, Пятницкое ш. д. 18, пав. 566

zakaz@compacttool.ru

8-495-752-55-22

compacttool logoadaptive site

accepted payment systems

Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !

© Все права защищены 2015 - 2024г https://compacttool.ru