USB-реле ICSE014A (PL2303) з Linux: протокол, скрипт і правило udev
Восьмиканальний модуль реле 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) |
| 7 | 3 |
| 6 | 2 |
| 5 | 1 |
На нашій платі реле 1 керується старшим бітом: записуємо стан реле 1…8 зліва направо як двійкове число.
| Що хочемо | Біти (реле 1→8) | Байт |
|---|---|---|
| нічого не ввімкнено | 11111111 | FF |
| лише реле 1 | 01111111 | 7F |
| реле 1, 2, 4 і 8 | 00101110 | 2E |
| усі | 00000000 | 00 |
Ми перевірили це на модулі: 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 | Перша версія на старому сайті. |