Плата расширения Slot Expander даст платформе WiFi Slot десяток дополнительных пинов ввода/вывода.
Slot Expander позволяет использовать 9 из 10 своих пинов как цифровой или аналоговый вход или выход. Пин номер 9
способен быть только цифровым входом/выходом и аналоговым выходом.
Плата расширения Slot Expander получает команды от управляющей платы по протоколу I²C/TWI. При подключении к WiFi Slot используйте Slot Connector.
Скрутите две платы через Slot Connector между собой болтами и гайками. Хитрая схема переходника позволяет передать линию питания — 5V
и GND
и данных — SDA
и SCL
без дополнительных проводов.
В качестве примера повторим первый эксперимент «Маячок» из набора Матрёшка. Для этого установите светодиод 5 мм (Troyka-модуль) в пин 2
. После чего прошейте платформу кодом ниже.
// библиотека для работы 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.
// библиотека для работы 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
.
// библиотека для работы 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
.
// библиотека для работы 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.
// библиотека для работы 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); }
В качестве примера повторим второй эксперимент «Маячок» из набора Йодо. Для этого установите светодиод 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);
После загрузки светодиод начнёт мигать раз в полсекунды.
По умолчанию модуль имеет адрес 42
, который можно изменить прямо в коде программы. Это позволяет подключить к управляющей плате до 126 плат расширений — Slot Expander.
Для начала необходимо назначить каждой плате расширения свой индивидуальный адрес.
По умолчанию все платы прошиты с I2C-адресом — 42. Для смены адресов сразу у двух и более Slot Expander, необходимо каждой плате отдельно назначать свой адрес. Для этого подключайте к контроллеру по одной плате расширения для смены адреса на отличный от 42.
// настраиваем 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
.
// настраиваем 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
.
// настраиваем 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.
// настраиваем 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); }
Мозгом модуля является мощный 32-разрядный микроконтроллер фирмы STMicroelectronics — STM32F030F4P6 с вычислительном ядром ARM Cortex® M0.
Имя светодиода | Назначение |
---|---|
ACT | Мигает при обмене данными между платой расширения Slot Expander и платформой WiFi Slot |
Понижающий DC-DC NCP1529 с выходом 3,3 вольта, обеспечивает питание микроконтроллера. Максимальный выходной ток составляет 1 А.
Slot Connector позволяет надёжно и без проводов подключить платы к питанию и шине I²C при помощи 4 стальных винтов и гаек М3.
Имя контакта | Назначение |
---|---|
5V | питание |
GND | земля |
SDA | линия данных I²C |
SCL | линия синхронизации I²C |
В отличии от большинства плат Arduino, родным напряжением платы расширения Slot Expander является 3,3 В, а не 5 В. Выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Большее напряжение может повредить микроконтроллер на плате!
Будьте внимательны при подключении периферии: убедитесь, что она может корректно функционировать в этом диапазоне напряжений.
0
–9
0
–9
0
–8
SDA
и SCL
RX
и TX
UART
.SWCLK
и SWDIO
SWD
.