Gelöst: Arduino per USB an OpenWRT Router - Kann man ihn dann Programmieren?

Moin,

ich möchte den Arduino per USB programmieren. Problem: er hängt auf dem Dachboden am WR703N WiFi Router mit OpenWRT. Siehe

Gibt es eine Möglichkeit den auf einem anderen PC kompilierten .hex Code per USB zu senden, sodass er Ardu in den Programmiermodus schaltet und das Hexfile annimmt? Warum möchte ich das machen: weil ich in Zukunft vermeiden will, dass ich wg. eines kleinen Fehlers im Code hoch muss, den Ardu abklemmen, am PC Programmieren und in wieder hochbringen muss. Besser ist ein HTTP Upload Interface, in dass man das Hexfile hochlädt und per BASH script (sowas wie "cat blahhexfile > /DEV/ttyACM0" den Ardu programmiert.

Machbar?

Klar :wink:

http://packages.debian.org/de/squeeze/avrdude

Wie du hier siehst, gibt es avrdude (das Tool zum Hochladen von .hex Files) auch für Mipsel kompiliert.
Ich kenne zwar das Packaging von OpenWRT nicht, aber man kann auch da einfach das deb-Package entpacken und nutzen :wink:

Gruß,
Tobias

Uhm, AVRdude ist im Repo des OpenWRT für den WR703N nicht drin. Was wird in dem USB Strom gesendet, damit Ardu in den Programmiermode geht? Man könnte den Stream als erstes senden und gleich danach das Hexfile. Könnte...

AVRdude ist drinnen. Danke Tobias.

Ok, jetzt noch Interface hinbauen lol.

heh

:/# avrdude -p m328p -P /dev/ttyACM0 -c arduino -b 115200 -C /etc/avrdude.conf -U flash:w:/tmp/Blink.cpp.hex 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/tmp/Blink.cpp.hex"
avrdude: input file /tmp/Blink.cpp.hex auto detected as Intel Hex
avrdude: writing flash (1018 bytes):

Writing | ################################################## | 100% 0.17s

avrdude: 1018 bytes of flash written
avrdude: verifying flash memory against /tmp/Blink.cpp.hex:
avrdude: load data flash data from input file /tmp/Blink.cpp.hex:
avrdude: input file /tmp/Blink.cpp.hex auto detected as Intel Hex
avrdude: input file /tmp/Blink.cpp.hex contains 1018 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.13s

avrdude: verifying ...
avrdude: 1018 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

und

:/# avrdude -p m328p -P /dev/ttyACM0 -c arduino -b 115200 -C /etc/avrdude.conf -U flash:w:/tmp/_433MHzThermometer
_startarray_dewpoint_TR703N.cpp.hex 

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex"
avrdude: input file /tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex auto detected as Intel Hex
avrdude: writing flash (7032 bytes):

Writing | ################################################## | 100% 1.15s

avrdude: 7032 bytes of flash written
avrdude: verifying flash memory against /tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex:
avrdude: load data flash data from input file /tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex:
avrdude: input file /tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex auto detected as Intel Hex
avrdude: input file /tmp/_433MHzThermometer_startarray_dewpoint_TR703N.cpp.hex contains 7032 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.91s

avrdude: verifying ...
avrdude: 7032 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Würd' sagen: rennt (noch manuell).

Daaaaaaaaaaaaanke, Tobias!

Jo. Nice.

Gut zu wissen, dass soetwas auch mit Wrt machbar ist =)

Yep!

Hallo,

da muss ich mich jetzt mal dranhängen.

Bin ja auch auf der Suche meinen Arduino aus der Ferne zu flashen. Hab z.Zt das Ariadne Projekt verfolgt. Ist aber noch nicht für meinen MEGA.
Das mit dem OpenWRT-Router wär mal ein ganz andere Ansatz.
Hab allerdings noch nie was damit zu tun gehabt. Werd mich mal die Woche etwas einlesen.
Welchen Router könnt ihr mir da empfehlen? Ich kenn nur die von AVM, und da ist lt. OpenWrt nur der 7170 freigegeben. Und das ist mir etwas zu teure "Hardware" für so einen Anwendungsfall.
Wenn der Router noch einen Ethernet-Hub hat, dann könnte man ja auf WiFi verzichten?. Ein Netzwerkkabel hab ich sowieso beim Arduino, da er als Webserver dient.

gruß/hk007

Moin,

empfehlen kann ich keinen, da ich nur einen habe - den WR703N. Der hat aber das große Problem, dass er nur 4MB Flash und 8MB Ram hat. Das passt's hier und da nicht. Machste da kein Extram macht es regelmäßig BOOM, da die 4MB voll sind, und Du fängst von vorne an. Jetzt hat meiner mit Extram zwar 8GB für Software, das ändert nichts an den 8MB Ram. Und die werden fast immer knapp!

