Общие сведения
Модули с технологией Flash-I2C являются модулями полностью совместимыми с протоколом I²C, но, в отличии от многих других обычных модулей I²C, позволяют задавать адреса на шине, что означает, что на шине может находится более 100 одинаковых или разных модулей линейки Flash-I2C с адресами, заданными пользователем. Адрес хранится в энергонезависимой памяти модуля, это означает он сохранится и после отключения питания. Так же ко всем модулям Flash-I2C (кроме модуля Установщик адресов Flash-I2C) есть библиотеки для Arduino и ко многим модулям библиотеки Python для Raspberry Pi. Узнать о наличии библиотеки для Raspberry Pi можно зайдя в wiki соответствующего модуля.
Особенности работы с модулями Flash-I2C
Программная часть
Все модули линейки Flash-I2C поставляются с заданным по умолчанию адресом 0x09 (девять в шестнадцатеричной системе счисления). Если Вы используете более одного модуля в проекте, то каждому модулю необходимо выставить уникальный адрес на шине. Адрес должен находиться в диапазоне от 0x08 до 0x1E (от 8 до 126 в шестнадцатеричной системе счисления). Сделать это можно двумя способами, в зависимости от ситуации: программно, при помощи функции changeAddress() или при помощи Установщика адресов I2C.
Смена адреса программно, на примере модуля Flash-I2C реле:
C++ (Arduino)
// Подключаем библиотеку для работы с модулем Flash-I2C реле #include <iarduino_I2C_Relay.h> // Инстанцируем (создаём) объект библиотеки iarduino_I2C_Relay relay(0x09); // Создаём переменную с новым адресом const uint8_t newAddress = 0x0A; void setup() { Serial.begin(9600); // Инициируем модуль relay.begin(); // Меняем адрес модуля if (relay.changeAddress(newAddress)) { Serial.println("Адрес изменён"); } else { Serial.println("Не удалось изменить адрес. Проверьте подключение модуля"); } } void loop() { ; }
Python (Raspberry Pi)
# Подключаем библиотеку для работы с модулем Flash-I2C реле from pyiArduinoI2Crelay import * # Инстанцируем (создаём) объект библиотеки relay = pyiArduinoI2Crelay(0x09) # Создаём переменную с новым адресом newAddress = 0x0A # Меняем адрес модуля if relay.changeAddress(newAddress): print("Адрес изменён") else: print("Не удалось изменить адрес. Проверьте подключение модуля")
Смена адреса при помощи установщика адресов Flash-I2C
Подключите Установщик адресов I2C Change Address (далее Установщик) к обесточенной шине i2c с другими модулями или с одним модулем, адрес которого необходимо изменить.

Подайте питание на шину. Установщик включит два средних сегмента 7-ми сегментного дисплея ("- -")

Нажмите кнопку "ПОИСК".

В течении нескольких секунд установщик будет показывать количество найденных модулей на шине, затем переключится на отображение адреса первого устройства.

Для навигации по устройствам нажимайте левую или правую кнопки

Для переход в режим установки адреса одновременно нажмите левую и правую кнопки

Начнёт мигать нижний сегмент первой цифры дисплея

Кнопками выберете новый адрес модуля и снова нажмите одновременно левую и правую кнопки


Адрес установлен
Аппаратная часть
Модули линейки Flash-I2C подключаются к шине I2C и могут работать как от 5В так и от 3В постоянного тока. При этом уровни логической "1" на выводах SCL и SDA будут соответствовать напряжению питания.
На всех модулях Flash-I2C колодка выполнена в едином формате, это четыре пина с шагом 0,1 дюйма (2,54 мм), выводы GND, +5V, SDA, SCL
На примере датчика освещённости:

