====== 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 преобразователь}}