Slot Expander

Плата расширения Slot Expander даст платформе WiFi Slot десяток дополнительных пинов ввода/вывода.

Slot Expander позволяет использовать 9 из 10 своих пинов как цифровой или аналоговый вход или выход. Пин номер 9 способен быть только цифровым входом/выходом и аналоговым выходом.

Обзор платы

Подключения и настройка

Плата расширения Slot Expander получает команды от управляющей платы по протоколу I²C/TWI. При подключении к WiFi Slot используйте Slot Connector.

Скрутите две платы через Slot Connector между собой болтами и гайками. Хитрая схема переходника позволяет передать линию питания — 5V и GND и данных — SDA и SCL без дополнительных проводов.

Примеры работы на C++

Маячок

В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. Для этого установите светодиод 5 мм (Troyka-модуль) в пин 2. После чего прошейте платформу кодом ниже.

Blink.ino
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулем Slot Expander (I²C IO)
#include <GpioExpander.h>
// создаём объект expander класса GpioExpander по адресу 42
GpioExpander expander(42);
 
// пин подключения светодиода
#define EXPENDER_LED_PIN  2
 
void setup()
{
  // включаем I²C. Для Arduino Due - Wire1.begin();
  Wire.begin();
  // Инициализируем объект expander. Для Arduino Due - adio.begin(&Wire1);
  expander.begin();
  // настраиваем пин светодиодов в режим выхода
  expander.pinMode(EXPENDER_LED_PIN, OUTPUT);
}
 
void loop()
{
  // подаём на пин светодиода модуля Slot Expander «высокий сигнал»
  expander.digitalWrite(EXPENDER_LED_PIN, HIGH);
  // ждём пол секунды
  delay(500);
  // подаём на пин светодиода модуля Slot Expander «низкий сигнал»
  expander.digitalWrite(EXPENDER_LED_PIN, LOW);
  // ждём пол секунды
  delay(500);
}

После загрузки светодиод начнёт мигать раз в полсекунды.

Квадро Маячок

По умолчанию модуль имеет адрес 42, который можно изменить прямо в коде программы. Это позволяет подключить к управляющей плате до 126 плат расширений — Slot Expander.

Смена адреса устройств

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

По умолчанию все платы прошиты с I2C-адресом — 42. Для смены адресов сразу у двух и более Slot Expander, необходимо каждой плате отдельно назначать свой адрес. Для этого подключайте к контроллеру по одной плате расширения для смены адреса на отличный от 42.

  1. Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.
  2. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo43.ino
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулем Slot Expander (I²C IO)
    #include <GpioExpander.h>
    // создаём объект expander класса GpioExpander по адресу 42
    GpioExpander expander(42);
     
    void setup()
    {
      // открываем последовательный порт для мониторинга действий в программе
      // и передаём скорость 9600 бод
      Serial.begin(9600);
      // ждём, пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      } 
      Serial.println("Serial init is OK");
      // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект expander. Для Arduino Due - adio.begin(&Wire1);
      expander.begin();
      // меняем адрес модуля на «43»
      expander.changeAddr(43);
      // ждём 100 мс
      delay(100);
      // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
      expander.saveAddr();
      // печатаем строку об успешной смены адреса
      Serial.println("Change address is OK");
    }
     
    void loop()
    {
    }

    После чего адрес платы расширения будет изменён на 43.

  3. Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.
  4. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo44.ino
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулем Slot Expander (I²C IO)
    #include <GpioExpander.h>
    // создаём объект expander класса GpioExpander по адресу 42
    GpioExpander expander(42);
     
    void setup()
    {
      // открываем последовательный порт для мониторинга действий в программе
      // и передаём скорость 9600 бод
      Serial.begin(9600);
      // ждём, пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      } 
      Serial.println("Serial init is OK");
      // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект expander. Для Arduino Due - adio.begin(&Wire1);
      expander.begin();
      // меняем адрес модуля на «44»
      expander.changeAddr(44);
      // ждём 100 мс
      delay(100);
      // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
      expander.saveAddr();
      // печатаем строку об успешной смене адреса
      Serial.println("Change address is OK");
    }
     
    void loop()
    {
    }

    После чего адрес второй платы расширения будет изменён на 44.

  5. Подключите к платформе WiFi Slot третью плату расширения Slot Expander.
  6. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo45.ino
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулем Slot Expander (I²C IO)
    #include <GpioExpander.h>
    // создаём объект expander класса GpioExpander по адресу 42
    GpioExpander expander(42);
     
    void setup()
    {
      // открываем последовательный порт для мониторинга действий в программе
      // и передаём скорость 9600 бод
      Serial.begin(9600);
      // ждём, пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      } 
      Serial.println("Serial init is OK");
      // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект expander. Для Arduino Due - adio.begin(&Wire1);
      expander.begin();
      // меняем адрес модуля на «45»
      expander.changeAddr(45);
      // ждём 100 мс
      delay(100);
      // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
      expander.saveAddr();
      // печатаем строку об успешной смене адреса
      Serial.println("Change address is OK");
    }
     
    void loop()
    {
    }

    После чего адрес третьей платы расширения будет изменён на 45.Адреса успешно изменены — перейдём к примеру работы.

