TP-Link TL-WR703N. Небольшой, но полезный мод

в 15:40, , рубрики: Atmega, avr, DIY, diy или сделай сам, wr703N, роутер, метки: , , , ,

Миниатюрный роутер TP-Link TL-WR703N стал эдаким преемником знаменитого D-Link DIR-320 — в сети можно найти немало конструкций на базе этого девайса, вроде роботов с веб-камерой и управлением через веб-интерфейс, приемников интернет-радиостанций и т.д. Я же заказывал его для использования именно по прямому назначению, но руки все равно зачесались внести какое-нибудь изменение в конструкцию — так и родилась идея встроить в корпус дисплей для вывода системной информации. Под катом — мало текста и много фотографий)

TP Link TL WR703N. Небольшой, но полезный мод


Разбираем роутер самым подходящим для этого инструментом — старой кредитной карточкой, вынимаем плату.

TP Link TL WR703N. Небольшой, но полезный мод

Рядом с ethernet разъемом есть свободный участок, здесь разместим разъем, на который выведем UART с пинов TP_IN и TP_OUT, +5 и +3.3 вольт для дисплея, и землю.

TP Link TL WR703N. Небольшой, но полезный мод

По схеме роутера легко найти, откуда запитаться.

TP Link TL WR703N. Небольшой, но полезный мод

Вот и сам дисплей, на Ebay ищется по запросу «Nokia 5110 LCD Module».

TP Link TL WR703N. Небольшой, но полезный мод

Но даже такой маленький дисплей в корпус просто так не влезет. Часть платы вместе с двумя из четырех светодиодами подсветки придется отрезать.

TP Link TL WR703N. Небольшой, но полезный мод

Примеряем в корпусе…

TP Link TL WR703N. Небольшой, но полезный мод

… и вырезаем в крышке окно под дисплей, а заодно проверяем его работоспособность

TP Link TL WR703N. Небольшой, но полезный мод

Дисплей мы будем подключать к контроллеру ATmega48p, а уже он будет читать символы с UART роутера. Принципиальную схему приводить не вижу смысла из-за ее крайней простоты. Порт и пины, к которым подключается дисплей, можно посмотреть в файле lcd_nokia3310pin.h из архива в конце статьи. Сама библиотека взята отсюда.

Печатная плата.

TP Link TL WR703N. Небольшой, но полезный мод

Прошиваем контроллер…

TP Link TL WR703N. Небольшой, но полезный мод

… и припаиваем плату с обратной стороный дисплея.

TP Link TL WR703N. Небольшой, но полезный мод

Соединяем с роутером. Штырьки разъема загнуты — иначе дисплей не влезет.

TP Link TL WR703N. Небольшой, но полезный мод

Все в сборе. Можно собирать.
Дисплей прижимается к usb-разъему на плате крышкой, не очень сильно, но достаточно, чтобы он оказался зафиксированным.

TP Link TL WR703N. Небольшой, но полезный мод

Дисплей с контроллером понимают всего три команды:
!s00Test^ — выводим «Test» на первой строке, начиная с первого символа;
!c — очищаем дисплей;
!b — включаем/выключаем подсветку.
Роутер достаточно долго загружается, и до тех пор, пока по UART не придет первая строка, на дисплее заполняется бутафорный текстовый прогрессбар.

TP Link TL WR703N. Небольшой, но полезный мод

Прошивка роутера — естесственно, OpenWRT, правда пришлось воспользоваться слегка модифицированной сборкой, в которой удалось завести модем Huawei E3276. Добавим новое UMTS/GPRS/EV-DO подключение («MTS» в моем случае)

TP Link TL WR703N. Небольшой, но полезный мод

А в удобной нам директории создадим скрипт, который будет слать в последовательный порт (/dev/ATH0) текущее время, uptime, количество подключенных по Wi-Fi клиентов, статистику по трафику созданного нами подключения и load average. Для установки скорости порта (9600 бод) придется доустановить пакет stty, т.к. на стандартной скорости 115200 контроллер ни в какую не хотел принимать данные.

текст скрипта

#!/bin/sh

port="/dev/ttyATH0"
speed="9600"

stty -F /dev/ttyATH0 raw speed $speed -crtscts cs8 -parenb -cstopb

lcdwrite() {
  echo "!s0${1}$2^" > $port
}

while [ : ]
do
  s=`date | tail -c 18 | head -c 12`
  lcdwrite 0 "$s"
  sleep 1

  s=`uptime`
  s=`expr "$s" : '.*up.(.*),  l'`
  lcdwrite 1 "uptime: $s"
  sleep 1

  s=`iw dev wlan0 station dump | grep Station | wc -l`
  lcdwrite 2 "wifi cl: $s"
  sleep 1

  s=`ifconfig 3g-mts`
  s=`expr "$s" : '.*((.*)).'`
  lcdwrite 3 "DL: $s"
  sleep 1

  s=`ifconfig 3g-mts`
  s=`expr "$s" : '.*((.*))'`
  lcdwrite 4 "UP: $s"
  sleep 1

  s=`uptime | tail -c 17 | head -c 10`
  lcdwrite 5 "LA: $s"
  sleep 1
done

Делаем скрипт исполняемым и добавляем в автозагрузку в разделе System > Startup > Local Startup, перезагружаем роутер и получаем результат, показанный на первой фотографии)

Архив с прошивкой, файлом печатной платы и скриптом — rghost.ru/45733310
(Осторожно! Исходный код прошивки может вызвать приступы паники, страха и различных болей.)

Автор: SerzhoZ

Источник

Поделиться

* - обязательные к заполнению поля