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.
- Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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
. - Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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
. - Подключите к платформе WiFi Slot третью плату расширения Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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.
- Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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
. - Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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
. - Подключите к платформе WiFi Slot третью плату расширения Slot Expander.
- Прошейте управляющую плату скетчем смены адреса.
- 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-разрядный микроконтроллер фирмы STMicroelectronics — STM32F030F4P6 с вычислительном ядром 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 пинов;
0
–9
Логический уровень единицы — 3,3 В, нуля — 0 В. Максимальный ток выхода — 25 мА. К контактам подключены стягивающие и подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно. - ШИМ: 10 пинов;
0
–9
Позволяет выводить аналоговые значения в виде ШИМ-сигнала разрядностью 16 бит. - АЦП: 9 пинов;
0
–8
Позволяет представить аналоговое напряжение в виде числа. Разрядность АЦП – 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 мм