Пример кода

В качестве примера подключите четыре светодиода 5 мм (Troyka-модуль) в собранную конструкцию: по одному светодиоду к пину 5 платы расширения Slot Expander и один — к пину A2 платформы WiFi Slot.

quadroBlink.ino
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулем Slot Expander (I²C IO)
#include <GpioExpander.h>
// создаём объект expander1 класса GpioExpander по адресу 43
GpioExpander expander1(43);
// создаём объект expander2 класса GpioExpander по адресу 44
GpioExpander expander2(44);
// создаём объект expander3 класса GpioExpander по адресу 45
GpioExpander expander3(45);
 
void setup()
{
  // включаем I²C. Для Arduino Due - Wire1.begin();
  Wire.begin();
  // Инициализируем объекты expander. Для Arduino Due - adio.begin(&Wire1);
  expander1.begin();
  expander2.begin();
  expander3.begin();
  // настраиваем пин светодиода WiFi Slot в режим выхода
  pinMode(A2, OUTPUT);
  // настраиваем пин светодиода модуля Slot Expander1 в режим выхода
  expander1.pinMode(5, OUTPUT);
  // настраиваем пин светодиода модуля Slot Expander2 в режим выхода
  expander2.pinMode(5, OUTPUT);
  // настраиваем пин светодиода модуля Slot Expander3 в режим выхода
  expander3.pinMode(5, OUTPUT);
}
 
void loop()
{
  // подаём на пин светодиода WiFi Slot «высокий уровень»
  digitalWrite(LED_PIN, HIGH);
  // ждём пол секунды
  delay(500);
  // подаём на пин светодиода модуля Slot Expander1 «высокий сигнал»
  expander1.digitalWrite(5, HIGH);
  // ждём пол секунды
  delay(500);
  // подаём на пин светодиода модуля Slot Expander2 «высокий сигнал»
  expander2.digitalWrite(5, HIGH);
  // ждём пол секунды
  delay(500);
  // подаём на пин светодиода модуля Slot Expander3 «высокий сигнал»
  expander3.digitalWrite(5, HIGH);
  // ждём пол секунды
  delay(1000);
  // подаём на пин светодиода WiFi Slot «низкий уровень»
  digitalWrite(A2, LOW);
  // подаём на пин светодиода модуля Slot Expander1 «низкий сигнал»
  expander1.digitalWrite(5, LOW);
  // подаём на пин светодиода модуля Slot Expander2 «низкий сигнал»
  expander2.digitalWrite(5, LOW);
  // подаём на пин светодиода модуля Slot Expander3 «низкий сигнал»
  expander3.digitalWrite(5, LOW);
  // ждём пол секунды
  delay(500);
}

Примеры работы на JavaScript

Маячок

В качестве примера повторим второй эксперимент «Маячок» из набора Йодо. Для этого установите светодиод 5 мм (Troyka-модуль) в пин 2. После чего прошейте платформу скриптом ниже.

Blink.js
// настраиваем I2C1 для работы модуля
I2C1.setup({sda: D2, scl: D0, bitrate: 100000});
 
// подключаем модуль к I2C1
var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
 
// устанавливаем пин 2 на модуле в режим выхода
ext.pinMode(2, 'output');
 
var pinState = false;
 
// раз в полсекунды меняем инвертируем выходной сигнал
setInterval(function() {
  ext.digitalWrite(2, pinState);
  pinState = !pinState;
}, 500);

После загрузки светодиод начнёт мигать раз в полсекунды.

Квадро Маячок

По умолчанию модуль имеет адрес 42, который можно изменить прямо в коде программы. Это позволяет подключить к управляющей плате до 126 плат расширений — Slot Expander.

Смена адреса устройств

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

По умолчанию все платы прошиты с I2C-адресом — 42. Для смены адресов сразу у двух и более Slot Expander, необходимо каждой плате отдельно назначать свой адрес. Для этого подключайте к контроллеру по одной плате расширения для смены адреса на отличный от 42.

  1. Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.
  2. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo43.js
    // настраиваем I2C1 для работы модуля
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    // подключаем модуль с адресом 42 к I2C1
    var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
    // меняем адрес модуля на «43»
    ext.changeAddr(43);
    // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
    ext.saveAddr();

    После чего адрес платы расширения будет изменён на 43.

  3. Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.
  4. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo44.js
    // настраиваем I2C1 для работы модуля
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    // подключаем модуль с адресом 42 к I2C1
    var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
    // меняем адрес модуля на «44»
    ext.changeAddr(44);
    // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
    ext.saveAddr();

    После чего адрес второй платы расширения будет изменён на 44.

  5. Подключите к платформе WiFi Slot третью плату расширения Slot Expander.
  6. Прошейте управляющую плату скетчем смены адреса.
    changeAddressTo45.js
    // настраиваем I2C1 для работы модуля
    I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
    // подключаем модуль с адресом 42 к I2C1
    var ext = require('@amperka/gpio-expander').connect({i2c: I2C1, address: 42});
    // меняем адрес модуля на «45»
    ext.changeAddr(45);
    // сохраняем адрес во Flash-памяти контроллера на модуле Slot Expander
    ext.saveAddr();

    После чего адрес третьей платы расширения будет изменён на 45.Адреса успешно изменены — перейдём к примеру работы.

