
Общие сведения:
Trema-модуль расширитель на 8 входов/выходов - позволяет увеличить количество цифровых выводов Arduino. Каждый вывод расширителя является полноценным двунаправленным выводом, а не квазидвунаправленным, то есть его можно использовать как обычный, цифровой, вывод Arduino, без ограничений.
Видео:
Спецификация:
- Напряжение питания: 2,3 ... 5,5 В
- Потребляемый ток: до 175 мкА
- Потребляемый ток в режиме ожидания: до 1 мкА
- Выходной ток на выводах: до 50 мА
- Напряжение на выводах I/O: до 5,5 В
- Общая потребляемая мощьность: до 200 мВт
- Уровень логической 1 на шине I2C: 0.7Vcc ... 5.5 В
- Уровень логического 0 на шине I2C: -0.5 ... 0.3Vcc В
- Частота шины I2C: 100, 400 кГц
- Рабочая температура: -40 ... 85 °С
- Температура хранения: -65 ... 150 °С
- Габариты: 65х30х19 мм (с учётом выводов)
- Вес: 7 г
Подключение:
Модуль подключается к аппаратной или программной шине I2C Arduino.
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ - 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Способ - 2 : Используя Trema Set Shield
Модуль можно подключить к любому из I2C входов Trema Set Shield.

Способ - 3 : Используя проводной шлейф и Shield
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

При подключении нескольких модулей, установите им разные адреса.