Siehe Live Daten:

Hi,

danke für die Antwort.
Ein paar Fragen hab ich noch. :blush:

  • EXTRAM??? Software, die Flashspeicher auf USB-Stick emuliert???
  • Ich will das Teil ja nur dazu verwenden, um einen Arduino zu flashen. Reicht da der Flash nicht? Man braucht ja nicht alle Pakete installieren oder?
  • Evtl. nehme ich dann einen anderen Router mit mehr Flash/RAM. Der TP-Link ist halt schön klein, und es hat ihn schon jemand zum Laufen gebracht.

Generell gefragt: Ist es schwierig OpenWRT auf einen Router zu bringen? Ich bin zwar softwaretechnisch kein Anfänger, aber wenn ich auf C mit makefile anfangen muss, dann wirds auch für mich grenzwertig.
Gibts da gute Anleitungen im Netz?

gruß/hk007

Ich empfehle

http://wiki.openwrt.org/toh/tp-link/tl-wr703n

oder

http://wiki.openwrt.org

generell. Das ist alles beschrieben. Kompillieren musst Du nichts, da alles schon fertig - als Trunk images. Einfach im China Menü den Punkt für flashen finden und flashen :smiley: .

EDIT: Und das hier:

So ähnlich habe ich es auch gemacht.

Man muss echt aufpassen, dass der Router nicht explodiert:

Habe gerade den Ardu geflasht. Da hatte ich noch knapp 1MB frei :astonished:. Nach dem Reboot waren es wieder um 5MB XD.

Hi,

seltsam... so ein Auf und Ab wegen der paar kb für den Arduino.
Die Grafik hab ich mir lange anschauen müssen, um zu verstehen, daß hier der freie RAM angezeigt wird.

Auf deinem Blog hab ich gesehen, daß du jede Menge Zeugs an dem Router dran hast.
Das machts wohl nicht schlanker :wink:

Brauche ich nur zum Flashen eines Arduino eigentlich einen externen USB-Stick? Dann muss ja auch gleich noch ein USB-HUB mit dran.
Wobei ich irgendwo gelesen habe, daß der USB2.0-Port des Routers Probleme mit USB 1.x Teilnehmern hat, und man aus dem Grund schon einen USB-HUB dranhängen soll.

Wo muss den eigentlich das Hex-File für den Arduino zum Flashen abgelegt werden?
Nach deinem Code liegt es auf Laufwerk W: Ist das auf deinem Rechner, oder auf dem Router?

:/# avrdude -p m328p -P /dev/ttyACM0 -c arduino -b 115200 -C /etc/avrdude.conf -U flash:w:/tmp/Blink.cpp.hex

Das mit dem USB 1.x und 2 weiß ich jetzt nicht. Ich habe den Hub dran weil, wie Du richtig sahst, allerhand Kram am WR habe. Und auch richtig: das nimmt Speicher. Wenn Du nur den Ardu dran haben möchtest reicht vieleicht(???) der Speicher aus. Habe ich nicht getestet, da ich gleich den USB Stick als Extram gemountet habe.

Das .hex File kopiere ich nach /tmp/. Damit also ins Ram, da /tmp/ im Ram gemountet ist. Bei Linux gibt es keine Laufwerksbuchstaben. Das :w: bedeutet, dass Du schreiben möchtest.

Bei Linux gibt es keine Laufwerksbuchstaben. Das :w: bedeutet, dass Du schreiben möchtest.

Ok ok, peinlich, aber für einen Windows-User sah es wie ein Laufwerk aus. Ja, die slashes sind anders, aber des Nächtens seh ich nicht mehr so gut.

Ich hab mir auf alle Fälle mal so eine TP-Link geordert, und werde es testen.
Darf ich mich bei (sicher auftretenden) Fragen melden?

Sicher. Immer her damit...

Kannst Dich ja in einem Monat melden. Vorher wird der Chinese Import nicht hier sein.

DE8MSH:
Sicher. Immer her damit...

Kannst Dich ja in einem Monat melden. Vorher wird der Chinese Import nicht hier sein.

Teil war nach 6 Tagen bei mir :stuck_out_tongue:
Heut hab ich mir mal etwas Zeit genommen:
Und schon gehts los:

  • Das Teil hab ich nicht auf der TP-Link Hompage gefunden :frowning: Da gibts nur einen 702N
  • Im Internet hab ich dann die default IP entdeckt: 192.168.1.1. Göttlich. Genau die meiner Fritz!Box.....
  • Und jetzt das Beste: Die Weboberfläche ist auf Chinesisch. Strrrrrrrrrike. Na ja, nach etwas Suche hab ich die IP umstellen können, damit ich meine Fritz!Box wieder frei bekomme.

