Main

Узел автоматики на базе роутера TPLink

Условие задачи, такое же как было описано здесь -- создать на базе WiFi-роутера узел для домашней автоматики. Там же описаны варианты использования такой связки.

UPDATE: Универсальное решение на базе OpenWRT

В данном случае мы будем применять бюджетный китайский роутер TP-Link TL-WR703N.

Плюсы использования роутера:

  • Невысокая цена (сопоставимая с ценой Ethernet-shield-а для Arduino)
  • Небольшие габариты
  • Возможность работы как через Ethernet так и через WiFi (нет необходимости тянуть провода)
  • Возможность подключения различной периферии к USB-порту
  • Большое количество открытых проектов и инструкций в сети Интернет

Подготовка роутера

За основу была взята несколько модифицированная прошивка OpenWRT.

Файл прошивки (взято отсюда)

Модификация заключается в том, что в данную версию прошивки уже встроены нужные нам библиотеки и модули, так что не будет необходимости из дополнительно искать и устанавливать.

Особенности прошивки:

  • Luci – for easy configuration and setting
  • USB Video support
    • mjpg-streamer for webcam streaming
  • USB Serial support
    • belkin, ch431, cp210x, ftdi, option, pl2303, ti-usb
    • ser2net for easy serial to Ethernet conversion
    • stty for configuring serial
  • Lua for simple scripting
    • lualibusb
    • luasocket
  • USB ACM Support for 3G modems and other devices (New in 2012-10-04 : usb_modeswitch)
  • USB Storage and network filesystems
    • ext4, nfs, ntfs, vfat
    • block-mount for mounting extroot pivot overlays (i.e. adding USB storage for installing programs)

Таким образом, в состав прошивки входит всё, что нам нужно и даже больше :)

(здесь будет инструкция по загрузке прошивки и настройки роутера в режиме клиента wifi-сети)

Подготовка Arduino

На самом деле никакой особенной подготовки для контроллера не нужно. Можно использовать готовый код, который представлен на этой странице. Фактически, задача контроллера сводится к том, чтобы при необходимости передать данные, выводить строчку вида: GET http://<полный_путь_с_параметрами> Корректность работы контроллера желательно проверять вообще без роутера, просто подключив его по USB к компьютеру и загрузив программу мониторинга порта -- будь-то терминал или специализированная программа, доступная по вышеуказанной ссылке. Роутер, в свою очередь, будет нами использоваться для передачи запроса на сервер.

Передача команд от Arduino на сторонний веб-сервер

Здесь описан принцип, его же и будем использовать (чуть позже будет дополнено)

Итого

По итогу имеем компактный узел, на базе которого можно построить много чего интересного, добавляя датчики и исполнительные механизмы к Arduino, а так же, при необходимости, расширяя возможности роутера за счёт подключения USB-хаба и дополнительного оборудования к нему.

Новая прошивка с пофиксеным багом

Воспользовавщись закрытой информацией из даташитов о недокументированных официально регистрах FDTI IP-блока, которые скрывались под NDA, внутри компании Atheros, производителя AR9331 , после двух лет мучительных попыток, активисты-хакеры TP-Link TL-WR703N, добились своего и оккупировали эти регистры USB Phase Locked Loop(USB PLL). Теперь Arduino может напрямую работать без зависаний через USB1.1 FTDI последовательный кабель.

Это хардварный баг. Побочные излучения RF влияют на USB PLL. Осталось провести испытания, как этот баг можно использовать в исключительно благородных целях.

Выдержки из открытых даташитов и соответствующие строчки кода. В документации байты помечены, как зарезервированные для дальнейшего использования. Но по факту они уже используются.

6.5.1 CPU Phase Lock Loop Configuration (CPU_PLL_CONFIG)

 Address: 0x18050000
 Access: Read/Write
 Reset: See field description
  • usb_ctrl_r1 = (*usb_ctrl_r1 & 0xffefffff);
BitBit NameTypeResetDescription
22RESRW0x0Reserved. Must be written with zero. Contains zeros when read.
21RANGERW0x0Determines the VCO frequency range of the CPU PLL

6.5.2 CPU Phase Lock Loop Configuration Register 2 (CPU_PLL_CONFIG2)

 Address: 0x18050004
 Access: Read / Write
 Reset: See field description
  • usb_ctrl_r2 = (*usb_ctrl_r2 & 0xfc1fffff) | (1 << 21) | (3 << 22);
