
GPIO Extender-2: инструкция, команды и сценарии
Настройка десяти выводов GPIO Extender-2, команды CDC/HID, ШИМ, АЦП, UART, DHT22, WS2812 и встроенные сценарии.
GPIO Extender-2 предоставляет десять универсальных выводов и управляется по USB CDC или HID. Основная логика может оставаться в программе на ПК, а короткие последовательности GPIO, ШИМ и АЦП выполняться внутри контроллера.
Первый запуск
Подключите устройство к USB. Оно определяется как виртуальный COM-порт (CDC) и как HID-устройство.
Для работы через CDC откройте порт в терминале: например,
COM3в Windows,/dev/tty.usbmodem...в macOS или/dev/ttyACM0в Linux. Подойдут PuTTY, Tera Term, Arduino Serial Monitor,screen, Minicom илиpyserial-miniterm.Каждая команда начинается с
~и завершается символами\r\n. Отправьте~I, чтобы проверить связь:> ~I < ~IGPIO-Extender-2-1.2.0;SN:xxxx-xxxx-xxxxЗдесь и далее
>обозначает отправленную команду, а<— ответ устройства. Номер версии и серийный номер в ответе~Iзависят от экземпляра.В CDC по умолчанию может быть включён повтор введённых символов. Для обмена с программой его удобнее явно выключить командой
~E0;~E1включает повтор обратно:> ~E0 < ~EOKПеред подключением нагрузки настройте и проверьте каждый вывод отдельно.
Режимы выводов
| Режим | Символ | Назначение |
|---|---|---|
| Вход GPIO | I | цифровой вход |
| Выход GPIO | O | цифровой выход |
| ШИМ (PWM) | P | широтно-импульсная модуляция |
| Измерение сигнала (CC) | C | частота и коэффициент заполнения |
| Аналоговый вход (АЦП) | A | значение 0–4095 |
| UART TX | T | передача UART |
| UART RX | R | приём UART |
| DHT | D | DHT22/AM2302 |
| WS2812 | W | адресная RGB-лента |
| Вывод | Поддерживаемые функции |
|---|---|
| 1 | GPIO, АЦП, DHT |
| 2 | GPIO, ШИМ, АЦП, UART TX, DHT |
| 3 | GPIO, ШИМ, АЦП, DHT |
| 4 | GPIO, АЦП, WS2812B, измерение частоты и коэффициента заполнения, DHT |
| 5 | GPIO, АЦП, измерение частоты и коэффициента заполнения, DHT |
| 6 | GPIO, ШИМ, АЦП, UART RX, DHT |
| 7 | GPIO, ШИМ, АЦП, DHT |
| 8 | GPIO, DHT |
| 9 | GPIO, АЦП, измерение частоты и коэффициента заполнения, DHT |
| 10 | GPIO, DHT |
В протоколе вывод 10 обозначается цифрой 0: используется последовательность
1,2,3,4,5,6,7,8,9,0.
Выводы 4 и 5 используют общий ресурс измерения частоты и коэффициента заполнения и конфликтуют друг с другом. Для двух одновременных измерений используйте вывод 9 в паре с одним из них.
Основные команды
Примеры ответов ниже соответствуют прошивке 1.2.0. В версиях 1.1.x и старше
команда ~E без параметра переключала echo, ~J могла возвращать переданные
значения, а ~B — отключать USB без ответа. Сначала запросите версию командой
~I.
| Команда | Что делает | Пример ответа |
|---|---|---|
~D[10 режимов] | задать режимы выводов 1…9, 10 | ~DIIOOIIIIII |
~J[10 значений] | задать значения сразу для всех выводов | ~J<10 статусов> |
~Sn:v | установить значение вывода | ~SOK |
~Gn | прочитать один вывод | ~G1, ~G1234, ~G1000,50 |
~M | прочитать десять текущих режимов | ~MIIOOIIIIII |
~V | прочитать десять значений одной строкой | ~V0011000000 |
~Pn:частота | задать частоту ШИМ в диапазоне 1…20000 Гц | ~POK |
~Ubaud,data,parity,stop | настроить UART | ~UOK |
~L0 / ~L1 | выключить / включить встроенный красный светодиод | ~LOK |
~W[индексы цветов] | передать цвета на WS2812 | ~WOK |
~F | сохранить режимы, значения и сценарий | ~FOK |
~X[сценарий] | загрузить и выполнить сценарий | ~XOK или ~XOK:значение |
~Q[часть] | очистить буфер или добавить часть сценария | ~QOK:длина |
~R | перезагрузить устройство | ~ROK |
~I | получить версию и серийный номер | ~IGPIO-Extender-2-... |
~E0 / ~E1 | выключить / включить повтор команд в CDC | ~EOK |
~B | перейти в загрузчик | ~BOK, затем USB-порт отключается |
Ответ ~D содержит фактически применённые режимы. Если вывод не поддерживает
запрошенный режим, вместо него устройство возвращает I. Ответ ~J содержит
по одному статусу на вывод: ! означает успешную установку, E — что значение
для текущего режима установить нельзя.
~V всегда возвращает десять символов в порядке 1,2,3,4,5,6,7,8,9,0.
Для GPIO это 0 или 1; значение АЦП сжимается из диапазона 0...4095 в
цифру 0...9. Для точного значения АЦП используйте ~Gn.
Примеры команд и ответов
В примерах не показан повтор команды, который устройство может присылать при
включённом CDC echo. Перед автоматическим обменом отправьте ~E0 и дождитесь
~EOK.
Цифровые входы и выходы
Настроим все десять выводов как выходы, зададим их состояния, затем прочитаем режимы, один вывод и все значения:
> ~DOOOOOOOOOO
< ~DOOOOOOOOOO
> ~J0011000000
< ~J!!!!!!!!!!
> ~M
< ~MOOOOOOOOOO
> ~G3
< ~G1
> ~V
< ~V0011000000
Отдельный выход устанавливается командой ~S. Для выхода 2:
> ~S2:1
< ~SOK
> ~S2:0
< ~SOK
ШИМ
Все каналы ШИМ используют один таймер, поэтому частота у них общая, а
коэффициент заполнения задаётся для каждого вывода отдельно. Настроим вывод 3
в режим P, зададим 1 кГц и 50 %:
> ~DIIPIIIIIII
< ~DIIPIIIIIII
> ~P3:1000
< ~POK
> ~S3:50
< ~SOK
Частота должна находиться в диапазоне 1…20000 Гц, коэффициент заполнения —
0…100 %. Команда ~G не читает состояние вывода в режиме ШИМ и отвечает
~GError:PWM.
Аналоговый вход
Настроим вывод 3 как АЦП и прочитаем значение. Ответ зависит от напряжения на
входе и находится в диапазоне 0...4095:
> ~DIIAIIIIIII
< ~DIIAIIIIIII
> ~G3
< ~G1234
Измерение частоты и коэффициента заполнения
Настроим вывод 4 в режим C. В ответе ~G первое число — частота в герцах,
второе — коэффициент заполнения в процентах:
> ~DIIICIIIIII
< ~DIIICIIIIII
> ~G4
< ~G1000,50
Выводы 4 и 5 нельзя одновременно использовать в этом режиме. Для двух измерений используйте вывод 9 вместе с выводом 4 или 5.
DHT22 и AM2302
DATA датчика можно подключить к любому свободному выводу. Между DATA и VCC нужен подтягивающий резистор 4,7–10 кОм, если его нет на модуле. Для вывода 5:
> ~DIIIIDIIIII
< ~DIIIIDIIIII
> ~G5
< ~G24.5C,60.5%
Первое число — температура, второе — относительная влажность. Между чтениями DHT22 выдерживайте не менее двух секунд.
WS2812
Лента подключается к выводу 4, настроенному в режим W. Каждая пара
шестнадцатеричных символов — индекс цвета одного светодиода в палитре из
256 цветов. За одну команду можно передать от 1 до 30 светодиодов:
> ~DIIIWIIIIII
< ~DIIIWIIIIII
> ~W090A0C
< ~WOK
UART
Для UART используются вывод 2 (TX) и вывод 6 (RX). Настроим режимы и параметры
115200, 8 бит, без контроля чётности, 1 стоп-бит:
> ~DITIIIRIIII
< ~DITIIIRIIII
> ~U115200,8,N,1
< ~UOK
> ~S2:Hello
< ~SOK
> ~G6
< ~GHello
При пустом приёмном буфере ~G6 отвечает ~GEMPTY. Буфер UART вмещает
256 байт, одна команда чтения возвращает до 40 байт.
Ошибки команд
Ошибка начинается с префикса исходной команды и содержит причину. Например:
> ~DIIAIIIIIII
< ~DIIAIIIIIII
> ~P3:1000
< ~PError:Mode
> ~DIIPIIIIIII
< ~DIIPIIIIIII
> ~P3:50000
< ~PError:Freq
> ~W090A0C
< ~WError:Pin
В первом примере вывод 3 не был настроен как ШИМ, во втором частота вне допустимого диапазона, в третьем вывод 4 не был настроен как WS2812.
Встроенные сценарии
Это линейный командный интерпретатор, а не uLua: циклов, условий и переменных в нём нет. Каждый запуск начинается с вывода 1.
~X5@o+
~X2@p:7%50;
~X3@a#
Первый сценарий настраивает вывод 5 как выход и устанавливает высокий уровень.
Второй включает на выводе 2 ШИМ 1 кГц с коэффициентом заполнения 50 %. Третий возвращает
значение АЦП в ответе вида ~XOK:1234.
| Запись | Действие |
|---|---|
1…9, 0 | выбрать вывод 1…10 |
> / < | следующий / предыдущий вывод |
@i, @o, @p, @a | цифровой вход, выход, ШИМ или аналоговый вход |
+, - | высокий или низкий уровень выхода |
., # | прочитать цифровое или аналоговое значение |
:0…:F | выбрать частоту ШИМ от 1 Гц до 20 кГц |
%NN; | коэффициент заполнения ШИМ от 0 до 100 % |
dNNN | задержка до 10000 мс |
Однозначная форма %0…%9 сохранена для совместимости. Для нового кода
используйте точную форму %50;: старая запись %5 означает примерно 55,6 %.
Успешное выполнение отвечает ~XOK. Ошибка содержит позицию, считаемую с
нуля, и причину, например ~XError:12:BadDuty.
Максимальная длина сценария — 255 байт. Длинный сценарий можно передать
частями: пустая ~Q очищает буфер, ~Q<часть> добавляет данные, пустая ~X
запускает содержимое буфера.
~Q
~Q2@p:7
~Q%50;d500
~Q%0;
~X
В прошивке 1.2.0 сохранённый сценарий защищён заголовком с версией, длиной и CRC16. Записи старого формата после обновления нужно загрузить и сохранить заново. Автозапуск также зависит от аппаратного входа разрешения PA5.
Конфигураторы
Веб-конфигуратор
Чтобы настроить устройство без установки программы, откройте extender2.unitx.pro в браузере с поддержкой Web Serial. Подключение, режимы выводов, WS2812, DHT, терминал и монитор описаны в отдельной пошаговой инструкции.
Настольный конфигуратор
Конфигуратор включает терминал, графики, WS2812, DHT22 и загрузку сценариев. Скачайте extender2_configurator.py и requirements.txt, затем выполните:
pip install -r requirements.txt
python extender2_configurator.py
Во вкладке терминала можно отправлять команды протокола вручную и сразу проверять ответы устройства.
Окно мониторинга строит графики входных значений и помогает проверить АЦП, частоту и коэффициент заполнения сигнала до интеграции с основной программой.
Для DHT22 задайте режим D, подключите DATA к выбранному выводу и добавьте
подтяжку 4,7–10 кОм между VCC и DATA, если её нет на модуле. Команда ~G5
возвращает строку вида ~G24.5C,60.5%.
Для WS2812 используйте режим W. За одну команду вывода 4 можно передать цвета
для 30 светодиодов.
Во вкладке сценариев можно собрать последовательность команд, загрузить её в устройство и проверить результат до сохранения во флеш-память.






Обновление прошивки
- Подключитесь к устройству и отправьте команду
~B. Последовательный порт исчезнет, а зелёный светодиод начнёт мигать: устройство перешло в загрузчик. - Скачайте прошивку и OD HID Flasher из раздела файлов GPIO Extender. Запустите программу и выберите файл прошивки. В Linux может потребоваться правило udev, разрешающее текущему пользователю доступ к HID-устройству.
- Нажмите кнопку прошивки и дождитесь завершения. После переподключения
отправьте
~Iчерез CDC или HID и проверьте номер версии.