Функции библиотек, общие для всех модулей Flash-I2C
Функция begin();
- Назначение: Инициализация работы с модулем.
- Синтаксис: begin();
- Параметры: Нет.
- Возвращаемое значение: bool - результат инициализации (true или false).
- Примечание: По результату инициализации можно определить наличие модуля на шине.
- Пример:
if( Obj.begin() ){ Serial.print( "Модуль найден и инициирован!" ); } else { Serial.print( "Модуль не найден на шине I2C" ); }
Функция reset();
- Назначение: Перезагрузка модуля.
- Синтаксис: reset();
- Параметры: Нет.
- Возвращаемое значение: bool - результат перезагрузки (true или false).
- Пример:
if( Obj.reset() ){ Serial.print( "Модуль перезагружен" ); } else { Serial.print( "Модуль не перезагружен" ); }
if Obj.reset(): print("Модуль перезагружен") else: print("Модуль не перезагружен")
Функция changeAddress();
- Назначение: Смена адреса модуля на шине I2C.
- Синтаксис: changeAddress( АДРЕС );
- Параметр:
- uint8_t АДРЕС - новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
- Возвращаемое значение: bool - результат смены адреса (true или false).
- Примечание:
- Адрес модуля сохраняется в энергонезависимую память, а значит будет действовать и после отключения питания.
- Текущий адрес модуля можно узнать функцией getAddress().
Пример:
Arduino
if( Obj.changeAddress(0x12) ){ Serial.print( "Адрес модуля изменён на 0x12" ); } else { Serial.print( "Не удалось изменить адрес" ); }
Python (Raspberry Pi)
if Obj.changeAddress(0x12): print("Адрес модуля изменён на 0x12") else: print("Не удалось изменить адрес")
Функция getAddress();
- Назначение: Запрос текущего адреса модуля на шине I2C.
- Синтаксис: getAddress();
- Параметры: Нет.
- Возвращаемое значение: uint8_t АДРЕС - текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
- Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
- Пример:
Arduino
Serial.print( "Адрес модуля на шине I2C = 0x" ); Serial.println( Obj.getAddress(), HEX );
Python (Raspberry Pi)
print("Адрес модуля на шине I2C = 0x", end='') print(Obj.getAddress())
Функция getVersion();
- Назначение: Запрос версии прошивки модуля.
- Синтаксис: getVersion();
- Параметры: Нет
- Возвращаемое значение: uint8_t ВЕРСИЯ - номер версии прошивки от 0 до 255.
- Пример:
Arduino
Serial.print( "Версия прошивки модуля " ); Serial.println( Obj.getVersion() );
Python (Raspberry Pi)
print("Версия прошивки модуля ", end='') print(Obj.getVersion())
Функция setPullI2C();
- Назначение: Управление внутрисхемной подтяжкой линий шины I2C.
- Синтаксис: setPullI2C( [ФЛАГ] );
- Параметр:
- bool ФЛАГ требующий установить внутрисхемную подтяжку линий шины I2C (true или false).
- Возвращаемое значение:
- bool - результат включения / отключения внутрисхемной подтяжки (true или false).
- Примечание:
- Вызов функции без параметра равносилен вызову функции с параметром true - установить.
- Флаг установки внутрисхемной подтяжки сохраняется в энергонезависимую память модуля, а значит будет действовать и после отключения питания.
- Внутрисхемная подтяжка линий шины I2C осуществляется до уровня 3,3 В, но допускает устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В или 5 В, вне зависимости от состояния внутрисхемной подтяжки модуля.
- Пример:
Arduino
if( Obj.setPullI2C(true ) ){ Serial.print( "Внутрисхемная подтяжка установлена." ); } if( Obj.setPullI2C(false) ){ Serial.print( "Внутрисхемная подтяжка отключена." ); }
Python (Raspberry Pi)
if Obj.setPullI2C(True): print("Внутрисхемная подтяжка установлена.") if Obj.setPullI2C(False): print("Внутрисхемная подтяжка отключена.")
Функция getPullI2C();
- Назначение: Запрос состояния внутрисхемной подтяжки линий шины I2C.
- Синтаксис: getPullI2C();
- Параметры: Нет.
- Возвращаемое значение: bool - ФЛАГ включения внутрисхемной подтяжки (true или false).
- Пример:
Arduino
if( Obj.getPullI2C(true) ){ Serial.print( "Внутрисхемная подтяжка включена." ); } else { Serial.print( "Внутрисхемная подтяжка отключена." ); }
Python (Raspberry Pi)
if Obj.getPullI2C(True): print("Внутрисхемная подтяжка включена.") else: print("Внутрисхемная подтяжка отключена.")
Список Wiki модулей
- Датчик освещенности, люксметр, i2c-flash (Trema-модуль)
- Датчик температуры и влажности, i2c-flash (Trema-модуль)
- Модуль реле, 2 канала, i2c
- Модуль твердотельное реле, 4 канала, i2c
- Модуль силовых ключей, 4P канала, i2c
- Модуль силовых ключей, 4N канала, i2c
- Модуль силовых ключей, 4P канала с измерением тока, i2c
- Модуль силовых ключей, 4N канала с измерением тока, i2c
- Датчик освещенности, люксметр, i2c-flash (Trema-модуль)
- Датчик температуры и влажности, i2c-flash (Trema-модуль)
- Бампер с 7 датчиками линий, i2c - flash
- Энкодер, потенциометр, i2c
- Расширитель выводов, i2c - flash (Trema-модуль)
- Расширитель выводов, i2c - flash (Trema-модуль)
- Шина I2C, краткое руководство
Обсуждение