BitBit NameTypeResetDescription
31:12RESRO0x0Reserved. Must be written with zero. Contains zeros when read.
11:0SETTLE_TIMERW0x550CPU PLL selling time after power up. The default number is based on the 40 MHz reference clock cycle. 25 ns * 0x550 = 34000 (ns)

Arduino board can connect to a USB1.1 FTDI serial cable directly. WAR_USB_DISABLE_PLL_LOCK_DETECT()

Бинарный патчь с инструкциями по установке (проверено, работает без сбоев).

Готовая прошивка с патчем, размещена локально

Кросс компиляция прошивки OpenWRT и пакетов на Ubuntu. http://cyber-place.ru/showthread.php?t=512

Загрузка файлов на роутер TP-Link TL-WR703N.

http://wiki.openwrt.org/doc/howto/generic.sysupgrade

Загрузить файл прошивки или пакеты на роутер:

  scp openwrt-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

Обновить прошивку:

  sysupgrade -v /tmp/openwrt-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin

https://forum.openwrt.org/viewtopic.php?id=32664

Установить пакеты:

Вначале надо зайти на роутер а затем устанавливать пакеты:

  ssh root@192.168.1.1
  root@OpenWrt:/# cd /tmp
  root@OpenWrt:/tmp# opkg install mjpg-streamer_r68-2_mipsel.ipk

Скопировать данные с роутера в текущую папку .

  scp 192.168.1.1:/etc/lighttpd/server.pem .
 
 

Обсуждение

 

sergejey: Обсуждение страницы Узел автоматики на базе роутера TPLink

sergejey: Пока только создал наборосок статьи -- чуть позже будут подробности по настройке.

sergejey: Столкнулся с одной проблемой. Поставил следующий скрипт для мониторинга того, что происходит на Arduino, подключенной к роутеру: /etc/monitor.sh #!/bin/sh ARDUINO_PORT=/dev/ttyACM0 BASE_URL=http://192.168.0.17 stty -F $ARDUINO_PORT raw speed 9600 while read LINE; do date echo "$LINE" MATCH=${LINE:0:5} #echo "$MATCH" if [ "$MATCH" = "GET /" ]; then echo "MATCHED: $MATCH" URL=${LINE/GET /} URL=${URL?????????} URL="$BASE_URL$URL" echo "URL: $URL" wget -q $URL>/dev/nil fi done < $ARDUINO_PORT Всё работает замечательно, но не долго. Может полчаса, может час... А потом всё, данные перестают поступать. Захожу на роутер, скрипт запущен. Убиваю процесс, запускаю заново --тишина, ничего с порта (с ардуины) не поступает. Убиваю скрипт, пробую запустить команду cat</dev/ttyACM0 -- тоже тишина. Набираю reboot -- роутер перезагружается и всё начинает снова работать какое-то время. Может кто подскажет, в чём может быть дело? На DLink Dir320 всё тоже самое (ну почти -- прошивка другая) работает отлично можно сказать неограниченное время, а тут фиг... Подозреваю, что на роутере какая-то проблема с постоянным чтением с порта и можно было бы его инициализировать заново время от времени, но как это сделать ума не приложу. Не ставить же reboot на каждые полчаса...

sergejey: Какая-то засада короче с этим TP Link-ом... через секунд 30-50 обмена с ардуиной порт зависает до reboot-а (хотя сама ардуина нормально продолжает работать -- проверил морганием светодиода в программе). Нашёл обсуждение подобной проблемы: https://forum.openwrt.org/viewtopic.php?id=39956 Люди решают разными способами -- у кого-то начинает работать всё хорошо, если подключить контроллер через USB-хаб (мне не помогло), кто-то пишет, что если отключить WiFi, то тоже стабильно работает (не пробовал). Ещё вариант вывести внутренний UART и подключить ардуину через него, но не хотелось бы лезть в роутер. Короче, пока тупик. Попробую ещё второй роутер такой же настроить и взять другой контроллер -- мало ли...

ignat99: Этот баг пофиксили 5 дней назад. Бинарный патчь с инструкциями по установке (пока не проверял). https://github.com/SLboat/Openwrt_12.09 ... SET_PATCH/ Если поэксперементировать с этими регистрами в которых якобы нет значимых битов, возможно вылезет какая нибудь страшная уязвимость. Иначе зачем так долго (2 года) эту информацию не открывали?