Если Вы подключаете расширитель на 8 входов/выходов к другим платам, например, WEMOS D1 mini или WEMOS D1 mini Pro на базе микроконтроллера ESP8266, и т.д., то перед подключением библиотеки iarduino_I2C_IO, нужно подключить библиотеку Wire, как это описано в разделе Wiki - расширенные возможности библиотек iarduino для шины I2C.
Питание:
Входное напряжение питания 5 В, или 3,3 В постоянного тока, подаётся на выводы Vcc и GND модуля.
При питании модуля от напряжения 3,3 В, выводы модуля толерантны к напряжению 5 В.
Подробнее о модуле:
Модуль построен на базе чипа PCA9534D и использует шину I2C, с тактовой частотой до 400 кГц. В модуле реализована аппаратная возможность выбора адреса на шине, от 0x20 до 0x27, что позволяет подключить на одной шине до 8 модулей. Выбор адреса осуществляется установкой трех переключателей в соответствии с таблицей, размещенной на плате модуля. Над таблицей размещены светодиоды, включение которых соответствует единице в таблице. Для работы с модулем, нами разработана библиотека iarduino_I2C_IO, при использовании которой, Вы можете управлять выводами модуля, используя функции объекта библиотеки, или используя стандартные функции: pinMode, digitalWrite и digitalRead, используемые для управления обычными выводами Arduino.
Для работы с модулем, предлагаем воспользоваться библиотекой iarduino_I2C_IO, которая позволяет использовать как функции объекта, так и стандартные функции работы с цифровыми выводами.
Подробнее про установку библиотеки читайте в нашей инструкции..
Примеры:
Управление выводами модуля через функции объекта: pinMode, digitalWrite и digitalRead
#include <iarduino_I2C_IO.h> // Подключаем библиотеку iarduino_I2C_IO modul_1(0x24); // Объявляем объект modul_1, указывая установленный адрес на модуле 0x24 iarduino_I2C_IO modul_2(0x26); // Объявляем объект modul_2, указывая установленный адрес на модуле 0x26 // Для каждого модуля создаётся свой объект, с указанием адреса модуля void setup() { modul_1.begin(); // Инициируем работу с 1 модулем modul_2.begin(); // Инициируем работу с 2 модулем modul_1.pinMode(5, OUTPUT); // Конфигурируем 5 вывод 1 модуля как выход modul_1.pinMode(7, INPUT ); // Конфигурируем 7 вывод 1 модуля как вход modul_2.pinMode(5, OUTPUT); // Конфигурируем 5 вывод 2 модуля как выход modul_2.pinMode(7, INPUT ); // Конфигурируем 7 вывод 2 модуля как вход } void loop(){ modul_1.digitalWrite(5, HIGH); // Устанавливаем на 5 выводе 1 модуля, состояние логической 1 modul_2.digitalWrite(5, LOW); // Устанавливаем на 5 выводе 2 модуля, состояние логического 0 int a = modul_1.digitalRead(7); // читаем состояние 7 вывода 1 модуля в переменную a int b = modul_2.digitalRead(7); // читаем состояние 7 вывода 2 модуля в переменную b }
Управление выводами модуля через стандартные функции: pinMode, digitalWrite и digitalRead
#include <iarduino_I2C_IO_Global.h> // Подключаем библиотеку, разрешая использовать обычные функции для управления выводами модуля // При этом, адрес 1 модуля должен быть 0x20, следующего 0x21 и т.д. // Тогда выводы 0-7 принадлежат 1 модулю, 8-15 второму и т.д. // Номера выводов Arduino указываются типом uint8_t, а модулей uint16_t. void setup() { iarduino_I2C_IO_Global.begin(); // Инициируем раборту с модулями расширения выводов pinMode(uint8_t(3), OUTPUT); // Конфигурируем 3 вывод Arduino как выход pinMode(uint8_t(7), INPUT ); // Конфигурируем 7 вывод Arduino как вход pinMode(uint16_t(3), OUTPUT); // Конфигурируем 3 вывод модуля как выход pinMode(uint16_t(7), INPUT ); // Конфигурируем 7 вывод модуля как вход } void loop(){ digitalWrite(uint8_t(3), HIGH); // Устанавливаем на 3 выводе arduino, состояние логической 1 digitalWrite(uint16_t(3), LOW); // Устанавливаем на 3 выводе модуля , состояние логического 0 int a = digitalRead(uint8_t(7)); // читаем состояние 7 вывода Arduino в переменную a int b = digitalRead(uint16_t(7)); // читаем состояние 7 вывода модуля в переменную b }
В первом примере, обращение к каждому модулю осуществляется через его объект, а во втором, обращение осуществляется через стандартные функции управления цифровыми выводами, при этом, выводы Arduino указываются типом uint8_t, а выводы модулей типом uint16_t.
Описание основных функций библиотеки:
Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C.
О том как выбрать тип шины I2C рассказано в статье Wiki - расширенные возможности библиотек iarduino для шины I2C.
Работа с модулями через стандартные функции:
Подключение библиотеки:
#include <iarduino_I2C_IO_Global.h> // Подключаем библиотеку, разрешая использовать обычные функции для управления выводами модуля // Объекты создавать не нужно!
Функция begin();
- Назначение: Инициализация работы с модулями.
- Синтаксис: begin();
- Параметры: Нет.
- Возвращаемые значения: Нет.
- Примечание: Вызывается 1 раз в коде setup.
- Пример:
iarduino_I2C_IO_Global.begin(); // Инициируем работу модуля
Стандартные функции pinMode(); digitalRead(); digitalWrite();
- Назначение: Установка режима работы выводов, чтение и установка состояний выводов.
- Параметры:
- №_ВЫВОДА_МОДУЛЯ - число, типа uint16_t.
- №_ВЫВОДА_ARDUINO - число, типа uint8_t.
- Примечание: Использование других типов, вызовет ошибку.
- Пример:
digitalWrite( uint16_t(25) , digitalRead( uint16_t(35) )); // Копируем состояние с 35 вывода модуля на 25 вывод модуля // 25 вывод, это 1 вывод модуля с адресом 0x23 на шине I2C // 35 вывод, это 3 вывод модуля с адресом 0x24 на шине I2C digitalWrite( uint8_t(3) , digitalRead( uint16_t(53) )); // Копируем состояние с 53 вывода модуля на 3 вывод Arduino // 53 вывод, это 5 вывод модуля с адресом 0x26 на шине I2C
Обращение к модулям осуществляется без объектов, а нумерация выводов всех модулей сквозная, по порядку адресов на шине I2C (см. таблицу). Допускается пропускать адреса модулей на шине I2C, например, установить два модуля с адресами 0x21 и 0x23, но и обращаться придется к выводам с номерами 8-15 и 24-31.
Номера выводов, указываемые в стандартных функциях, зависят от адреса модуля на шине I2C:
Адрес модуля: | 0x20 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 |
---|---|---|---|---|---|---|---|---|
Вход/Выход № 0 | 0 | 8 | 16 | 24 | 32 | 40 | 48 | 56 |
Вход/Выход № 1 | 1 | 9 | 17 | 25 | 33 | 41 | 49 | 57 |
Вход/Выход № 2 | 2 | 10 | 18 | 26 | 34 | 42 | 50 | 58 |
Вход/Выход № 3 | 3 | 11 | 19 | 27 | 35 | 43 | 51 | 59 |
Вход/Выход № 4 | 4 | 12 | 20 | 28 | 36 | 44 | 52 | 60 |
Вход/Выход № 5 | 5 | 13 | 21 | 29 | 37 | 45 | 53 | 61 |
Вход/Выход № 6 | 6 | 14 | 22 | 30 | 38 | 46 | 54 | 62 |
Вход/Выход № 7 | 7 | 15 | 23 | 31 | 39 | 47 | 55 | 63 |
Описание дополнительных функций библиотеки:
Работа с модулями через объекты библиотеки:
Подключение библиотеки:
#include <iarduino_I2C_IO.h> // Подключаем библиотеку iarduino_I2C_IO exp( АДРЕС ); // Объявляем объект exp, с указанием адреса модуля на шине I2C. // Для каждого модуля создаётся свой объект, с указанием адреса модуля. // Примечание: // Допускается создание одного объекта без указания адреса модуля, который сможет работать с любым модулем на шине. // При этом, адрес 1 модуля должен быть 0x20, следующего 0x21 и т.д. // Тогда выводы 0-7 принадлежат 1 модулю, 8-15 второму и т.д.
Функция begin();
- Назначение: Инициализация работы с модулем
- Синтаксис: begin();
- Параметры: Нет.
- Возвращаемые значения: Нет.
- Примечание: Вызывается 1 раз в коде setup.
- Пример:
exp.begin(); // Инициируем работу модуля
Функция pinMode();
- Назначение: Установка режима работы вывода модуля (вход или выход).
- Синтаксис: pinMode( №_ВЫВОДА_МОДУЛЯ , РЕЖИМ_РАБОТЫ );
- Параметры:
- №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее конфигурируемому выводу.
- РЕЖИМ_РАБОТЫ - устанавливаемый режим работы вывода модуля: (INPUT или OUTPUT).
- Возвращаемые значения: Нет.
- Примечание: Работает как одноимённая функция pinMode.
exp.pinMode(0, INPUT ); // Конфигурируем 0 вывод модуля как вход exp.pinMode(1, OUTPUT); // Конфигурируем 1 вывод модуля как выход
Функция digitalRead();
- Назначение: Чтение логического состояния на выводе модуля (LOW или HIGH).
- Синтаксис: digitalRead( №_ВЫВОДА_МОДУЛЯ );
- Параметры:
- №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее выводу модуля, состояние которого требуется прочитать.
- Возвращаемые значения: bool - логическое состояние на выводе (LOW или HIGH).
- Примечание: Работает как одноимённая функция analogRead.
- Пример:
bool val = exp.digitalRead(0); // Читаем состояние нулевого входа модуля в переменную val
Функция digitalWrite();
- Назначение: Установка логического состояния на выводе модуля (LOW или HIGH).
- Синтаксис: digitalWrite( №_ВЫВОДА_МОДУЛЯ , СОСТОЯНИЕ);
- Параметры:
- №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее выводу, состояние которого требуется установить.
- СОСТОЯНИЕ - устанавливаемое логическое состояние на выводе (LOW или HIGH).
- Возвращаемые значения: Нет.
- Примечание: Работает как одноимённая функция digitalWrite.
exp.digitalWrite(1, HIGH); // Устанавливаем на первом выводе модуля состояние логической единицы
Нумерация выводов для каждого модуля начинается с 0.
Применение:
- Увеличение количества цифровых входов/выходов Arduino.
- Уменьшение числа проводов, между Arduino и цифровыми устройствами.
- Усиление помехозащищенности, если устройства находятся на значительном удалении от arduino.
Обсуждение