Электроника стремительно развивается и по доступной цене появляются замечательные девайсы, которые отлично подходят для использования в роли мозгов для роботов.
А учитывая, что вычислительные мощности устройств так же растут, то скоро на встраиваемых сиситемах можно будет запускать свои программы ИИ 🙂
Малину (Raspberry Pi) мне всё никак не доставят, поэтому рассмотрим Wi-Fi роутер TP-LINK TL-MR3020.
Wi-Fi роутеры с USB-портом — отличная штука для создания простого и доступного робота с трансляцией видеопотока и пробросом команд для управления шасси.
Т.о., получится создать дешёвого телеуправляемого робота, благодаря использованию сторонних прошивок типа OpenWrt.
Не так давно, для этого во всю использовались D-link DIR-320, а теперь его нишу прочно занял крохотный китайский роутер TP-LINK TL-MR3020.
похоже, следующим «мозговитым роутером» будет XXX-link 30020 🙂
Преимущества TP-LINK TL-MR3020 перед D-link DIR-320 очевидны — более малый размер, более мощный процессор и меньшая цена 🙂
Отличным плюсом к популярности TP-LINK TL-MR3020 можно добавить, что нам не придётся самостоятельно пилить прошивку, так всё уже сделано коллегами с робофорума, за что им огромное спасибо!
Поэтому, нам остаётся только прошить роутер прошивкой OR-WRT и подстроить его под свои требования.
Характеристики TP-LINK TL-MR3020
CPU - Atheros AR7240@400MHz (SoC: Atheros AR9330 rev 1) Ram - 32MiB Flash - 4MiB Network - 1 x 100MBit (RJ45) Wi-Fi - 802.11 b/g/n 150Mbps USB - 1 x 2.0 (A) Serial - 1 JTag - 0 Power - 5V (через mini-USB) размеры: корпус - 6.7cm x 7.4cm x 2.2cm плата - 5.7cm x 5.7cm
TP-LINK TL-MR3020 — схож с TP-Link TL-WR703N. И хотя 703-й дешевле, но у него не выведены светодиоды, а разъем UART придётся снимать с двух мелких площадок.
Разбираем
Разобрать роутер не сложно. На цветной крышке, всего две пластиковых защёлки — одна над разъёмом mini-USB, а вторая на противоположной стороне, напротив разъёма RJ45. Аккуратно пропихиваем в щель отвёртку и отклоняем стенку корпуса. У меня так же, оказалось, что ободок крышки вклеен в корпус, так что пришлось приложить усилия.
Распиновка UART-а
последовательный порт выведен на плате (четыре отверстия под PLS-вилку со стандартным шагом 2.54)
разъём обозначен P1 / SJ1:
1 — TX
2 — RX
3 — GND
4 — VCC (3.3)
(первый пин указан на плате (квадратный))
Припаиваем 4 пина PLS и получаем UART.
Из макетки можно вырезать подходящий кусок, припаять ответные пины и надевать на плату роутера словно шилды Arduino.
Установка новой прошивки
Идём на страничку прошивки
http://roboforum.ru/wiki/OR-WRT
читаем и скачиваем бинарник прошивки.
Заходим на свежекупленный роутер TP-LINK TL-MR3020:
http://192.168.0.254
admin / admin
и заливаем прошивку OR-WRT (0.70)
после установки заходим на роутер телнетом: telnet 192.168.217.1
и настраивает пароль root-а: passwd
перезагружаем роутер и подключаемся к нему через ssh
подробности об установке — http://roboforum.ru/wiki/OR-WRT_install
Исследование
# uname -a Linux OpenWrt 3.3.8 #1 Tue Aug 21 12:04:20 UTC 2012 mips GNU/Linux
# cat /proc/cpuinfo system type : Atheros AR9330 rev 1 machine : TP-LINK TL-MR3020 processor : 0 cpu model : MIPS 24Kc V7.4 BogoMIPS : 265.42 wait instruction : yes microsecond timers : yes tlb_entries : 16 extra interrupt vector : yes hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0ff8, 0x0f f8, 0x0ff8] ASEs implemented : mips16 shadow register sets : 1 kscratch registers : 0 core : 0 VCED exceptions : not available VCEI exceptions : not available
# cat /proc/meminfo MemTotal: 29160 kB MemFree: 9580 kB Buffers: 2020 kB Cached: 6428 kB SwapCached: 0 kB Active: 4708 kB Inactive: 5608 kB Active(anon): 1952 kB Inactive(anon): 48 kB Active(file): 2756 kB Inactive(file): 5560 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 1884 kB Mapped: 1208 kB Shmem: 132 kB Slab: 5180 kB SReclaimable: 860 kB SUnreclaim: 4320 kB KernelStack: 336 kB PageTables: 300 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 14580 kB Committed_AS: 5620 kB VmallocTotal: 1048372 kB VmallocUsed: 1216 kB VmallocChunk: 1043944 kB
# cat /proc/cmdline board=TL-MR3020 console=null quiet rootfstype=squashfs,jffs2 noinitrd
# cat /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev tmpfs nodev debugfs nodev sockfs nodev pipefs nodev anon_inodefs nodev configfs nodev devpts squashfs nodev ramfs nodev jffs2 nodev overlayfs nodev mtd_inodefs nodev usbfs ext3 ext2 ext4
# ps PID USER VSZ STAT COMMAND 1 root 1504 S init 2 root 0 SW [kthreadd] 3 root 0 SW [ksoftirqd/0] 4 root 0 SW [kworker/0:0] 5 root 0 SW [kworker/u:0] 6 root 0 SW< [khelper] 7 root 0 SW [kworker/u:1] 63 root 0 SW [sync_supers] 65 root 0 SW [bdi-default] 67 root 0 SW< [kblockd] 96 root 0 SW [kswapd0] 144 root 0 SW [fsnotify_mark] 173 root 0 SW< [ath79-spi] 184 root 0 SW [mtdblock0] 189 root 0 SW [mtdblock1] 194 root 0 SW [mtdblock2] 199 root 0 SW [mtdblock3] 204 root 0 SW [mtdblock4] 209 root 0 SW [mtdblock5] 250 root 0 SW [kworker/0:1] 481 root 1532 S {rcS} /bin/sh /etc/init.d/rcS S boot 483 root 1496 S logger -s -p 6 -t sysinit 528 root 0 SW< [cfg80211] 541 root 0 SW [khubd] 626 root 1508 S /sbin/syslogd -C16 628 root 1488 S /sbin/klogd 630 root 852 S /sbin/hotplug2 --override --persistent --set-rules-f 636 root 860 S /sbin/ubusd 657 root 1512 S /sbin/netifd 896 root 1496 S /usr/sbin/telnetd -l /bin/login.sh 1096 root 1500 S /sbin/watchdog -t 5 /dev/watchdog 1103 root 1876 S /usr/sbin/uhttpd -f -h /www -r OpenWrt -x /cgi-bin - 1134 nobody 940 S /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf 1143 root 924 S /usr/sbin/rinetd -c /var/etc/rinetd.conf 1161 root 0 SWN [jffs2_gcd_mtd3] 1197 root 1496 S sh /etc/rc.local 1204 root 848 S ser2net 1221 root 1500 S /usr/sbin/ntpd -n -p 0.openwrt.pool.ntp.org -p 1.ope 1247 root 1152 S /usr/sbin/dropbear -P /var/run/dropbear.1.pid -p 22 1275 root 1508 S /bin/ash --login 1375 root 1488 S sleep 10 1377 root 1496 R ps
# busybox BusyBox v1.19.4 (2012-08-21 01:06:25 UTC) multi-call binary. Copyright (C) 1998-2011 Erik Andersen, Rob Landley, Denys Vlasenko and others. Licensed under GPLv2. See source distribution for full notice. Usage: busybox [function] [arguments]... or: busybox --list[-full] or: function [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as. Currently defined functions: [, [[, arping, ash, awk, basename, brctl, bunzip2, bzcat, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd, df, dirname, dmesg, du, echo, egrep, env, expr, false, fgrep, find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid, hwclock, id, ifconfig, init, insmod, kill, killall, klogd, less, ln, lock, logger, logread, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp, mount, mv, nc, netmsg, netstat, nice, nslookup, ntpd, passwd, pgrep, pidof, ping, ping6, pivot_root, pkill, poweroff, printf, ps, pwd, reboot, reset, rm, rmdir, rmmod, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, time, top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, which, xargs, yes, zcat
# free total used free shared buffers Mem: 29160 19596 9564 0 2020 -/+ buffers: 17576 11584 Swap: 0 0 0
# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 640 212 428 33% / /dev/root 2304 2304 0 100% /rom tmpfs 14580 72 14508 0% /tmp tmpfs 512 0 512 0% /dev root 14580 44 14536 0% /tmp/root overlayfs:/tmp/root 14580 44 14536 0% /tmp/root /dev/mtdblock3 640 212 428 33% /overlay overlayfs:/overlay 640 212 428 33% /
# cat /www/cgi-bin/serial.cgi #!/usr/bin/awk -f function unescape(s) { gsub(/\+/," ",s) res = "" do { p = match(s,/%[0-9a-fA-F]{2}/) if(p>0) { res = res substr(s,0,p-1) sprintf("%c",0+("0x" substr(s,p+1,2))) s = substr(s,p+3) } } while(p>0) return res s } BEGIN { RS = "&" FS = "=" } { if($1 == "SERIAL_DATA" ) print unescape($2) > "/dev/ttyUSB0" } END { print "202" }
# ls /dev bus mtd1 mtd5 null ttyS0 ttyS2 urandom console mtd1ro mtd5ro port ttyS1 ttyS3 watchdog full mtd2 mtdblock0 ptmx ttyS10 ttyS4 zero kmsg mtd2ro mtdblock1 pts ttyS11 ttyS5 log mtd3 mtdblock2 random ttyS12 ttyS6 mem mtd3ro mtdblock3 shm ttyS13 ttyS7 mtd0 mtd4 mtdblock4 tty ttyS14 ttyS8 mtd0ro mtd4ro mtdblock5 ttyATH0 ttyS15 ttyS9
# stty -F /dev/ttyATH0 speed 115200 baud; line = 0; -brkint -imaxbel
/etc# ls -asl 0 drwxr-xr-x 1 root root 0 Jan 1 00:09 . 0 drwxr-xr-x 1 root root 0 Jan 1 00:00 .. 0 lrwxrwxrwx 1 root root 7 Sep 1 2012 TZ -> /tmp/TZ 1 -rw-r--r-- 1 root root 671 Jan 1 1970 banner 0 drwxrwxr-x 1 root root 0 Jan 1 00:00 config 0 drwxr-xr-x 2 root root 3 Aug 21 2012 crontabs 0 drwxrwxr-x 5 root root 86 Aug 30 2012 defconfig 3 -rwx------ 1 root root 3228 Aug 2 2012 diag.sh 1 -rw-r--r-- 1 root root 1368 Aug 21 2012 dnsmasq.conf 0 drwx------ 1 root root 0 Jan 1 00:00 dropbear 0 -rw-r--r-- 1 root root 0 Jan 1 00:00 ethers 0 lrwxrwxrwx 1 root root 10 Sep 1 2012 fstab -> /tmp/fstab 0 lrwxrwxrwx 1 root root 19 Sep 1 2012 functions.sh -> ../lib/functions.sh 0 -rw------- 1 root root 123 Jun 17 2012 group 0 -rw------- 1 root root 20 Jun 17 2012 hosts 0 drwxr-xr-x 7 root root 84 Aug 21 2012 hotplug.d 1 -rw------- 1 root root 833 Jul 23 2012 hotplug2-common.rules 0 -rw------- 1 root root 80 Jun 17 2012 hotplug2-init.rules 0 -rw-r--r-- 1 root root 242 Aug 21 2012 hotplug2.rules 0 -rw-r--r-- 1 root root 15 Sep 1 2012 httpd.conf 0 -rw-r--r-- 1 root root 50 Nov 28 2011 httpd.weak.conf 0 drwxr-xr-x 2 root root 307 Jan 6 2012 init.d 0 -rw-r--r-- 1 root root 99 Jan 1 00:09 inittab 0 drwxr-xr-x 2 root root 228 Sep 1 2012 modules-boot.d 0 drwxr-xr-x 2 root root 720 Sep 1 2012 modules.d 0 lrwxrwxrwx 1 root root 12 Sep 1 2012 mtab -> /proc/mounts 0 -rw------- 1 root root 207 Aug 21 2012 openwrt_release 0 -rw------- 1 root root 7 Aug 21 2012 openwrt_version 0 -rw-r--r-- 1 root root 179 Sep 1 2012 opkg.conf 0 -rw------- 1 root root 190 Jan 1 00:09 passwd 0 -rw------- 1 root root 190 Jan 1 00:03 passwd- 1 -rwx------ 1 root root 896 Aug 30 2012 preinit 0 -rw------- 1 root root 480 Aug 11 2012 profile 2 -rw------- 1 root root 2478 Jun 17 2012 protocols 2 -rwx------ 1 root root 1555 Jun 17 2012 rc.common 0 drwxr-xr-x 2 root root 408 Sep 1 2012 rc.d 0 -rw-r--r-- 1 root root 495 Sep 1 2012 rc.local 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 resolv.conf -> /tmp/resolv.conf 5 -rw------- 1 root root 5217 Sep 1 2012 ser2net.conf 3 -rw------- 1 root root 3017 Jun 17 2012 services 0 -rw------- 1 root root 149 Jan 1 00:09 shadow 0 -rw------- 1 root root 149 Jan 1 00:03 shadow- 0 -rw------- 1 root root 9 Jun 17 2012 shells 1 -rw------- 1 root root 1051 Jul 3 2012 sysctl.conf 0 -rw------- 1 root root 128 Jun 17 2012 sysupgrade.conf 0 drwxr-xr-x 1 root root 0 Jan 1 00:00 uci-defaults 0 -rw-r--r-- 1 root root 509 Jan 1 00:00 uhttpd.crt 1 -rw-r--r-- 1 root root 607 Jan 1 00:00 uhttpd.key root@OpenWrt:/etc# cd rc.d/ root@OpenWrt:/etc/rc.d# ls K50dropbear S02nvram S20fstab S50dropbear S60dnsmasq S97watchdog K90network S05defconfig S20network S50mjpg-streamer S80rinetd S98sysntpd K98boot S10boot S39usb S50telnet S95done S99sysctl K99umount S11ubus S50cron S50uhttpd S96led root@OpenWrt:/etc/rc.d# ls -asl 0 drwxr-xr-x 2 root root 408 Sep 1 2012 . 0 drwxr-xr-x 1 root root 0 Jan 1 00:09 .. 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 K50dropbear -> ../init.d/dropbear 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 K90network -> ../init.d/network 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 K98boot -> ../init.d/boot 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 K99umount -> ../init.d/umount 0 lrwxrwxrwx 1 root root 15 Sep 1 2012 S02nvram -> ../init.d/nvram 0 lrwxrwxrwx 1 root root 19 Sep 1 2012 S05defconfig -> ../init.d/defconfig 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 S10boot -> ../init.d/boot 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 S11ubus -> ../init.d/ubus 0 lrwxrwxrwx 1 root root 15 Sep 1 2012 S20fstab -> ../init.d/fstab 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 S20network -> ../init.d/network 0 lrwxrwxrwx 1 root root 13 Sep 1 2012 S39usb -> ../init.d/usb 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 S50cron -> ../init.d/cron 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 S50dropbear -> ../init.d/dropbear 0 lrwxrwxrwx 1 root root 23 Sep 1 2012 S50mjpg-streamer -> ../init.d/mjpg-streamer 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 S50telnet -> ../init.d/telnet 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 S50uhttpd -> ../init.d/uhttpd 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 S60dnsmasq -> ../init.d/dnsmasq 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 S80rinetd -> ../init.d/rinetd 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 S95done -> ../init.d/done 0 lrwxrwxrwx 1 root root 13 Sep 1 2012 S96led -> ../init.d/led 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 S97watchdog -> ../init.d/watchdog 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 S98sysntpd -> ../init.d/sysntpd 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 S99sysctl -> ../init.d/sysctl root@OpenWrt:/etc/rc.d# cd /etc/ root@OpenWrt:/etc# ls -asl 0 drwxr-xr-x 1 root root 0 Jan 1 00:09 . 0 drwxr-xr-x 1 root root 0 Jan 1 00:00 .. 0 lrwxrwxrwx 1 root root 7 Sep 1 2012 TZ -> /tmp/TZ 1 -rw-r--r-- 1 root root 671 Jan 1 1970 banner 0 drwxrwxr-x 1 root root 0 Jan 1 00:00 config 0 drwxr-xr-x 2 root root 3 Aug 21 2012 crontabs 0 drwxrwxr-x 5 root root 86 Aug 30 2012 defconfig 3 -rwx------ 1 root root 3228 Aug 2 2012 diag.sh 1 -rw-r--r-- 1 root root 1368 Aug 21 2012 dnsmasq.conf 0 drwx------ 1 root root 0 Jan 1 00:00 dropbear 0 -rw-r--r-- 1 root root 0 Jan 1 00:00 ethers 0 lrwxrwxrwx 1 root root 10 Sep 1 2012 fstab -> /tmp/fstab 0 lrwxrwxrwx 1 root root 19 Sep 1 2012 functions.sh -> ../lib/functions.sh 0 -rw------- 1 root root 123 Jun 17 2012 group 0 -rw------- 1 root root 20 Jun 17 2012 hosts 0 drwxr-xr-x 7 root root 84 Aug 21 2012 hotplug.d 1 -rw------- 1 root root 833 Jul 23 2012 hotplug2-common.rules 0 -rw------- 1 root root 80 Jun 17 2012 hotplug2-init.rules 0 -rw-r--r-- 1 root root 242 Aug 21 2012 hotplug2.rules 0 -rw-r--r-- 1 root root 15 Sep 1 2012 httpd.conf 0 -rw-r--r-- 1 root root 50 Nov 28 2011 httpd.weak.conf 0 drwxr-xr-x 2 root root 307 Jan 6 2012 init.d 0 -rw-r--r-- 1 root root 99 Jan 1 00:09 inittab 0 drwxr-xr-x 2 root root 228 Sep 1 2012 modules-boot.d 0 drwxr-xr-x 2 root root 720 Sep 1 2012 modules.d 0 lrwxrwxrwx 1 root root 12 Sep 1 2012 mtab -> /proc/mounts 0 -rw------- 1 root root 207 Aug 21 2012 openwrt_release 0 -rw------- 1 root root 7 Aug 21 2012 openwrt_version 0 -rw-r--r-- 1 root root 179 Sep 1 2012 opkg.conf 0 -rw------- 1 root root 190 Jan 1 00:09 passwd 0 -rw------- 1 root root 190 Jan 1 00:03 passwd- 1 -rwx------ 1 root root 896 Aug 30 2012 preinit 0 -rw------- 1 root root 480 Aug 11 2012 profile 2 -rw------- 1 root root 2478 Jun 17 2012 protocols 2 -rwx------ 1 root root 1555 Jun 17 2012 rc.common 0 drwxr-xr-x 2 root root 408 Sep 1 2012 rc.d 0 -rw-r--r-- 1 root root 495 Sep 1 2012 rc.local 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 resolv.conf -> /tmp/resolv.conf 5 -rw------- 1 root root 5217 Sep 1 2012 ser2net.conf 3 -rw------- 1 root root 3017 Jun 17 2012 services 0 -rw------- 1 root root 149 Jan 1 00:09 shadow 0 -rw------- 1 root root 149 Jan 1 00:03 shadow- 0 -rw------- 1 root root 9 Jun 17 2012 shells 1 -rw------- 1 root root 1051 Jul 3 2012 sysctl.conf 0 -rw------- 1 root root 128 Jun 17 2012 sysupgrade.conf 0 drwxr-xr-x 1 root root 0 Jan 1 00:00 uci-defaults 0 -rw-r--r-- 1 root root 509 Jan 1 00:00 uhttpd.crt 1 -rw-r--r-- 1 root root 607 Jan 1 00:00 uhttpd.key
# ls -asl /lib 0 drwxr-xr-x 13 root root 680 Aug 21 2012 . 0 drwxr-xr-x 1 root root 0 Jan 1 00:00 .. 6 -rwx------ 1 root root 6530 Aug 2 2012 ar71xx.sh 0 drwx------ 2 root root 29 Sep 1 2012 config 0 drwxr-xr-x 2 root root 3 Aug 21 2012 firmware 0 drwx------ 2 root root 405 Sep 1 2012 firstboot 0 drwxr-xr-x 3 root root 167 Sep 1 2012 functions 7 -rwx------ 1 root root 7065 Jun 17 2012 functions.sh 28 -rwxr-xr-x 1 root root 28968 Aug 21 2012 ld-uClibc-0.9.33.2.so 0 lrwxrwxrwx 1 root root 21 Sep 1 2012 ld-uClibc.so.0 -> ld-uClibc-0.9.33.2.so 6 -rw-r--r-- 1 root root 6340 Aug 21 2012 libblobmsg_json.so 0 lrwxrwxrwx 1 root root 21 Sep 1 2012 libc.so.0 -> libuClibc-0.9.33.2.so 22 -rwxr-xr-x 1 root root 22852 Aug 21 2012 libcrypt-0.9.33.2.so 0 lrwxrwxrwx 1 root root 20 Sep 1 2012 libcrypt.so.0 -> libcrypt-0.9.33.2.so 12 -rwxr-xr-x 1 root root 12504 Aug 21 2012 libdl-0.9.33.2.so 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libdl.so.0 -> libdl-0.9.33.2.so 75 -rw-r--r-- 1 root root 76936 Aug 21 2012 libgcc_s.so.1 83 -rwxr-xr-x 1 root root 85244 Aug 21 2012 libm-0.9.33.2.so 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 libm.so.0 -> libm-0.9.33.2.so 77 -rwxr-xr-x 1 root root 78652 Aug 21 2012 libpthread-0.9.33.2.so 0 lrwxrwxrwx 1 root root 22 Sep 1 2012 libpthread.so.0 -> libpthread-0.9.33.2.so 347 -rwxr-xr-x 1 root root 355503 Aug 21 2012 libuClibc-0.9.33.2.so 15 -rw-r--r-- 1 root root 15800 Aug 21 2012 libubox.so 13 -rw-r--r-- 1 root root 13456 Aug 21 2012 libubus.so 33 -rwxr-xr-x 1 root root 33608 Aug 21 2012 libuci.so 4 -rwxr-xr-x 1 root root 4036 Aug 21 2012 libutil-0.9.33.2.so 0 lrwxrwxrwx 1 root root 19 Sep 1 2012 libutil.so.0 -> libutil-0.9.33.2.so 0 drwxr-xr-x 2 root root 30 Sep 1 2012 lua 0 drwxr-xr-x 3 root root 28 Aug 21 2012 modules 0 drwx------ 3 root root 70 Sep 1 2012 netifd 0 drwxr-xr-x 2 root root 49 Sep 1 2012 network 0 drwxr-xr-x 2 root root 949 Sep 1 2012 preinit 1 -rw-r--r-- 1 root root 771 Aug 21 2012 uboot-envtools.sh 0 drwxr-xr-x 3 root root 99 Aug 21 2012 upgrade 0 drwxr-xr-x 2 root root 77 Sep 1 2012 wifi
# ls -asl /usr/lib/ 0 drwxr-xr-x 4 root root 906 Sep 1 2012 . 0 drwxr-xr-x 6 root root 74 Aug 21 2012 .. 0 drwxr-xr-x 2 root root 37 Sep 1 2012 crda 9 -rwxr-xr-x 1 root root 8848 Aug 21 2012 input_file.so 26 -rwxr-xr-x 1 root root 26664 Aug 21 2012 input_uvc.so 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libblkid.so.1 -> libblkid.so.1.1.0 147 -rwxr-xr-x 1 root root 150540 Aug 21 2012 libblkid.so.1.1.0 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libcurses.so -> libncurses.so.5.7 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 libcyassl.so -> libcyassl.so.0.0.0 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 libcyassl.so.0 -> libcyassl.so.0.0.0 133 -rwxr-xr-x 1 root root 136168 Aug 21 2012 libcyassl.so.0.0.0 0 lrwxrwxrwx 1 root root 12 Sep 1 2012 libform.so -> libform.so.5 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 libform.so.5 -> libform.so.5.7 47 -rwxr-xr-x 1 root root 48088 Aug 21 2012 libform.so.5.7 0 lrwxrwxrwx 1 root root 15 Sep 1 2012 libhistory.so -> libhistory.so.5 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libhistory.so.5 -> libhistory.so.5.2 33 -r-xr-xr-x 1 root root 33911 Aug 21 2012 libhistory.so.5.2 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libjpeg.so.62 -> libjpeg.so.62.0.0 121 -rwxr-xr-x 1 root root 124312 Aug 21 2012 libjpeg.so.62.0.0 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 libjson.so.0 -> libjson.so.0.0.1 21 -rwxr-xr-x 1 root root 21584 Aug 21 2012 libjson.so.0.0.1 171 -rw-r--r-- 1 root root 175504 Aug 21 2012 liblua.so.5.1.4 0 lrwxrwxrwx 1 root root 12 Sep 1 2012 libmenu.so -> libmenu.so.5 0 lrwxrwxrwx 1 root root 14 Sep 1 2012 libmenu.so.5 -> libmenu.so.5.7 21 -rwxr-xr-x 1 root root 21988 Aug 21 2012 libmenu.so.5.7 0 lrwxrwxrwx 1 root root 15 Sep 1 2012 libncurses.so -> libncurses.so.5 0 lrwxrwxrwx 1 root root 17 Sep 1 2012 libncurses.so.5 -> libncurses.so.5.7 173 -rwxr-xr-x 1 root root 177104 Aug 21 2012 libncurses.so.5.7 28 -rwxr-xr-x 1 root root 28228 Aug 21 2012 libnl-tiny.so 9 -rwxr-xr-x 1 root root 9016 Aug 21 2012 libnvram.so.0.1 0 lrwxrwxrwx 1 root root 13 Sep 1 2012 libpanel.so -> libpanel.so.5 0 lrwxrwxrwx 1 root root 15 Sep 1 2012 libpanel.so.5 -> libpanel.so.5.7 8 -rwxr-xr-x 1 root root 8628 Aug 21 2012 libpanel.so.5.7 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 libreadline.so -> libreadline.so.5 0 lrwxrwxrwx 1 root root 18 Sep 1 2012 libreadline.so.5 -> libreadline.so.5.2 239 -r-xr-xr-x 1 root root 244749 Aug 21 2012 libreadline.so.5.2 0 lrwxrwxrwx 1 root root 16 Sep 1 2012 libuuid.so.1 -> libuuid.so.1.3.0 11 -rwxr-xr-x 1 root root 11020 Aug 21 2012 libuuid.so.1.3.0 0 drwxr-xr-x 4 root root 54 Aug 21 2012 opkg 11 -rwxr-xr-x 1 root root 11084 Aug 21 2012 output_file.so 29 -rwxr-xr-x 1 root root 29344 Aug 21 2012 output_http.so 11 -rwxr-xr-x 1 root root 11376 Aug 21 2012 uhttpd_lua.so 4 -rwxr-xr-x 1 root root 4248 Aug 21 2012 uhttpd_tls.so
# cat /etc/init.d/mjpg-streamer #!/bin/sh /etc/rc.common # Copyright (C) 2009 OpenWrt.org START=50 SSD=start-stop-daemon NAME=mjpg_streamer PIDF=/var/run/$NAME.pid PROG=/usr/bin/$NAME start() { config_load mjpg-streamer config_get device core device config_get resolution core resolution config_get fps core fps config_get port core port config_get yuv core yuv config_get_bool enabled core enabled [ $enabled -gt 0 -a -c $device ] && sleep 3 && $SSD -S -m -p $PIDF -q -x $PROG -- --input "input_uvc.so --device $device --fps $fps --resolution $resolution $yuv" --output "output_http.so --port $port" >/dev/null 2>/dev/null & } stop() { $SSD -K -s SIGINT -p $PIDF; sleep 10 }
# ifconfig eth0 Link encap:Ethernet HWaddr 90:F6:52:B5:ED:DE inet addr:192.168.217.1 Bcast:192.168.217.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:44652 errors:0 dropped:1582 overruns:0 frame:0 TX packets:2740 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:26120672 (24.9 MiB) TX bytes:363121 (354.6 KiB) Interrupt:4 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:7410 errors:0 dropped:0 overruns:0 frame:0 TX packets:7410 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:504051 (492.2 KiB) TX bytes:504051 (492.2 KiB)
# lsmod Module Size Used by Tainted: G uvcvideo 57784 0 videobuf2_vmalloc 1585 1 uvcvideo videobuf2_memops 1491 1 videobuf2_vmalloc videobuf2_core 16456 1 uvcvideo pl2303 9872 0 ftdi_sio 27968 0 cp210x 10144 0 v4l2_common 4947 0 videodev 70150 2 uvcvideo,v4l2_common usbserial 25274 3 pl2303,ftdi_sio,cp210x i2c_dev 4032 0 ath79_wdt 2320 1 ledtrig_netdev 3264 0 ath9k 87507 0 ath9k_common 1513 1 ath9k ath9k_hw 322186 2 ath9k,ath9k_common ath 14873 3 ath9k,ath9k_common,ath9k_hw mac80211 264710 1 ath9k cfg80211 159652 3 ath9k,ath,mac80211 compat 3525 5 ath9k,ath9k_common,ath9k_hw,mac80211,cfg80211 input_core 21430 2 uvcvideo arc4 848 2 aes_generic 29961 0 usb_storage 34472 0 uhci_hcd 18208 0 ohci_hcd 16240 0 ehci_hcd 33008 0 sd_mod 22320 0 ext4 243518 0 jbd2 40917 1 ext4 mbcache 3949 1 ext4 usbcore 104514 10 uvcvideo,pl2303,ftdi_sio,cp210x,usbserial,usb_storage,uhci_hcd,ohci_hcd,ehci_hcd usb_common 562 1 usbcore scsi_mod 75784 2 usb_storage,sd_mod nls_base 4958 1 usbcore crc16 1015 1 ext4 crypto_algapi 10668 2 arc4,aes_generic ledtrig_timer 1152 0 ledtrig_default_on 496 0 leds_gpio 1632 0 gpio_button_hotplug 3264 0
# ls -asl /lib/modules/3.3.8/ aes_generic.ko ftdi_sio.ko scsi_mod.ko arc4.ko gpio-button-hotplug.ko sd_mod.ko ath.ko i2c-dev.ko uhci-hcd.ko ath79_wdt.ko input-core.ko usb-common.ko ath9k.ko jbd2.ko usb-storage.ko ath9k_common.ko leds-gpio.ko usbcore.ko ath9k_hw.ko ledtrig-default-on.ko usbserial.ko cfg80211.ko ledtrig-netdev.ko uvcvideo.ko compat.ko ledtrig-timer.ko v4l2-common.ko cp210x.ko mac80211.ko videobuf2-core.ko crc16.ko mbcache.ko videobuf2-memops.ko crypto_algapi.ko nls_base.ko videobuf2-vmalloc.ko ehci-hcd.ko ohci-hcd.ko videodev.ko ext4.ko pl2303.ko
Подключение web-камеры
К сожалению, к роутеру не получится подключить первую попавшуюся камеру.
Самый главный критерий выбора - камера должна поддерживать UVC (USB Video Class)
Список моделей камер:
http://ideasonboard.org/uvc/
Так же, было бы здорово, чтобы камера сама сжимала поток и отдавала его в виде mjpg.
Пример: Logitech Webcam C100
Определившись с камерой, просто подключаем её к USB роутера.
После подключения веб-камеры, поддерживающей UVC, появится видео-устройство /dev/video0, данные с которого можно считать и отдавать через сокет в сжатом виде.
Для этого используется утилита mjpg_streamer, которая сжимает каждый кадр в JPEG (если камера отдаёт кадры в формате YUYV).
Ручной запуск mjpg_streamer
/usr/bin# mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 320x240 -f 10" -o "output_http.so -p 8080" MJPG Streamer Version: svn rev: exported i: Using V4L2 device.: /dev/video0 i: Desired Resolution: 320 x 240 i: Frames Per Second.: 10 i: Format............: MJPEG Unable to set format: 1196444237 res: 320x240 Init v4L2 failed !! exit fatal i: init_VideoIn failed
укажем, что камера выдаёт данные в формате YUYV, указав параметр -y и всё заработает.
# mjpg_streamer -i "input_uvc.so -d /dev/video0 -y -r 320x240 -f 10" -o "output_http.so -p 8080"
при таком режиме работы, нагрузка на проц будет составлять более 90%
Подключение к веб-интерфейсу
Заходим на http://192.168.217.1 и видим интерфейс для управления роботом:
Доступ к светодиодам через GPIO
# ls -asl /sys/devices/platform/leds-gpio/leds/ 0 drwxr-xr-x 6 root root 0 Jan 1 00:00 . 0 drwxr-xr-x 3 root root 0 Jan 1 00:00 .. 0 drwxr-xr-x 2 root root 0 Jan 1 00:00 tp-link:green:3g 0 drwxr-xr-x 2 root root 0 Jan 1 00:00 tp-link:green:lan 0 drwxr-xr-x 2 root root 0 Jan 1 00:00 tp-link:green:wlan 0 drwxr-xr-x 2 root root 0 Jan 1 00:00 tp-link:green:wps
гасим и зажигаем светодиод:
echo 0 > /sys/devices/platform/leds-gpio/leds/tp-link\:green\:3g/brightness echo 1 > /sys/devices/platform/leds-gpio/leds/tp-link\:green\:3g/brightness
echo 0 > /sys/devices/platform/leds-gpio/leds/tp-link\:green\:wlan/brightness echo 1 > /sys/devices/platform/leds-gpio/leds/tp-link\:green\:wlan/brightness
А у нас ведь есть Lua!
# lua -v Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio (double int32)
# lua -e "a=os.time(); print(a);"
попробуем написать скрипт для изменения состояния светодиода
--[[ write to led ]]-- led=io.open("/sys/devices/platform/leds-gpio/leds/tp-link\:green\:3g/brightness", "w"); if led==nil then print("Error open file!"); os.exit(-1); end led:write(0);
изменим его, чтобы умещался в одну строчку и скормим lua:
lua -e "led=io.open(\"/sys/devices/platform/leds-gpio/leds/tp-link\:green\:3g/brightness\", \"w\"); if led==nil then print(\"Error open file!\"); os.exit(-1); end led:write(0);"
работает 🙂 теперь напишем blink
--[[ blink ]]-- led=io.open("/sys/devices/platform/leds-gpio/leds/tp-link:green:3g/brightness", "w"); if led==nil then print("Error open file!"); os.exit(-1); end val = 0; t0 = os.time(); t1 = 0; while 1 do t1 = os.time(); led:seek(beg, 0); if t1 > t0 then t0 = t1; print(val); led:write(val); if val == 0 then val = 1; else val = 0; end end end
переводим в одну строчку:
lua -e "led=io.open(\"/sys/devices/platform/leds-gpio/leds/tp-link:green:3g/brightness\", \"w\"); if led==nil then print(\"Error open file!\"); os.exit(-1); end val = 0; t0 = os.time(); t1 = 0; while 1 do t1 = os.time(); led:seek(beg, 0); if t1 > t0 then t0 = t1; print(val); led:write(val); if val == 0 then val = 1; else val = 0; end end end"
мигает 🙂 хотя и грузит проц на 99% так как постоянно крутится в бесконечном цикле.
Написание программ на C
Идём на OpenWrt
http://downloads.openwrt.org/backfire/10.03.1/ar71xx/
и скачиваем toolchain
OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2 (15.2MB)
распаковываем его в домашний каталог /home/user/dev/toolchains/tplink/, бинарники при этом лежат здесь:
/home/user/dev/toolchains/tplink/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin
экспортируем путь до бинарников в переменную окружения PATH
export PATH="$HOME/dev/toolchains/tplink/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin:$PATH"
пишем тестовую программу:
// // test // // mips-openwrt-linux-gcc -static -s -o test test.c // mips-openwrt-linux-gcc -o test test.c // #include <stdio.h> int main(int argc, char *argv[]) { printf("[i] Start...\n"); printf("[i] End.\n"); return 0; }
сборка тестовой программы:
mips-openwrt-linux-gcc -o test test.c
$ file test test: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, statically linked, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, stripped
проверим, скопируем файл на роутер, командой:
scp test [email protected]:/root/
запускаем:
root@OpenWrt:~# ./test [i] Start... [i] End.
та-да! получилось!
Подключение переходника USB-RS232
OR-WRT уже поддерживает следующие USB-UART интерфейсы:
* Silicon Labs CP210x, включая OR-USB-UART-v1
* Prolific PL-2303
* FTDI
* Pololu Orangutan SVP-1284
а значит, что Arduino/CraftDuino и большинство переходников сразу заработают.
У меня при первом подключении, переходник USB-RS232 (на базе PL2303) определился как /dev/ttyUSB0, но доступ к себе не давал, но после переподключения всё заработало как нужно.
Для проброса последовательного порта в сеть (сокет), в прошивке уже установлена утилита ser2net.
Вывод
Т.о., мы получаем в свои руки отличный одноплатник с Wi-Fi, Ethernet, USB и UART-ом на борту.
На базе этого роутера можно, например, собрать простого робота телеприсутствия.
Для этого, просто подключаем к роутеру камеру и Arduino, к ардуино лепим мотор-шилд и громоздим это всё на свою робо-тележку или старую детскую машинку.
Теперь к роутеру можно подключиться через Wi-Fi и управлять его движением, посылая команды для контроллера Arduino напрямую через сокет или CGI.
Примечание
у встроенного UART большая ошибка тайминга на скорости 115200, поэтому лучше брать 57600.
Далее: Использование Lua в робототехнике
Кросс-компиляция Lua для TP-LINK TL-MR3020
Lua - модуль для работы с последовательным портом
Запуск своих CGI на Wi-Fi-роутере TP-LINK TL-MR3020
Компьютерное зрение на Wi-Fi роутере TP-LINK TL-MR3020 при помощи tinycv
Ссылки
http://roboforum.ru/wiki/OR-WRT
http://roboforum.ru/wiki/OR-WRT_install
http://ideasonboard.org/uvc/
http://wiki.openwrt.org/toh/tp-link/tl-mr3020
http://wiki.openwrt.org/toh/tp-link/tl-wr703n/ar9331_pinout
http://downloads.openwrt.org/backfire/10.03.1/ar71xx/
Использование TP-Link MR3020:
Простой wifi бот для мониторинга помещений или «кухонное» роботостроение
Включение чего угодно по HTTP без заморочек c OpenWRT
TP-Link MR3020: миниатюрный linux-сервер
По теме
Мозги для робота
Новогоднее исследование ADSL-роутера на базе Linux
43 комментария на «“Исследование Wi-Fi-роутера TP-LINK TL-MR3020”»
Спасибо, отличная статья!
в коллекцию рецептов =)
Быстрый старт!
Купил — сделал, все получилось. Хочется продолжения темы, появились вопросы:
— как переделать страницу веб интерфейса с камерой, добавить свои показометры. SVG?
— добавить скрипты- для индикаторов, кнопок, приёма отправки строк в UART
— добавить программы для обмена по i2c spi 1-wire…
вообщем теперь хочется большего, как в repsberry pi.
Есть идеи?
Кстати, в стандартном репозитарии пакетов OpenWrt () есть пакеты i2c-tools и kmod-i2c-*. i2c-tools содержит утилиты для работы с итуси, а пакеты kmod-i2c-* содержат модули ядра для итуси. Их можно распаковать, переправить на дИвайс и использовать по назначению.
З.Ы. в этом репозитарии ещё куча интересных пакетов есть. я некоторые протестировал на TL-MR3020, всё работает!
ссылка запоролась, вот она: downloads.openwrt.org/snapshots/trunk/ar71xx/packages/.
Это да! Вчера смотрел в гугле что за пакеты такие. Только команды линукса я только-то начал изучать, еще пакеты ставить пока не умею. И еще не понятно где находятся SDA SCL (общий нашел :))), в pinoute на MR3020 не обозначено.
А вообще план такой:
+ расширить флешку FL032 || Fl128 параллельно с переключением (получается save mode)
+ разъем UART Tx Rx Gnd +3v3
— родной блок питания свистит
с неродным блоком 5В 500мА не запускается, мигает
-добавить DC/DC на вход 5В, чтоб питать от любого источника
+ OR-WRT Open Robot WRT
+ telnet — ssh
— TFTP
— mc
+ WeServer static — html cgi скачать с роутера файлы
http://www.adafruit.com/blog/2012/10/05/the-adafruit-learning-system-raspberry-pi-webide-is-ready-for-testing-piday-raspberrypi-raspberry_pi/
нужно только разобраться
— VideoStreaming с вебкамеры
— WebIDE, как для — Python Lua sh — Simplisity
Осваиваю команды консоли.
Еще интересна Lua — именно как язык, очень красиво сделано на мой взгляд. Просто изучать, мозг не выносит… вообщем зацепило!
Да, меня вот тоже, именно так, «зацепило».
Кстати, извините за любопытство, зачем вам TFTP? ИМХО, scp гораздо удобнее и понятнее.
их как раз поставить много не получится, на внутренней флэшке всего 400 КБ свободно. По-моему, удобнее их распаковывать на компьютере (архиватором) и закидывать на устройство через флэшку.
Я, например, сделал так:
*отформатировал флэшку в ext4 (из-под линукса, через mke2fs)
*записал на нёё бинарники, извлечённые из пакетов на компе
*вставил в роутер
*примонтировал её на роутере
*
построил свою вольницу с викодином и медсёстрамииспользую флэшку для перекидывания и хранения файлов между девайсом и компому издательства O`Reilly была очень удобная и полезная книжица по командам консоли линукса, погуглите — очень помогает при осваивании консоли
она выглядит вот так:shop.oreilly.com/product/0636920023029/ViewLarger.do?sortby=publicationDate
Есть.
а волшебная папочка /www вам на что? туда можно кидать что угодно, и uhttpd (вебсервер) будет это что угодно хостить.
-уарт
-управление светодиодом
в том тулчейне, на который дана ссылка в статье, есть заголовочные файлы C для приложений Linux. Наверняка там будет и заголовочный файл для работы с i2c, тем более что в ядре этот модуль есть:
Так что дерзайте и да пребудет с Вами Сила!
1. Правильно ли я понял, что в папку www можно записывать файлы и после перезагрузки они не исчезнут? или всё-таки нужно подключать флешку?
2. На обратной стороне платы есть микросхемка FL032PIF — SPI-флэш на 4 мегабайта — можно ли «проапгрейдить» до, например, 8-ми
3. То же самое с ОЗУ — если взять с какой-либо старой планки DDR, а может «напаять» сверху такую-же (и развести канал Chip select)?
4. Т.к. место есть, возможно ли вставить USB-хаб? Прошивка это поймёт?
а) конечно, можно. к / примонтирована на чтение-запись энергонезависимая флэш-память, правда свободно всего 400 кб.
бе) можно, но придётся пересобирать ядро и файловую систему.
це) тут проблемнее. вам придётся очень долго мучаться с поисками подходящей микросхемы памяти. насчёт развода CS — не знаю, никто до вас не пробовал.
де) можно. поймёт и примет. (по крайней мере, должна)
дополнение к це: правда, если вы мазохист и умеете держать в лапах паяльник (до уровня гуру СМД монтажа), можно попробовать припаять какую-нибудь «неподходящую» микруху параллельной памяти. принцип работы ведь у них один и тот же. в любом случае, если будете пробовать, обязательно отпишитесь о результатах!
Очень интересное железо. Спасибо.
Не смог разобраться как заставить устройство разговаривать по встроенному uart. Помогите, пожалуйста…
допусим, я хочу попросить его через ssh, отправить мне по юарту «hello world»…
тТипо того, как светодиодами мигали…
а… вижу. Кажется этот вопрлс уже был…
Можно посоветовать какую-нибудь литературу…
Для понимания процесса.
По линуксу, командной строке, OpenWRT…
Чтобы вообще понимать, что происходит…
по командной строке выше какую-то книжку рекомендовали, а по линуксу… Его нужно ставить — хотя бына виртуалку и изучать. если интересует применительно к встраиваемым системам, то на форуме есть подборка книг и ресурсов.
Камера uvcvideo: Found UVC 1.00 device CNF7129 (04f2:b071) — из Asus EEE-PC 900ю
Пытаюсь сделать видеопоток 640×480 так (камера позволяет):
mjpg_streamer -i «input_uvc.so -d /dev/video0 -y -r 640ч480 -f 10» -o «output_http.so -p 8080»
но на веб-страничке всё равно маленькое окно и изображение полосами.
Куда копнуть?
Вдохновившись статьёй сделал так:
внимательнее перечитать статью-описание прошивки.
Там есть раздел Мусор или артефакты на видео, в котором чётко указано, что
ничего удивительного в этом нет — процессор всё же довольно слабый — его и 320×240 грузят почти под завязку — что уж говорить про 640×480 )
А если такую камеру поставить? Ведь роутеру нужно просто будет гнать байты с девайса в сокет?
Нужно использовать камеру logitech c 270 (может и еще какие, но тестил на ней) она вещает в mjpeg, у меня стабильно работает в разрешении 640 на 480 при 25 кадрах при аптайме более месяца (использовал роутер как айпи-камеру), загрузка процессора всего на 5%, еще эта камера очень хорошо показывает при плохом освещении, специально купил для своих проектов, например на роутере asus n10 с этой камерой можно смело ставить разрещения вплоть до 1024 на 1280. В www\res\main.css ставим width: 640px; height: 480px; и наслаждаемся большой картинкой там же убираем черно-желтую рамку.
В посте рассказывается о пробросе данных с Arduino в сеть:
gertverdemme.nl/howto/arduino_serial_over_tcp_openwrt
при помощи утилиты socat.
Решил повторить проект.Всё хорошо, только когда захожу на 192.168.217.1 то камера сделала одно фото и всё.Теперь картинка просто стоит там, и не меняется при повторном входе.Может кто нибудь сталкивался с данной проблемой?
Народ хелп.
немогу зайти на роутер после прошивки, телнетом соеденяюсь по 21 порту.
чего не ввожу в ответ одно и тоже, заранее спасибо за помошь, вот что телнет пишет
—== Подключение к 192.168.217.1:21 [25.06.2013 10:57:01] ==—
220 (vsFTPd 3.0.2)
>> wifi ip
530 Please login with USER and PASS.
>> Login root
530 Please login with USER and PASS.
>> passwd
530 Please login with USER and PASS.
—== Соединение ЗАКРЫТО Пользователем [10:59:40] ==—
—== Подключение к 192.168.217.1:1 [25.06.2013 10:59:47] ==—
—== Сервер 192.168.217.1:1 — не найден! ==—
—== Подключение к 192.168.217.1:0 [25.06.2013 11:00:06] ==—
—== Сервер 192.168.217.1:0 — не найден! ==—
—== Подключение к 192.168.217.1:21 [25.06.2013 11:00:14] ==—
220 (vsFTPd 3.0.2)
—== Соединение ЗАКРЫТО Пользователем [11:02:33] ==—
—== Подключение к 192.168.217.1:21 [25.06.2013 11:08:49] ==—
—== Сервер 192.168.217.1:21 — не найден! ==—
—== Подключение к 192.168.217.1:21 [25.06.2013 11:09:10] ==—
—== Сервер 192.168.217.1:21 — не найден! ==—
—== Подключение к 192.168.217.1:21 [25.06.2013 11:09:15] ==—
—== Сервер 192.168.217.1:21 — не найден! ==—
—== Подключение к 192.168.217.1:21 [25.06.2013 11:09:42] ==—
220 (vsFTPd 3.0.2)
>> orwrt_init
530 Please login with USER and PASS.
>> # cat /proc/meminfo
530 Please login with USER and PASS.
>> root
530 Please login with USER and PASS.
>> login root pass admin
530 Please login with USER and PASS.
>> passwd
530 Please login with USER and PASS.
>> admin admin
530 Please login with USER and PASS.
—== Соединение ЗАКРЫТО Пользователем [11:15:03] ==—
21-й порт — это FTP, а telnet обычно на 23-й делают О_о
все роутер прошил, разобрался вроди что с ним да как, остался последний вопрос:
Как подключить его к ардуино мега 2560??? блин помогите люди добрые. уже кучу форумов перелопатил. Напишите как для дауна младшего дошкольного возраста.без разницы по usb или по юарту. только поточнее. главное напишите как настроить соединение и какими командами послать в дуину данные и получить.
ответил нафоруме
Застрял на изменении файла main.css. Никогда с Linux не сталкивался. Не могу отредактировать этот файл (хочу изменить разрешение на камеру) Делаю следующее:
sed ‘s/width: 320px;/width: 640px;/g’ res/main.css и аналогично с height(находясь в папке WWW). Как я понимаю дело в разрешении.Помогите. Спасибо.
так ведь не обязательно редактировать файл прямо на роутере (хотя там вместо sed можно использовать vi) — просто скопируйте файл себе на компьютер, отредактируйте в любимом текстовом редакторе (желательно чтобы он сохранял unix-овый перенос строк — например notepad++), а потом залейте файл обратно при помощи scp или WinSCP.
Пытаюсь написать самопальную программу на windows по управлению устройствами подключенными к USB. Какого вида должен быть запрос к сервису ser2net по ethernet для выдачи своих данных. (echo «A» > /dev/ttyUSB0 работает).
ser2net просто пересылает все полученные байты из сокета в последовательный порт (и обратно). Т.о., просто пишите в сокет свои данные (байт, пакет и т.п.).
в списке запущенных процессов нет ser2net, ввожу ser2net, процесс появляется но связи нет. Ввожу ser2net -c /etc/ser2net.conf связи все равно нет. Ввожу ser2net -p 3000 — связь устанавливается, но на любую строку приходит ответ Unknown command:… Опишите пожалуйста пошагово как надо.
Но вводя ser2net -C «3000:raw:600:/dev/ttyUSB0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS», все работает, Ура!!!
Научите как прописать в автозагрузку ser2net?
Здравствуйте! У меня при сборке возникло пару проблем. Если у вас есть время, дайте мне пожалуйста ваш скайп, попробую вам объяснить что не получается. Буду очень благодарен за помощь.
А как научить TP-link с прошивкой OR-WRT цепляться по Wi-fi к другому роутеру как клиенту?
Через веб-форму как в инструкции не получается — отображается 3 строки, 2 радиокнопки и все…garr.dl.sourceforge.net/project/orwrt/0.77/openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin
Прошивка эта
В лучших традициях линя хочу настроить через ssh руками прописывая настройки в конфигурационные файлы. Помочь никто не может?:)
у меня на этой прошивке все с веб морды настраивается
Ну хз, у меня на лисе под линем веб-форма работала косо, я не стал запариваться и просто собрал дистрибутив сам по инструкцииwiki.openwrt.org/doc/howto/buildroot.exigence . Там же нашел инструкцию по тому как в /etc/config/wireless настроить wi-fi. Буду теперь впилиливать дистрибутив на внешнюю флешку и работать с нее.
Подскажите пожалуйста!
Случайно отключил HTTP сервер через WEB панель, поставив галочку на disable, через браузер зайти больше не возможно.
Какой командой через SSH теперь можно включить http сервер обратно?
Привет всем!
У меня возникла проблема. Хотел собрать на базе этого девайса роутер которой может немного больше чем просто вафлю раздавать.
Решил сделать сам павербанк, из за чего испортил устройство.
Подал через мини юсб 7.4 вольта.
Случилось из за того что случайно подключил один из четырёх аккумуляторов последовательно.
Использовал UltraFire 18650. 3.7 вольта.
Когда подключал один аккумулятор всё работало нормально кроме светодиодов, только один нормально горел.
Если кто то может помочь с починкой или хотябы видел материалы по этой тематике ответьте пожалуйста!
Купил, прошил, всё как будто заработало, но есть две проблемы:
а) при попытке примонтировать флэшку, подключённую через USB:
ну вот почему?
б) почему-то не могу зайти на веб-интерфейс девайса: сайт требует аутентификации, перепробовал все варианты логинов/паролей, но всё равно не пускает.
Вообщем хелп ми плиз.
думаю, поддержка файловой системы FAT просто не включена в ядро 😉 а пароль тот, который вы задали для root-а при первом подключении через telnet.
Я пробовал логиниться с логином root и паролем рута (тем самым, который я задавал при первом подключении). Не пускает 🙁
Все, баг пофиксен — оказалось, что это мой локальный глюк, после
битья головой об стенунескольких перезагрузок все стало нормально.