Меню Рубрики

Arduino управление через роутер

Подключение Ардуино к роутеру TL-MR3020

Удалённое управление Arduino через Web-интерфейс.

Предполагается, что на роутере установлена OpenWrt и система перенесена на флешку. Как это сделать я подробно описал здесь.

Если OpenWrt установлена, тогда переходим к основной задаче.

Существуют два способа подключения, первый — к UART роутера, второй — через USB.

Оба варианта работают одинаково, однако первый требует разбора роутера и подпаивания контактов:

Второй вариант проще, но придётся ипользовать usb-хаб.

Я опишу оба способа подключения и покажу как сделать простой веб-интерфейс для управления.

Кто будет подключать по usb, может сразу перейти сюда.

Вариант с UART

Вскрываем роутер. Крышка у него приклеена, поэтому берём что-то типа ножа и ковыряем по всему периметру. Пластик достаточно прочный, так что можно не боятся повредить.

Достаём плату и припаиваем три контакта RX, TX и GND, четвёртый контакт — это плюс (3,3V), он нам не нужен.

Теперь зальём в ардуину простенький скетч для проверки.

Будем посылать в ардуину символы a и b, в ответ на которые будет зажигаться и гаснуть D13.

Подключаем ардуину как на рисунке:

Ардуина TXRX Роутера (синий)
Роутер TXRX Ардуина (зелёный)
CNDCND

Не смотря на то, что чип роутера питается от 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 не горит), тогда нужно поставить электролитический косденсатор 5-10мкФ между Reset и GND.
Не забудьте отключать его когда заливаете скетч.

Далее сделаем защиту от случайных срабатываний и обратную связь, чтоб в ответ на команду ардуина сообщала о выполнении.

Если редактор 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.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Ярлык на рабочий стол linux
  • Яндекс строка для linux
  • Яндекс программы для linux
  • Яндекс навигатор для linux
  • Яндекс диск монтирование linux