Подключение Ардуино к роутеру TL-MR3020
Удалённое управление Arduino через Web-интерфейс.
Предполагается, что на роутере установлена OpenWrt и система перенесена на флешку. Как это сделать я подробно описал здесь.
Если OpenWrt установлена, тогда переходим к основной задаче.
Существуют два способа подключения, первый — к UART роутера, второй — через USB.
Оба варианта работают одинаково, однако первый требует разбора роутера и подпаивания контактов:
Второй вариант проще, но придётся ипользовать usb-хаб.
Я опишу оба способа подключения и покажу как сделать простой веб-интерфейс для управления.
Кто будет подключать по usb, может сразу перейти сюда.
Вариант с UART
Вскрываем роутер. Крышка у него приклеена, поэтому берём что-то типа ножа и ковыряем по всему периметру. Пластик достаточно прочный, так что можно не боятся повредить.
Достаём плату и припаиваем три контакта RX, TX и GND, четвёртый контакт — это плюс (3,3V), он нам не нужен.
Теперь зальём в ардуину простенький скетч для проверки.
Будем посылать в ардуину символы a и b, в ответ на которые будет зажигаться и гаснуть D13.
Подключаем ардуину как на рисунке:
Ардуина TX ⇨ RX Роутера (синий)
Роутер TX ⇨ RX Ардуина (зелёный)
CND ⇨ CND
Не смотря на то, что чип роутера питается от 3,3V, а ардуина от 5V, никаких проблем не возникает, посему нет необходимости согласовывать уровни.
Подключаем сетевой кабель (или не подключаем если Вы соединяетесь по WIFI) и подаём питание на роутер и ардуину.
Заходим на роутер по ssh (на всякий случай)
Ради интереса смотрим существующие устройства:
В списке будет присутствовать ttyATH0, это и есть UART.
Установим утилиту для настройки порта:
Настроим порт командой…
Должно работать, если нет, то возвращаемся и проверяем что не так.
Если у Вас не установлен редактор nano, то исправим ситуацию.
Добавим в автозагрузку настройку порта:
В конец файла (перед exit 0) добавим строчку:
Перегружаем роутер и проверяем…
Поскольку при загрузке (да и в процессе работы) в консоль прилетают различные символы, нам надо их отфильтровывать, а также сделать обратную связь, чтоб в ответ на команду ардуина сообщала о выполнении.
Залейте в ардуину этот скетч: Не забывайте отсоединять провода RX,TX во время прошивки.
Перед управляющим символом (a,b) будем отправлять четыре символа служащие дескриптором Y+=Z, благодоря этому всё что не нужно отфильтруется и не будет случайных срабатываний.
Открываем параллельно ещё одну ssh-сессию и вводим там команду:
Здесь будет ответ ардуины.
И последнее, надо отвязать UART от отладочной консоли. Для этого надо в файле /etc/inittab закомментировать последнюю строчку:
Если что-то не работает, то возвращаемся к началу и проверяем что сделали не так.
С первым вариантом покончено, если подключение по usb не интересно, то переходите ниже.
Вариант с USB
Зальём в ардуину проверочный скетч:
Будем посылать в ардуину символы a и b в ответ на которые будет зажигаться и гаснуть D13.
Подключаем к роутеру хаб и втыкаем в него флешку и ардуину. Включаем.
Желательно чтобы хаб был с отдельным питанием. Некоторые хабы работают некорректно.
Заходим на роутер по ssh (на всякий случай)
Установим драйвера для всех существующих ардуин и утилиту для настройки порта stty:
Можно не перегружать, по идее устройство должно появиться сразу.
Проверим… если нет, тогда перегрузите.
У Вас может быть /dev/ttyACM0, тогда его и используйте в дальнейших командах и настройках.
Настроим порт командой…
Если при посылке пакета ардуина перегружается (диоды моргают, но D13 не горит), тогда нужно поставить электролитический косденсатор 
Не забудьте отключать его когда заливаете скетч.
Далее сделаем защиту от случайных срабатываний и обратную связь, чтоб в ответ на команду ардуина сообщала о выполнении.
Если редактор nano отсутствует, то установим.
Добавим в автозагрузку настройку порта:
В конец файла (перед exit 0) добавим строчку:
Теперь выключаем роутер и прошиваем в ардуину этот скетч:
Перед управляющим символом (a,b) будем отправлять четыре символа служащие дескриптором Y+=Z, таким образом отфильтруется случайный мусор и не будет случайных срабатываний.
После обработки команды, ардуина будет отправлять ответ.
Возвращаем ардуину в хаб и включаем роутер.
Открываем две параллельные ssh-сессии, в первой водим команду:
Здесь будет ответ ардуины.
Всё должно работать, если нет, то возвращаемся и внимательно проверяем.
Если всё получилось, то можно переходить к следующей части.
Интерфейс
Сделаем простой веб-интерфейс для управления двумя лампочками.
Выглядеть будет вот так… Можно понажимать.
Скачайте архив и распакуйте его в рабочую папку сервера, чтоб было так сервер/primer/.
Здесь подробная инструкция по установке сервера Lighttpd на OpenWrt.
Проверьте, чтоб в файле /etc/php.ini всё было так, как написано здесь!
Если Вы пользуете Win, то отключите всякие файрволы/антивирусы!
Установим и настроим небольшой прокси-сервер ser2net, он создаёт соединение между сокетом и устройством (/dev/ttyUSB0).
Как показала практика, через ser2net, php-файл работает лучше, нежели обращаясь к устройству напрямую.
Редактируем файл конфигурации:
Закомментируйте всё строчки в конце и сохраните.
Добавим ser2net в автозагрузку:
Добавьте в конец файла вот эту строку:
Должно получится так:
В примере используется устройство /dev/ttyUSB0, у Вас может быть другое! (ttyATH0 — консоль, ttyACM0 — мега)
Внимание! Строки инициализации должны быть записаны одной строкой (без переноса).
Прошейте в ардуину этот скетч:
Добавлены функции для второй лампочки и обновления. (к D12 подключите светодиод через резистор 200-1000 Ом)
Включаем/перегружаем роутер и в браузере заходим по аресу ваш_роутер/primer/
Если надпись stD серая, это значит что связь с ардуиной установлена, если красная, то связи нет.
Работа заключается в следующем:
index.html раз в три секунды (интервал можно изменить) запрашивает данные у ардуины (отправляя ей символ о) с помощью функции ajax (ajax позволяет не перегружать страницу).
Запрос передаётся php-файлу (box2.php) находящемуся на сервере, который в свою очередь обращается к ардуине через сокет ser2net.
Ардуина получает команду, обрабатывает её и отправляет ответ, который по той же цепочке возвращается html-страничке (index.html).
Html-страничка разбирает ответ и выводит значения на экран.
Если открыть ещё одну страничку (или зайти с другого устройства) и включить лампочку, то на первой страничке (в течении 3 сек.) тоже включится лампочка.
Для этого и нужно обновление.
Нажатие на лампочку работает так же как и «обновление», в ардуину отсылается символ включения или отключения (в зависимости от состояния лампочки), ардуина выполняет действие и посылает в ответ строку с флагами состояния (единица или ноль). Ответ разбирается в html-странице и в зависимости от флагов выводит картинку включённой или отключённой лампочки.
Для лучшего понимания откройте файл index.html из архива, и посмотрите комментарии.
Внимание! Если Вы редактируете файл на роутере, то удалите все комментарии, в противном случае могут возникнуть проблемы с русской кодировкой.
Если редактируете файлы на виндовс-машине, то пользуйтесь редактором Notepad++.
Если что-то не так, то возвращаемся и проверяем всё с удвоенным вниманием. Проверяем права на файлы, правильность путей и устройств.
В следующей части — «умный дом» на основе ардуино.
Вот тут можно скачать библиотеку для разгона Arduino.








