====== Slot Expander ======
Плата расширения [[amp>product/slot-expander?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|Slot Expander]] даст платформе [[amp>product/wifi-slot?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|WiFi Slot]] десяток дополнительных пинов ввода/вывода.
{{ :продукты:wifi-slot-expander:slot-expander.7.jpg?nolink |}}
Slot Expander позволяет использовать 9 из 10 своих пинов как цифровой или аналоговый вход или выход. Пин номер ''9'' способен быть только цифровым входом/выходом и аналоговым выходом.
===== Обзор платы =====
{{youtube>D6vL-kZwS_c?large}}
===== Подключения и настройка =====
Плата расширения Slot Expander получает команды от управляющей платы по протоколу [[Видеоуроки:7-i2c-и-processing|I²C/TWI]]. При подключении к [[amp>product/wifi-slot?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|WiFi Slot]] используйте Slot Connector.
Скрутите две платы через [[amp>product/slot-connector?utm_source=man&utm_campaign=wifi-slot-connector&utm_medium=wiki|Slot Connector]] между собой болтами и гайками. Хитрая схема переходника позволяет передать линию питания — ''5V'' и ''GND'' и данных — ''SDA'' и ''SCL'' без дополнительных проводов.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.png?nolink |}}
===== Примеры работы на C++ =====
==== Маячок ====
В качестве примера повторим первый эксперимент [[:конспект-arduino:светильник-с-управляемой-яркостью|«Маячок»]] из набора [[amp>product/matryoshka-z?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|Матрёшка]]. Для этого установите [[amp>product/troyka-5mm-led-module?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|светодиод 5 мм (Troyka-модуль)]] в пин ''2''. После чего прошейте платформу кодом ниже.
// библиотека для работы I²C
#include
// библиотека для работы с модулем Slot Expander (I²C IO)
#include
// создаём объект 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);
}
После загрузки светодиод начнёт мигать раз в полсекунды.
{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander_red.gif?nolink |}}
==== Квадро Маячок ====
По умолчанию модуль имеет адрес ''42'', который можно изменить прямо в коде программы. Это позволяет подключить к управляющей плате до 126 плат расширений — Slot Expander.
=== Смена адреса устройств ===
Для начала необходимо назначить каждой плате расширения свой индивидуальный адрес.
По умолчанию все платы прошиты с I2C-адресом — 42. Для смены адресов сразу у двух и более Slot Expander, необходимо каждой плате отдельно назначать свой адрес. Для этого подключайте к контроллеру по одной плате расширения для смены адреса на отличный от 42.
- Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.1.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// библиотека для работы I²C
#include
// библиотека для работы с модулем Slot Expander (I²C IO)
#include
// создаём объект 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-expander:wifi-slot_and_wifi-slot-expander.2.png?nolink |}}
- Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.3.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// библиотека для работы I²C
#include
// библиотека для работы с модулем Slot Expander (I²C IO)
#include
// создаём объект 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-expander:wifi-slot_and_wifi-slot-expander.4.png?nolink |}}
- Подключите к платформе WiFi Slot третью плату расширения Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.5.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// библиотека для работы I²C
#include
// библиотека для работы с модулем Slot Expander (I²C IO)
#include
// создаём объект 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''.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.6.png?nolink |}}Адреса успешно изменены — перейдём к примеру работы.
=== Пример кода ===
В качестве примера подключите четыре [[amp>product/troyka-5mm-led-module?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|светодиода 5 мм (Troyka-модуль)]] в собранную конструкцию: по одному светодиоду к пину ''5'' платы расширения Slot Expander и один — к пину ''A2'' платформы WiFi Slot.
// библиотека для работы I²C
#include
// библиотека для работы с модулем Slot Expander (I²C IO)
#include
// создаём объект 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);
}
{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander_quadro_blink.gif?nolink |}}
===== Примеры работы на JavaScript =====
==== Маячок ====
В качестве примера повторим второй эксперимент [[:yodo#маячок|«Маячок»]] из набора [[amp>product/yodo?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|Йодо]]. Для этого установите [[amp>product/troyka-5mm-led-module?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|светодиод 5 мм (Troyka-модуль)]] в пин ''2''. После чего прошейте платформу скриптом ниже.
// настраиваем 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);
После загрузки светодиод начнёт мигать раз в полсекунды.
{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander_green.gif?nolink |}}
==== Квадро Маячок ====
По умолчанию модуль имеет адрес ''42'', который можно изменить прямо в коде программы. Это позволяет подключить к управляющей плате до 126 плат расширений — Slot Expander.
=== Смена адреса устройств ===
Для начала необходимо назначить каждой плате расширения свой индивидуальный адрес.
По умолчанию все платы прошиты с I2C-адресом — 42. Для смены адресов сразу у двух и более Slot Expander, необходимо каждой плате отдельно назначать свой адрес. Для этого подключайте к контроллеру по одной плате расширения для смены адреса на отличный от 42.
- Подключите к платформе WiFi Slot одну из плат расширений Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.1.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// настраиваем 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-expander:wifi-slot_and_wifi-slot-expander.2.png?nolink |}}
- Подключите к платформе WiFi Slot вторую плату расширения Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.3.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// настраиваем 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-expander:wifi-slot_and_wifi-slot-expander.4.png?nolink |}}
- Подключите к платформе WiFi Slot третью плату расширения Slot Expander.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.5.png?nolink |}}
- Прошейте управляющую плату скетчем смены адреса.
// настраиваем 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''.{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander.6.png?nolink |}}Адреса успешно изменены — перейдём к примеру работы.
=== Пример кода ===
В качестве примера подключите четыре [[amp>product/troyka-5mm-led-module?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|светодиода 5 мм (Troyka-модуль)]] в собранную конструкцию: по одному светодиоду к пину ''5'' платы расширения Slot Expander и один — к пину ''A2'' (пин 16 для ESP) платформы WiFi Slot.
// настраиваем 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);
}
{{ :продукты:wifi-slot-expander:wifi-slot_and_wifi-slot-expander_quadro_blink.gif?nolink |}}
===== Элементы платы =====
{{ :продукты:wifi-slot-expander:wifi-slot-expander_annotation.png?nolink |}}
==== Микроконтроллер STM32F030F4P6 ====
Мозгом модуля является мощный 32-разрядный микроконтроллер фирмы [[http://www.st.com|STMicroelectronics]] — {{:продукты:wifi-slot-expander:stm32f030f4p6_datasheet.pdf|STM32F030F4P6}} с вычислительном ядром ARM Cortex® M0.
==== Светодиодная индикация ====
^ Имя светодиода ^ Назначение ^
| ACT |Мигает при обмене данными между платой расширения Slot Expander и платформой WiFi Slot |
==== Понижающий DC-DC ====
Понижающий DC-DC {{:продукты:wifi-slot-expander:ncp1529_datasheet.pdf|NCP1529}} с выходом 3,3 вольта, обеспечивает питание микроконтроллера. Максимальный выходной ток составляет 1 А.
==== Разъём Slot Connector ====
Slot Connector позволяет надёжно и без проводов подключить платы к питанию и шине I²C при помощи 4 стальных винтов и гаек М3.
=== Расспиновка разъёма ===
{{ :продукты:wifi-slot-expander:wifi-slot-expander_connector.png?nolink |}}
^ Имя контакта ^ Назначение ^
| 5V |питание|
| GND |земля|
| SDA |линия данных I²C|
| SCL |линия синхронизации I²C|
===== Распиновка =====
{{ :продукты:wifi-slot-expander:wifi-slot-expander_pinout.png?nolink |}}
==== Пины питания ====
* **5V:** На вывод поступает напряжение от управляющей платформы.
* **3.3V:** На вывод поступает 3,3 В от понижающего DC-DC преобразователя на плате. Преобразователь обеспечивает питание микроконтроллера {{:продукты:wifi-slot-expander:stm32f030f4p6_datasheet.pdf|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''.
===== Принципиальная и монтажная схемы =====
{{:продукты:wifi-slot-expander:wifi-slot-expander_schematic.png?direct&250 |}}
{{ :продукты:wifi-slot-expander:wifi-slot-expander_layout.png?direct&400|}}
===== Характеристики =====
* Микроконтроллер: STM32F030F4P6
* Интерфейс: I²C (адрес по умолчанию: 42)
* Напряжение питания модуля: 3,3–5 В
* Портов ввода-вывода общего назначения: 10
* Напряжение логических уровней: 3,3 В
* Портов с поддержкой ШИМ: 10
* Разрядность ШИМ: 16 бит
* Портов с АЦП: 9
* Разрядность АЦП: 12 бит
* Максимальный ток контакта питания V: 1 А (включая питание микроконтроллера)
* Максимальный ток пина микроконтроллера: 25 мА
* Габариты: 50,8×50,8 мм
===== Ресурсы =====
* [[amp>product/slot-expander?utm_source=man&utm_campaign=wifi-slot-expander&utm_medium=wiki|Slot Expander]] в магазине
* [[https://github.com/amperka/Troyka-GPIO-expander|Библиотека для работы с Arduino]]
* [[js:gpio-expander|Описание библиотеки для Espruino]]
* [[https://github.com/amperka/hardware-drawings/blob/master/wifi-slot-expander.svg|Векторное изображение Slot Expander]]
* {{:продукты:wifi-slot-expander:stm32f030f4p6_datasheet.pdf|Datasheet на микроконтроллер STM32F030F4P6}}
* {{:продукты:wifi-slot-expander:ncp1529_datasheet.pdf|Datasheet на понижающий DC-DC преобразователь}}