sergejey: Этот баг пофиксили 5 дней назад. Бинарный патчь с инструкциями по установке (пока не проверял). https://github.com/SLboat/Openwrt_12.09 ... SET_PATCH/ Если поэксперементировать с этими регистрами в которых якобы нет значимых битов, возможно вылезет какая нибудь страшная уязвимость. Иначе зачем так долго (2 года) эту информацию не открывали? Да, видел сообщение со ссылкой в форуме International. В самое ближайшее время потестирую -- в указанной ветке какой-то китайский товарищ выложил прошивку уже с патчем. Очень надеюсь, что будет работать. Я сейчас как раз паралельный проект готовлю к публикации -- можно сказать, реинкарнация универсального модуля на базе роутера, только гораздо круче :) Экспериментирую с DLink, но всё же хотелось бы на TPLink поднять.

ignat99: На соответствующей странице в Wiki я поместил выдержки из документации и соответствущие цитаты из патча. Есть пара полезных ссылок для универсального модуля с готовым кодом: https://github.com/calaos/calaos-os - образ всего под Малинку. https://github.com/calaos/calaos_web - написан на PHP - это API которое используют клиенты. https://github.com/calaos/calaos-web-app - вот этот клиент работает на всём, даже на Tizen мобилке. calaos_server написан на С++ под Enlightenmentт к нему французкие товарищи активно подключают всякие системы через Wago - блок автоматизации с кабельным подключением сенсоров, рецепторов и афекторов. Но что характерно, часть протокола Modbus делал наш человек в далёком 2004 году. https://github.com/telefonicaid/ Это Испанский-Европейский проект с призовым фондом на этот год до 1 миллиарда. Понятно, что до разработчиков дойдёт несколько миллионов только евро. https://github.com/telefonicaid/fiware-orion Это основная их программа, для использования на роутерах IMHO. http://lab.fi-ware.eu/ Тут раздают бесплатно VPS под их приложения, как раз под задачи автоматизации городов-домов. Как заполучить, смотреть видео. Документации нет. Особенно: Правое меню->Cloud->Instances Работает не со всеми браузерами. После регистрации, надо получить сертификат, продеплоить их виртуалку, сменить пароль, открыть 22 порт в правилах (в разделе Секьюрити). Посмотреть там IP внешний динамический и вот по нему по SSH заходить с сертификатом.

sergejey: Класс, с TP Link всё получилось. Ещё буду тестировать, но промежуточные результаты обнадёживают -- если раньше ардуинка жила не больше минуты, то уже час и никаких признаков падения. Перепрошил два роутера -- на одном сразу всё заработало, на втором почему-то ни в какую не хотел определять USB-устройство -- попробовал подключить через USB-хаб и заработало тоже. Даже не знаю с чем такое поведение может быть связано -- одинаковые устройства, одинаковая прошивка, одна и та же последовательность установки. В общем, если всё будет хорошо, то эти роутеры в связке с Ардуино одназначно отличный вариант -- WiFi узел автоматизации за дёшево.

Urbas81: Перепрошил два роутера -- на одном сразу всё заработало, на втором почему-то ни в какую не хотел определять USB-устройство -- попробовал подключить через USB-хаб и заработало тоже. Даже не знаю с чем такое поведение может быть связано -- одинаковые устройства, одинаковая прошивка, одна и та же последовательность установки. Если не заработало на Tp-Link, то читал на форуме, что без хаба не определяются USB2.0 ус-ва, хабы решают эту проблему, наверное в этом дело.

sergejey: Перепрошил два роутера -- на одном сразу всё заработало, на втором почему-то ни в какую не хотел определять USB-устройство -- попробовал подключить через USB-хаб и заработало тоже. Даже не знаю с чем такое поведение может быть связано -- одинаковые устройства, одинаковая прошивка, одна и та же последовательность установки. Если не заработало на Tp-Link, то читал на форуме, что без хаба не определяются USB2.0 ус-ва, хабы решают эту проблему, наверное в этом дело. Тут странно, что на одном роутере определило, на втором только с хабом -- роутеры брать-близнецы. Ну да ладно, главное, что в итоге работает уже почти сутки.

Urbas81: Тут странно, что на одном роутере определило, на втором только с хабом -- роутеры брать-близнецы. Ну да ладно, главное, что в итоге работает уже почти сутки. Если роутеры близнецы, тогда странно, хотя у меня swap на флешке подключается через раз с хабом, может в питании дело.

[ Обсудить на форуме ]

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki