
USB GPIO Extender: инструкция и команды
Подключение USB GPIO Extender с пятью входами и пятью выходами, команды CDC, примеры для Windows, Linux и Android и электрические ограничения.
USB GPIO Extender имеет пять фиксированных выходов и пять входов. Он определяется как виртуальный COM-порт и принимает короткие текстовые команды, поэтому им можно управлять из терминала, BAT/Bash-скрипта или своей программы.
Перед подключением
GPIO рассчитаны на логические сигналы. Не подключайте двигатель, лампу, соленоид или катушку реле прямо к выходу: используйте транзисторный либо релейный модуль с защитой от выбросов напряжения. Если внешняя схема не развязана гальванически, объедините её GND с GND контроллера.
Первый запуск
- Подключите устройство к USB.
- Найдите появившийся порт:
COMxв Windows или/dev/ttyACM0в Linux. - Откройте порт в терминале или программе.
- Отправьте
~I, чтобы проверить связь и получить версию прошивки.
В Windows 8/10/11, Linux и macOS отдельный драйвер обычно не нужен. Для Windows 7 используйте инструкцию по CDC-драйверу.
Входы и выходы
Выходы работают в двухтактном режиме без подтяжки. Входы подтянуты к +3,3 В:
свободный вход читается как 1, а замкнутый на GND — как 0.
| Вывод | Функция | Вывод | Функция |
|---|---|---|---|
| 1 | выход | 6 | вход |
| 2 | выход | 7 | вход |
| 3 | выход | 8 | вход |
| 4 | выход | 9 | вход |
| 5 | выход | 10 | вход |

Команды
| Команда | Назначение | Ответ |
|---|---|---|
~Sx | установить выход x в 1 | ~Sx |
~Rx | установить выход x в 0 | ~Rx |
~A | прочитать все пять входов | например, ~A11001 |
~Pxxxxx | установить все пять выходов одной строкой | ~Pxxxxx |
~B | перезагрузить модуль | без ответа |
~I | получить версию прошивки | строка версии |
Примеры
Windows BAT, циклическая установка выходов:
@echo off
SET portname=COM12
:loop
set /p x="~P10101" <nul >\\.\%portname%
ping -n 2 127.0.0.1 > nul
goto loop
Linux, командная строка:
#!/bin/bash
PORT=/dev/ttyACM0
while true; do
echo -n "~P10101" > "$PORT"
sleep 1
done
Python. Нужна библиотека pyserial:
python -m pip install pyserial. В скриптах укажите свой порт в PORT.
Устройство отвечает без перевода строки, поэтому скрипты читают заданное число
байт: 7 для ~A и 3 для ~Sx и ~Rx.
Наблюдение за входами. Скрипт печатает состояние входов 6–10 при каждом изменении; остановите его сочетанием Ctrl+C:
import time
import serial
PORT = "COM12" # Linux: "/dev/ttyACM0", macOS: "/dev/tty.usbmodem..."
with serial.Serial(PORT, 115200, timeout=1) as ser:
last = b""
try:
while True:
ser.write(b"~A")
reply = ser.read(7) # например, b"~A11001"
if reply.startswith(b"~A") and reply != last:
print("Входы 6-10:", reply[2:].decode())
last = reply
time.sleep(0.1)
except KeyboardInterrupt:
pass
Включение выхода на заданное время. Скрипт включает выход 1 на две секунды и выключает его, даже если вы прервали ожидание сочетанием Ctrl+C:
import time
import serial
PORT = "COM12" # Linux: "/dev/ttyACM0", macOS: "/dev/tty.usbmodem..."
OUTPUT = 1 # номер выхода, от 1 до 5
SECONDS = 2
with serial.Serial(PORT, 115200, timeout=1) as ser:
ser.write(f"~S{OUTPUT}".encode())
print(ser.read(3)) # b"~S1": устройство повторяет команду
try:
time.sleep(SECONDS)
finally:
ser.write(f"~R{OUTPUT}".encode())
print(ser.read(3)) # b"~R1"
Демо-программа для компьютера
Чтобы проверить устройство без терминала, запустите программу с окном: пять кнопок выходов и пять индикаторов входов. Она работает в Windows, Linux и macOS. Как и приложение для Android, это демонстрационная программа для собственных доработок: исходный код открыт, и на его основе можно написать свою. Она написана на C с библиотеками SDL2 и Nuklear, а работа с портом вынесена в отдельные файлы для POSIX и Windows.
Запуск
В папке со сборками лежат архивы для трёх систем:
| Система | Архив | Что внутри и что нужно |
|---|---|---|
| Windows | gpio_extender1_demo_win.zip | gpio_extender.exe и SDL2.dll: держите оба файла в одной папке |
| Linux x86-64 | gpio_extender1_demo_linux.zip | gpio_extender; нужна библиотека SDL2, например sudo apt install libsdl2-2.0-0 в Debian и Ubuntu |
| macOS, процессор Intel | gpio_extender_macos.zip | gpio_extender; нужна библиотека SDL2 из Homebrew: brew install sdl2. На Mac с Apple Silicon соберите программу из исходников |
- Скачайте архив для своей системы, распакуйте его и при необходимости установите SDL2.
- Подключите устройство и запустите программу. Нажмите «Скан» и выберите порт
в списке «Порт»:
COMxв Windows,/dev/ttyACM*или/dev/ttyUSB*в Linux,/dev/cu.*в macOS. Нажмите «Подключить». Скорость порта — 115 200 бод, 8N1, программа задаёт её сама. - Кнопки «Выход» 1–5 включают и выключают выходы: включённый выход подсвечен зелёным. Индикаторы «Вход» 6–10 показывают уровень на входах: зелёный — высокий, серый — низкий. Номера совпадают с номерами выводов в таблице выше.

/dev/ttyACM0: выходы 1, 3 и 5 включены, на входах 6, 8 и 10 высокий уровень.Программа каждые 10 мс по очереди отправляет ~A (чтение входов) и ~P с
состоянием пяти выходов. Поэтому выходы получают актуальное состояние
постоянно, а не только при нажатии кнопки.
Сборка из исходников
Исходный код программы
состоит из каталога src/ и библиотеки Nuklear в third_party/. Логика
интерфейса и протокол находятся в src/main.c, а работа с портом — в
src/serial.c (Linux и macOS) и src/serial_win32.c (Windows).
В Linux и macOS установите SDL2 (sudo apt install libsdl2-dev или
brew install sdl2) и выполните в каталоге проекта:
make
./gpio_extender
Для Windows команда make windows собирает gpio_extender.exe
кросс-компиляцией в Linux: нужны MinGW-w64 и пакет SDL2 для него. Положите
SDL2.dll рядом с .exe.
Управление с Android
Тот же виртуальный COM-порт можно открыть на планшете или смартфоне с Android 7.0 и новее. Нужны поддержка USB Host и переходник USB OTG. Для этого есть пример приложения с открытым исходным кодом: он включает выходы, показывает уровни входов и отправляет команды из таблицы выше. Пример рассчитан на разработчиков: по исходникам видно, как подключиться к порту, отправить команду и разобрать ответ.
Приложение работает без root-прав через стандартный USB Host API и не запрашивает доступ к интернету. Его проверяли на планшете с Android 7.0.
Установка и подключение
- Скачайте gpio-extender.apk и установите его. APK подписан отладочным ключом, поэтому Android может попросить разрешить установку из неизвестных источников.
- Подключите USB GPIO Extender к планшету через переходник USB OTG.
- Запустите приложение и подтвердите запрос доступа к USB. В верхней карточке
появится статус «Подключено» и строка версии из ответа на
~I. - Откройте «Настройки» и проверьте тип устройства: для этой модели нужен «GPIO Extender 1», он выбран по умолчанию. Приложение не определяет версию по USB, поэтому тип выбирают вручную.
Экраны приложения
- «Управление» — кнопки «Выкл.» и «Вкл.» для пяти выходов и индикаторы пяти входов. Пока вкладка открыта, состояние входов обновляется раз в секунду; кнопка «Обновить входы» запрашивает его сразу. Среди команд нет чтения выходов, поэтому до первой подтверждённой команды приложение показывает для выхода «Состояние неизвестно».
- «Консоль» — поле для команды с
~или без него. Журнал показывает отправленные команды и ответы устройства и вмещает 500 записей.


~I и ответ с версией прошивки. Серийный номер скрыт.Исходники
Исходный код приложения написан на Kotlin и Jetpack Compose. USB-драйвер usb-serial-for-android входит в APK, системный драйвер CDC не нужен.
protocol/Extender1Protocol.ktформирует команды и разбирает ответы USB GPIO Extender;protocol/SerialCommandClient.ktотправляет команду и ждёт ответ;usb/AndroidUsbSerialTransport.ktищет устройство, запрашивает доступ к USB и работает с портом.
Приложение принимает устройства с VID 0483 и PID 5740 (USB GPIO Extender)
или A26A (GPIO Extender-2). Фильтр задан в
res/xml/device_filter.xml и в AndroidUsbSerialTransport.kt.
Для сборки нужны Android SDK и JDK 17 или новее: выполните
./gradlew assembleDebug в каталоге android. Минимальная версия Android —
7.0 (API 24).
Характеристики
| Параметр | Значение |
|---|---|
| Питание | USB 5 В ±10 % |
| Собственное потребление | около 20 мА |
| Максимальный ток одного выхода | 20 мА |
| Максимальный ток всех выходов | 80 мА |
| Допустимое напряжение на входах | 0…3,3 В |
| Габариты | 54 × 15 × 10 мм |
| Рабочая температура | −40…+85 °C |