Пример кода

В качестве примера подключите четыре светодиода 5 мм (Troyka-модуль) в собранную конструкцию: по одному светодиоду к пину 5 платы расширения Slot Expander и один — к пину A2 (пин 16 для ESP) платформы WiFi Slot.

quadroBlink.js
// настраиваем I2C1 для работы модуля
I2C1.setup({sda: D2, scl: D0, bitrate: 100000});
// подключаем библиотеку для работы с платой расширения Slot Expander
var expanders = require('@amperka/gpio-expander');
// подключаем модули к I2C1 по адресу 43, 44 и 45
var ext43 = expanders.connect({i2c: I2C1, address: 43});
var ext44 = expanders.connect({i2c: I2C1, address: 44});
var ext45 = expanders.connect({i2c: I2C1, address: 45});
// интервал времени
var time = 500;
// счётчик
var count = 0;
// массив для хранения устройств и пинов управления
var array = [[this,16], [ext43, 5], [ext44, 5], [ext45, 5]];
 
// назначаем пины в режиме выхода
for (var i = 0; i < array.length; i++){
 array[i][0].pinMode(array[i][1], 'output');
}
 
// каждые 500 миллисекунд
setInterval(()=>{
  if(count === array.length){
    count = 0;
    // идём по циклу и выключаем все светодиоды
    for (var i = 0; i < array.length; i++){
      array[i][0].digitalWrite(array[i][1], LOW);
   }
  } else {
    // включаем текущий светодиод
    array[count][0].digitalWrite(array[count][1], HIGH);
    count++;
  }
},time);
 
}

Элементы платы

Микроконтроллер STM32F030F4P6

Мозгом модуля является мощный 32-разрядный микроконтроллер фирмы STMicroelectronicsSTM32F030F4P6 с вычислительном ядром ARM Cortex® M0.

Светодиодная индикация

Имя светодиода Назначение
ACT Мигает при обмене данными между платой расширения Slot Expander и платформой WiFi Slot

Понижающий DC-DC

Понижающий DC-DC NCP1529 с выходом 3,3 вольта, обеспечивает питание микроконтроллера. Максимальный выходной ток составляет 1 А.

Разъём Slot Connector

Slot Connector позволяет надёжно и без проводов подключить платы к питанию и шине I²C при помощи 4 стальных винтов и гаек М3.

Расспиновка разъёма

Имя контакта Назначение
5V питание
GND земля
SDA линия данных I²C
SCL линия синхронизации I²C

Распиновка

Пины питания

  • 5V: На вывод поступает напряжение от управляющей платформы.
  • 3.3V: На вывод поступает 3,3 В от понижающего DC-DC преобразователя на плате. Преобразователь обеспечивает питание микроконтроллера STM32F030F4P6. Максимальный ток c пина 1 А.
  • GND: Выводы земли.

Пины ввода/вывода

В отличии от большинства плат Arduino, родным напряжением платы расширения Slot Expander является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Большее напряжение может повредить микроконтроллер на плате!

Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений.

  • Цифровые входы/выходы: 10 пинов; 09
    Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 25 мА. К контактам подключены стягивающие и подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
  • ШИМ: 10 пинов; 09
    Позволяет выводить аналоговые значения в виде ШИМ-сигнала разрядностью 16 бит.
  • АЦП: 9 пинов; 08
    Позволяет представить аналоговое напряжение в виде числа. Разрядность АЦП – 12 бит. На аналоговые входы WiFi Expender можно подавать напряжение в диапазоне от 0 до 3,3 В. При подаче большего напряжения модуль может выйти из строя.
  • TWI/I²C: пины SDA и SCL
    Используются для общения с управляющей платформой в качестве ведомого устройства.
  • UART: пины RX и TX
    Могут быть использованы для перепрошивки платы расширения по интерфейсу UART.
  • SWD: пины SWCLK и SWDIO
    Могут быть использованы для перепрошивки платы расширения по интерфейсу SWD.

Принципиальная и монтажная схемы

Характеристики

  • Микроконтроллер: STM32F030F4P6
  • Интерфейс: I²C (адрес по умолчанию: 42)
  • Напряжение питания модуля: 3,3–5 В
  • Портов ввода-вывода общего назначения: 10
  • Напряжение логических уровней: 3,3 В
  • Портов с поддержкой ШИМ: 10
  • Разрядность ШИМ: 16 бит
  • Портов с АЦП: 9
  • Разрядность АЦП: 12 бит
  • Максимальный ток контакта питания V: 1 А (включая питание микроконтроллера)
  • Максимальный ток пина микроконтроллера: 25 мА
  • Габариты: 50,8×50,8 мм

Ресурсы