Перейти к содержанию
GPIO Extender-2: инструкция, команды и сценарии

GPIO Extender-2: инструкция, команды и сценарии

Настройка десяти выводов GPIO Extender-2, команды CDC/HID, ШИМ, АЦП, UART, DHT22, WS2812 и встроенные сценарии.

GPIO Extender-2 предоставляет десять универсальных выводов и управляется по USB CDC или HID. Основная логика может оставаться в программе на ПК, а короткие последовательности GPIO, ШИМ и АЦП выполняться внутри контроллера.

Первый запуск

  1. Подключите устройство к USB. Оно определяется как виртуальный COM-порт (CDC) и как HID-устройство.

  2. Для работы через CDC откройте порт в терминале: например, COM3 в Windows, /dev/tty.usbmodem... в macOS или /dev/ttyACM0 в Linux. Подойдут PuTTY, Tera Term, Arduino Serial Monitor, screen, Minicom или pyserial-miniterm.

  3. Каждая команда начинается с ~ и завершается символами \r\n. Отправьте ~I, чтобы проверить связь:

    > ~I
    < ~IGPIO-Extender-2-1.2.0;SN:xxxx-xxxx-xxxx
    

    Здесь и далее > обозначает отправленную команду, а < — ответ устройства. Номер версии и серийный номер в ответе ~I зависят от экземпляра.

  4. В CDC по умолчанию может быть включён повтор введённых символов. Для обмена с программой его удобнее явно выключить командой ~E0; ~E1 включает повтор обратно:

    > ~E0
    < ~EOK
    
  5. Перед подключением нагрузки настройте и проверьте каждый вывод отдельно.

Режимы выводов

РежимСимволНазначение
Вход GPIOIцифровой вход
Выход GPIOOцифровой выход
ШИМ (PWM)Pширотно-импульсная модуляция
Измерение сигнала (CC)Cчастота и коэффициент заполнения
Аналоговый вход (АЦП)Aзначение 0–4095
UART TXTпередача UART
UART RXRприём UART
DHTDDHT22/AM2302
WS2812Wадресная RGB-лента
ВыводПоддерживаемые функции
1GPIO, АЦП, DHT
2GPIO, ШИМ, АЦП, UART TX, DHT
3GPIO, ШИМ, АЦП, DHT
4GPIO, АЦП, WS2812B, измерение частоты и коэффициента заполнения, DHT
5GPIO, АЦП, измерение частоты и коэффициента заполнения, DHT
6GPIO, ШИМ, АЦП, UART RX, DHT
7GPIO, ШИМ, АЦП, DHT
8GPIO, DHT
9GPIO, АЦП, измерение частоты и коэффициента заполнения, DHT
10GPIO, 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.

ЗаписьДействие
19, 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 светодиодов.

Во вкладке сценариев можно собрать последовательность команд, загрузить её в устройство и проверить результат до сохранения во флеш-память.

Обновление прошивки

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