Vllt find ich noch die Umstellung auf eine lesbare Sprache. Oder ich hol mir mal die nette Bedienung aus unserem China-Restaurant nach Hause. :stuck_out_tongue:


OK, man kann die Menus mit copy/paste in den google translator eingeben.
Aber eine englische Firmware wär doch nicht schlecht.
Wobei: es soll ja eh eine andere drauf. Mal schauen, wie ich das hinkriege.


Update:
OpenWrt ist drauf. Dank dieser Anleitung: Install OpenWRT on TPlink WR703N - XinCheJian


Update:
Luci läuft auch. War etwas tricky. da ich kein WLAN definiert habe, und meinem LAN Interface noch nen Gateway und DNS geben musste, damit er das Package aus dem Internet geholt hat.
Das mit dem restorefactory hab ich auch mal gemacht.

to be continued......

Zu dem Speicherproblem:

Du schreibst was von 4MB.

Wenn ich mit der GUI drauf schaue, dann versteh ich das nicht ganz: (siehe Screenshot)

So,jetzt bräucht ich aber doch nochmal Hilfe:

  • Wie bringe ich das avrdude package auf den Router?
  • Den Flash-Befehl kann ich ja aus deinem oberen Post übernehmen oder? Natürlich angepasst an mein HEX-File.

Das .hex File kopiere ich nach /tmp/. Damit also ins Ram, da /tmp/ im Ram gemountet ist.

Womit kopierst du? FTP-Server ist ja keiner drauf.

Gruß/hk007

Ich würde mal darauf tippen, dass er via SFTP, also z.B. mit WinSCP kopiert =)

Moin Meissers,

stimmt. Es waren 32 MB :D.

Antwort: ja, ich habe einen FTP Server drauf. Den VSFTP: opkg update, opkg install vsftp sollte gehen. Und den avrdude mit opkg update, opkg install avrdude.

Ich habe den aber meistens ausgeschalten, den VSFTP dienst. Nur wenn ich mal was schaufeln muss starte ich ihn mit /etc/init.d/vsftp start.
Du kannst es aber auch mit scp kopieren, wie Manawyrm sagt.

Und: klar kannst Du o.g. Flashzeile nehmen. Gehört doch nicht mir lol.

Aber pass auf: Speicher kann explodieren. In dem Fall fängt man von vorne an zu flashen.

Übrigens: sobald Du mit passwd ein Passwort für den User root vergibst ist telnet ausgeschaltet und Du kommst nur noch mit ssh root@routernameoderipadresse auf die shell.

Hi,

bad news:

root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
Inflating http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/barrier_breaker.
root@OpenWrt:~# opkg install avrdude
Installing avrdude (5.8-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/avrdude_5.8-1_ar71xx.ipk.
Installing libncurses (5.7-5) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libncurses_5.7-5_ar71xx.ipk.
Installing terminfo (5.7-5) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/terminfo_5.7-5_ar71xx.ipk.
Installing libreadline (6.2-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libreadline_6.2-1_ar71xx.ipk.
Installing libusb (0.1.12-3) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libusb_0.1.12-3_ar71xx.ipk.
Configuring terminfo.
Configuring libreadline.
Configuring libncurses.
Configuring libusb.
Collected errors:
 * pkg_write_filelist: Failed to open //usr/lib/opkg/info/avrdude.list: No space left on device.
 * opkg_install_pkg: Failed to extract data files for avrdude. Package debris may remain!
 * opkg_install_cmd: Cannot install package avrdude.
 * opkg_conf_write_status_files: Can't open status file //usr/lib/opkg/status: No space left on device.
root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.3M      1.2M     72.0K  95% /
/dev/root                 1.5M      1.5M         0 100% /rom
tmpfs                    14.1M      2.3M     11.9M  16% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock3            1.3M      1.2M     72.0K  95% /overlay
overlayfs:/overlay        1.3M      1.2M     72.0K  95% /

Hmmmm. doch Speicherproblem?
Wobei er doch in /tmp noch 11,6MB frei hat.
Aber was ist Flash und was ist RAM?

Könnte man nicht einige Module deinstallieren? Aber da stellt sich die Frage, was ist unnötig, und wieviel Speicherplatz bringt es.

Yepp, speicher voll - Flashspeicher. Du kannst aber, wie geasgt, einen USB Stick als extram einbinden. BTW: luci frisst auch viel Speicher weg. Braucht Du luci? Nachdem Du alles einstelltest eigentlich nicht, oder? Klar, schöner ist's mit Webinterface.