Майстерня: ремонт і досліди

USB-реле ICSE014A (PL2303) з Linux: протокол, скрипт і правило udev

Опубліковано 29.09.2017 · Оновлено 07.11.2026

Восьмиканальний модуль реле ICSE014A підключається до компʼютера через USB (усередині — перехідник PL2303) і керується одним байтом через послідовний порт. Як ним керувати з Linux без жодних програм: команди, як скласти байт для потрібних реле, готовий скрипт, який вмикає одне реле й не чіпає інших, і правило udev для автоматичного запуску.

Що за модуль

ICSE014A — це 8 реле, мікро-USB і роз'єм додаткового живлення 5 В. Його мають лише 8-канальні моделі: від USB вісім реле можуть не дістати струму. Є молодші моделі цієї серії: ICSE012A на 4 реле й ICSE013A на 2. Протокол у всіх однаковий.

ПараметрICSE014A
реле8
живлення5 В, до 700 мА
інтерфейсUSB (PL2303) або TTL UART
швидкість порту9600 біт/с

Виробник дає програму для Windows (Relay Board Manager). Нам потрібен був Linux, і там вона не потрібна: досить надіслати кілька байтів у порт.

Підключення в Linux

Драйвер PL2303 є в ядрі. Після підключення в журналі (dmesg) видно:

usb 4-2: New USB device found, idVendor=067b, idProduct=2303
usb 4-2: Product: USB-Serial Controller
usb 4-2: Manufacturer: Prolific Technology Inc.
pl2303 4-2:1.0: pl2303 converter detected
usb 4-2: pl2303 converter now attached to ttyUSB0

Тобто модуль — це порт /dev/ttyUSB0.

Перехідник можна «відпустити» й підключити знову без висмикування дроту. Це зручно, коли порт завис. Реле при цьому лишаються в тому стані, в якому були: живлення з них не знімається.

echo -n "4-2:1.0" > /sys/bus/usb/drivers/pl2303/unbind
echo -n "4-2:1.0" > /sys/bus/usb/drivers/pl2303/bind

4-2:1.0 — адреса пристрою з журналу вище. У вас вона буде своя.

Протокол: три кроки

stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb raw -echo
printf '\x50' > /dev/ttyUSB0     # «привітання»: ICSE014A відповідає байтом AC
printf '\x51' > /dev/ttyUSB0     # тепер модуль сприймає байти як команди
printf '\x00' > /dev/ttyUSB0     # усі 8 реле під напругою
printf '\xFF' > /dev/ttyUSB0     # усі без напруги (стан після ввімкнення)

Головне, що треба знати:

  • Байт керує всіма вісьмома реле одразу. Один біт на реле, і 0 означає «реле під напругою».
  • Окремої команди «увімкни реле 3» немає. Щоб змінити одне реле, треба надіслати весь байт, а для цього пам'ятати стан інших.
  • Модуль не повідомляє, в якому стані реле. Стан доводиться зберігати самим.

Як скласти байт

Якщо тримати плату роз'ємом USB догори, реле розташовані так:

Ліва колонкаПрава колонка
8 (біля USB)4 (біля USB)
73
62
51

На нашій платі реле 1 керується старшим бітом: записуємо стан реле 1…8 зліва направо як двійкове число.

Що хочемоБіти (реле 1→8)Байт
нічого не ввімкнено11111111FF
лише реле 1011111117F
реле 1, 2, 4 і 8001011102E
усі0000000000

Ми перевірили це на модулі: 7F вмикає лише реле 1, а 2E вмикає реле 1, 2, 4 і 8.

⚠ Виробник пише «біт 0 — K1». Отже, або позначки K1…K8 на платі йдуть навпаки до нашої нумерації за розташуванням, або плати бувають різні. Перевірте на своїй байтом 7F, перш ніж підключати навантаження.

Готовий скрипт

Скрипт пам'ятає стан у файлі й змінює лише потрібний біт:

relay8 init        # режим команд + відновити збережений стан
relay8 on 3        # подати напругу на реле 3, інші не змінюються
relay8 off 3
relay8 all-off
relay8 status

relay8.sh.txt · 1909 B: збережіть як /usr/local/bin/relay8 і зробіть виконуваним (chmod +x). Якщо на вашій платі біти йдуть навпаки, у скрипті є один рядок, який треба поміняти, з поясненням поруч.

Автоматичний запуск: правило udev

Після кожного підключення модуль треба знову перевести в режим команд (50, 51). Правило udev робить це саме і дає порту постійне ім'я /dev/relay8, щоб не гадати, ttyUSB0 це чи ttyUSB1:

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SYMLINK+="relay8", MODE="0660", GROUP="dialout", RUN+="/usr/local/bin/relay8 init"

99-relay8.rules.txt · 795 B: покладіть у /etc/udev/rules.d/99-relay8.rules, потім виконайте udevadm control --reload.

⚠ 067b:2303 — це будь-який перехідник на PL2303. Якщо до комп'ютера підключено ще такий, додайте до правила серійний номер або номер порту USB (udevadm info -a -n /dev/ttyUSB0).

⚠ У старих інструкціях трапляється SYSFS{idVendor}. Сучасний udev такого ключа не знає: правило мовчки не спрацює. Потрібно ATTRS{…}.

Журнал змін статті

ДатаЩо змінилось
07.11.2026Статтю переписано: протокол коротко, таблиця байтів, власний скрипт зі збереженням стану, сучасне правило udev.
29.09.2017Перша версія на старому сайті.