КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Общие особенности модулей линейки FLASH-I2C

Общие сведения

Модули с технологией 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 модулей




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями