Підключення Arduino до OpenWrt
Arduino — це мікроконтролер Atmel, зазвичай змонтований на платі, яка відкриває його виводи для використання в електронних проєктах, та програмується мовою “Arduino” (це C++ з певними обмеженнями). Існує велика екосистема бібліотек, проєктів та апаратних рішень (розширювальні плати та клони), що підтримують Arduino.
Для зручності програмування плати Arduino мають USB-інтерфейс, що дозволяє підключати їх до ПК через USB. Це означає, що плата або має адаптер “serial-to-USB”, або сам мікроконтролер імітує з'єднання “serial-over-USB” (що цілком можливо для середнього та вищого рівня Arduino).
Пристрій OpenWrt з USB-портом також може бути підключений до Arduino. Потрібно лише встановити модулі ядра для підтримки usb-to-serial.
Встановіть такі пакети (через opkg у терміналі або через сторінку Software в LuCI):
>opkg install kmod-usb-serial kmod-usb-serial-ark3116 kmod-usb-serial-belkin kmod-usb-serial-ch341 kmod-usb-serial-cp210x kmod-usb-serial-ftdi kmod-usb-serial-mct kmod-usb-serial-mos7720 kmod-usb-serial-oti6858 kmod-usb-serial-pl2303 kmod-usb-acm kmod-usb-serial-simple kmod-usb-serial-ti-usb
На практиці, ймовірно, вам знадобиться лише один з цих модулів — залежно від чіпа USB-to-Serial, що використовується у вашій платі Arduino (або її клоні). Ці модулі займають небагато місця, тому, якщо ви не впевнені або вам лінь — просто встановіть усі.
Після встановлення підключіть Arduino до USB-порту та виконайте команду dmesg, щоб перевірити, чи пристрій розпізнано, і який серійний пристрій йому присвоєно (зазвичай це /dev/ttyUSB0, якщо підключено лише один Arduino).
Пряме керування через серійний термінал
Якщо ви хочете відкрити серійний “термінал” до Arduino безпосередньо з терміналу OpenWrt, вам потрібно встановити емулятор терміналу на пристрій OpenWrt.
Доступні емулятори терміналу для OpenWrt: screen, picocom, minicom.
Наприклад, встановимо picocom:
opkg install picocom
А потім запустимо термінал так:
picocom -b 115200 /dev/ttyUSB0
Усе, що ви набиратимете в терміналі, буде надсилатися безпосередньо на Arduino, а його відповіді з’являться на екрані. Звісно, це передбачає, що Arduino виконує програму, яка читає дані з послідовного порту і якось на них реагує.
Для виходу з picocom і повернення до командного рядка OpenWrt натисніть Ctrl + a.
Методи керування адаптовані під скрипти
Якщо вам потрібно лише надсилати команди на Arduino (наприклад, зі скрипту):
Шістнадцяткові дані:
echo -e "\x7E\x03\xD0\xAF" > /dev/ttyUSB0
Текст:
*echo -e "hello world" > /dev/ttyUSB0
Щоб прочитати відповіді від Arduino, використовуйте:
cat /dev/ttyUSB0
Інші можливості
Вбудований UART роутера <> GPIO (не через usb-to-serial)
Для обмеженого використання, особливо на роутерах без USB, можлива взаємодія через UART-порт роутера. Для цього можуть знадобитися власні заголовки повідомлень і логіка підтвердження. Будьте готові до написання великої кількості коду для мікроконтролера, якщо оберете цей шлях... і будьте реалістами щодо його обмежень.
USB-UART-TTL-пристрій / подібні <> GPIO (не через usb-to-serial)
Схоже на попередній варіант, але ізольовано від консолі, що робить передавання повідомлень набагато чистішим.
telnet <> ESP8266 <> GPIO (не через usb-to-serial)
Використання мережевого серійного “мосту” для доступу до серійних виводів Arduino.