Archiv verlassen und diese Seite im Standarddesign anzeigen : Diskussion zum RP6 M256 WIFI Modul
Hallo,
in diesem Thread kann über die RP6-M256-WIFI Modul Testaktion diskutiert werden.
Newsartikel zum Modul:
https://www.roboternetz.de/community/threads/58160-Funk-Erweiterungsmodul-für-den-RP6-und-RP6v2-Gratis-für-Tester!
(hier darf auch allgemein diskutiert werden)
Testaktion:
https://www.roboternetz.de/community/threads/58161-Kostenlose-RP6-M256-WIFI-Module-für-Testanwender!
MfG,
SlyD
radbruch
11.06.2012, 20:23
Hallo
Prima Aktion. Das Wifi-Modul mit dem potenten Mega256 fletscht die Zähne.
Hoffentlich ist die Library wieder im gewohnten Arexx-Standart programmiert und nicht so freudlos hingeschludert wie beim Arm oder beim Caterpillar.
Gruß
mic
debegr92
11.06.2012, 20:29
Schade dass nur RP6-Besitzer bei der Testaktion mitmachen dürfen. Klar, man soll ja das Gerät direkt am Orginal testen, aber sicherlich gibt es auch Bastler die sich nur dieses Modul kaufen und es in ihren Projekten einsetzen.
Ich finde es sehr ok wenn es zunächst am RP6 gestetet wird, debegr92. Immerhin ist das die Zielgruppe - auch wenn das Modul anderweitig verwendbar und vielleicht als Standalone noch viel öfter verkauft wird. Fragen wie die I2C Kopplung, Slavesoftware der Basis in Verbindung mit dem Master auf dem M256, Busprobleme wegen unterschiedlicher CPU-Speed, IRQ Probleme usw... kann man nun mal nur mit einem RP6 als "Untersatz" testen. Ich denke, es ist auch eine Geste an die Entwickler hier im Forenteil und das geht absolut in Ordnung. Für alle anderen isses ja auch wohl bald zu erwerben.
Gruß Rolf
debegr92
11.06.2012, 21:51
Klar auf jeden Fall, werde mir das Teil aber auch mal ansehen, verbauen kann man das sicherlich mal irgendwo ;-)
robo_tom_24
11.06.2012, 23:35
RP6 Besitzer... - gelten auch Besitzer vom Fahrgestell? ;)
Wär schon noch was cooles wenn mein Robo BT und WLAN hat....ach die Ideen gehn ja nie aus, nur das Geld :?
Hallo,
das Modul kann auch ohne die RP6 Elektronik eingesetzt werden, aber man benötigt noch ein USB Interface mit FT232. Das ist beim RP6 ja mit dabei. Darüber läuft die Konfiguration der WLAN Einstellungen über den RobotLoader. Muss man natürlich nur einmal machen wenn sich was ändert (wie das aktuell ausschaut könnt Ihr euch übrigens hier schon ansehen: https://www.roboternetz.de/community/threads/58168-RobotLoader-2-3a ).
Ein kompatibles Interface gibt es mittlerweile auch einzeln (etwas anders als das RP6 Interface). Kann man sich prinzipiell auch selbst basteln wenn man schon eine Platine mit dem FT232 da hat...
Für den Fall, dass wir nicht genug Tester zusammen bekommen sollten, könnte ich das notfalls aber noch mit dazu geben und die Teilnahme für alle öffnen ;-)
MfG,
SlyD
Das wär natürlich Klasse :D
Habe aber auf jeden Fall mal Fabian E. zum Thread eingeladen, vielleicht will er ja seine Remotrol auf die M256 adaptieren.
Grüße
Hallo,
ich bin sehr interessiert an einer Teilnahme, jedoch habe ich dazu ein paar Fragen:
- Ich habe noch keine 20 Beiträge, ist das ein Problem?
- Gibt es eine Art "Deadline" für eine Realisierung des Projekts? Oder kommt es euch eher auf konstruktives Feedback von den Testern an?
- Welche weiteren Anforderungen gibt es an die Tester/das Projekt? Kann man das Modul nach dem Test behalten?
Noch ein paar Infos zum Projekt:
Ich plane derzeit eine Software, mit der der RP6 komplett vom PC aus ferngesteuert werden kann.
Der Roboter soll hierbei nicht primär über eine Benutzeroberfläche gesteuert werden, sondern per Java-Programm.
Nach erfolgreicher Beendigung wird das Projekt natürlich als Open Source veröffentlicht.
Mein RP6 hat derzeit folgende Hardwarekonfiguration:
- RP6V2 Base (Slave-Modus)
- RNControl 1.4 mit modifizierter RP6Lib
- LCD03
- SRF08
- CMPS03
- BTM222 zur drahtlosen Kommunikation
- Sharp GP2D12
- 1 Servo
Das Ganze soll komplett in Java geschrieben werden, momentan ist eine Kommunikation über ein BTM222-Modul vorgesehen.
Dies hat den Nachteil, dass es keine universelle, wirklich(!) plattformunabhängige COM-Library für Java gibt - daher arbeite ich momentan an einer Implementierung in C.
Ein Bluetooth-Modul würde dieses Problem sehr elegant umgehen: Hier müsste eine Art (Web-)Server auf dem Wifi-Modul implementiert werden, durch welchen der RP6
seine Befehle empfängt. Im Gegensatz zur seriellen Schnittstelle wird eine Netzwerkkommunikation von Java direkt unterstützt, daher wäre das Programm wieder wirklich plattformunabhängig.
Das Ziel wäre daher:
- Realisierung einer Client-Server-Architektur zwischen RP6 und PC.
- Entwurf eines Kommando-Protokolls, das verschiedene auf dem RP6 ausführbare Kommandos abstrahiert und dem Anwender in seinem Programm zur Verfügung stellt.
Vorerst soll nur die oben aufgeführte Hardware unterstützt werden, allerdings ist ein Plugin-System für Sensoren/Aktoren geplant.
Auf dem RP6 muss man das natürlich selbst umsetzen - alternativ könnte die Command-Struktur natürlich auch das I2C-Protokoll über Wifi brücken...
- Umsetzung einer Java-Library zur Steuerung des RP6 vom PC aus
Hallo,
> Kann man das Modul nach dem Test behalten?
Ja :)
> - Ich habe noch keine 20 Beiträge, ist das ein Problem?
> - Welche weiteren Anforderungen gibt es an die Tester/das Projekt?
Es werden aktive Benutzer im Forum / Wiki bevorzugt und keine Neulinge die sich evtl. sogar nur wegen dieser Aktion hier registriert hätten.
Es nutzt niemandem wenn das Modul bei jemandem landet der es nach drei Tagen in den Schrank stellt bzw. nicht an den Diskussionen im Forum teilnimmt.
Jemand mit wenig Postings ist entweder gerade frisch registriert, oder bislang nicht sonderlich aktiv im Forum gewesen.
Ich überlege mal bis Ende nächster Woche ob man vereinzelt(!) Ausnahmen machen könnte wenn jemand gute Ideen mit ausführlicher Beschreibung vorlegt und seit einigen Jahren im Forum registriert ist. Mal schauen, müsste ich auch noch mit Frank diskutieren.
Kommt auch drauf an wieviele Bewerber es geben wird, wenn es viele sind, werden sicherlich diejenigen die die Vorgaben erfüllen Vorrang bei der Vorauswahl bekommen...
Und es wird dann ja wie angekündigt noch eine Abstimmung darüber geben an der sich alle Roboternetz User beteiligen können - alle anderen RN User können also mitentscheiden wer ein Modul bekommen wird.
> - Gibt es eine Art "Deadline" für eine Realisierung des Projekts?
> Oder kommt es euch eher auf konstruktives Feedback von den Testern an?
Die vorgeschlagenen Anwendungen müssen nicht voll funktionsfähig implementiert werden.
Es wäre schön, aber der Weg ist das Ziel. Wenn man auf dem Weg dahin feststellt, dass es so nicht funktioniert oder man vielleicht zwischenzeitlich eine andere Idee bekommen hat, darf man auch gerne was völlig anderes damit anstellen. Das ist überhaupt nicht kritisch.
Die Dinge die Du vorschlägst wären schon interessant!
Ich vermute Du zielst hier darauf ab die Intelligenz auf den PC auszulagern, richtig?
MfG,
SlyD
Wollte nur mal eben meine Empfehlung für FabianE. posten :D wenn das erlaubt ist...
Ist schon lange Mitglied, hat keine-Ahnung-wie-viele Posts und hat immerhin die Remotrol komplett für alle als Open Source online gestellt und sogar ein Entwicklerforum eröffnet und die Programme stets weiterentwickelt nach den Wünschen von uns Usern.
Und - ich bin da nicht ganz uneigennützig - ich würde mich freuen, wenn es ein Programm für die Remotrol Für die M256 geben würde ;)
Grüsse!
Steht denn mittlerweile fest, was das Modul kosten soll (eine grobe Schätzung würde mir auch helfen) und ab wann es regulär bei Conrad DE lieferbar sein soll?
Weiterhin wäre es sehr interessant zu wissen, welcher Chip eigentlich für das WLAN verantwortlich ist. In der Beschreibung steht zwar, dass dieser Chip sich um die Netzwerkprotokolle kümmert,
aber nicht, welche Protokolle von Haus aus unterstützt werden, welche Übertragungsgeschwindigkeiten der ATMega schafft und wie wir den Chip letztendlich ansteuern können, d.h. ob sich der Chip anwenderseitig wie ein UART verhält oder nicht.
Grüße,
Max Web
Hallo,
ach entschuldige ganz übersehen das hier noch eine neue Antwort war ;-)
Für weitere Infos siehe auch hier:
http://www.arexx.com/forum/viewtopic.php?f=19&t=1797
den Text hatte ich für die News im RN etwas abgekürzt.
Das WLAN Modul lässt sich über die serielle Schnittstelle ansteuern.
Es gibt einen Kommandomodus und einen Daten Modus. Im Daten Modus werden die Daten weitgehend transparent durchgeleitet.
Auf dem Host kann man einfach eine normale TCP Verbindung aufbauen, das geht mit so ziemlich jeder Programmiersprache ziemlich
einfach und man kann auch z.B. Terminals wie PuTTY oder TeraTerm benutzen.
Auf das Timing der Netzwerkübertragungen muss man aber achten - die Daten werden in Pakete aufgesplittet und
übertragen, was etwas Zeit benötigt.
Die Baudrate kann eingestellt werden, maximal sind 500kBaud möglich.
Der RP6 Bootloader verwendet per USB Kabelverbindung die gleiche Baudrate von 500kBaud.
Das Modul sendet die Daten per TCP/IP und mit AES Verschlüsselung.
Es hat auch Modi für UDP, NTP, FTP Client, HTTP Client (nicht Server) und ein paar andere.
Davon wird in den Beispielen aber nur die normale TCP Verbindung genutzt, ein sehr einfaches
HTTP Webserver Beispiel für den ATMEGA ist auch mit dabei.
> ab wann es regulär bei Conrad DE lieferbar sein soll?
Eine erste kleine Serie befindet sich aktuell in Produktion.
Wann die fertiggestellt sein wird ist nicht genau bekannt (da gibts viele Variablen ;-) ).
Bis diese dann hier eintreffen und bei Conrad im Webshop verfügbar werden, wird aber
noch etwas Zeit vergehen.
Preise darf ich leider noch nicht mitteilen da Conrad den Endpreis festlegt.
Es wird aber natürlich teurer als z.B. das RP6-CCPRO M128 Modul mit C-Control Unit, es hat ja
eine viel umfangreichere Ausstattung.
MfG,
SlyD
Weiterhin wäre es sehr interessant zu wissen, welcher Chip eigentlich für das WLAN verantwortlich ist.
Ich könnte mir vorstellen, dass es eine WLAN-Bridge von WIZNet ist.
Beilspielsweise : WizFi210 (http://shop.wiznettechnology.com/Sub_Modules/en/product/detail_page.asp?cateid=52&pid=1132)
Sieht man ja auf den Bildern das es nicht das von Wiznet sein kann ;-)
Es ist ein RN-171:
http://www.rovingnetworks.com/products/RN_171
Das Wiznet kann übrigens nur 802.11b und nicht 802.11g.
Auf die nutzbare Übertragungsrate in dieser Anwendung hat das keinen Einfluss, aber modernere
Geräte müssten wegen des einen 802.11b Geräts im langsamen Übertragungsmodus laufen.
MfG,
SlyD
Hallo,
ich habe gerade gesehen, dass dieses Modul neben UART auch SPI unterstützt. Wie ist es auf dem Board angeschlossen?
Max Web
Nein ist nicht angeschlossen. Der Hersteller hatte zum Start der Entwicklung noch gar keine passende Firmware die SPI unterstützt hätte. Auch jetzt ist noch keine veröffentlicht (das ein Modul eine bestimmte Schnittstelle hat, heisst erstmal nicht viel, der Hersteller muss auch die Software dafür anbieten... ).
Da das noch einige weitere 5V <-> 3.3V Levelshifter auf dem Modul erforderlich gemacht hätte, wurde das weggelassen.
MfG,
SlyD
Hallo
In der Beschreibung beim Conrad steht: "Passend für RP6 V2 Robotersystem"
Ist es wirklich nur für die zweite Version oder ist das nur Irrtum?
Der RP6v2 ist kompatibel zum RP6. Damit kann die M256 WiFi auf beiden Robotern eingesetzt werden.
Ok, danke :) War bloß etwas unklar.
Eine andere Frage: ist ein aktiver USB-Host an dem Controller realisierbar? z.B für einen Stick oder irgend einen USB-Gerät?
Ich überlege nur. Die meisten WLAN router können schon USB und kosten dabei bei weitem nicht so viel. Klar, die ganzen Features und I/Os lassen sich schon zahlen, aber die sind für meine zwecke nicht so wichtig.
Alternativ könnte noch eine Ethernet-Schnittstelle in Frage kommen, aber USB kommt vor.
Hallo,
> WLAN Router
Ist nicht mit dem Modul vergleichbar. Dieses ist auf niedrigen Energiebedarf optimiert - und hat jede Menge I/O.
Und die I/O Ports sind natürlich Echtzeitfähig, d.h. man kann sehr schnell mit genauem Timing damit arbeiten.
Ganz nebenbei passt es mechanisch optimal auf den RP6 und hat direkt einen I2C Bus Port um diesen anzusteuern.
Es ist wirklich nicht als Server für USB Sticks gedacht ;-)
USB Sticks brauchst Du eigentlich auch nicht, nimm einfach eine microSD Karte, dafür ist ja ein Slot vorhanden.
Ja SDHC Karten funktionieren auch.
Es gibt in AVRs keinen USB Host - sonst wäre der natürlich rausgeführt.
Man könnte einen USB Host Controller per SPI Bus anschließen... aber naja eigentlich nicht sinnvoll da man die meiste Peripherie die man brauchen könnte auch per UART / SPI / GPIO direkt ansteuern kann, ganz ohne USB overhead dazwischen.
MfG,
SlyD
Thorben W
28.06.2012, 13:35
Hallo geht das Modul nur an WLAN Routern oder auch an Access Points?
Thobe
Hallo,
in jedem WLAN Router ist ein WLAN Accesspoint enthalten. Der WLAN Teil ist immer ein Accesspoint, egal ob nun noch ein Netzwerk Router mit drin ist.
Der Hersteller des Moduls arbeitet zur Zeit übrigens sogar an einer Firmware, die das Modul selbst als Accesspoint erscheinen lässt - dann braucht man im Prinzip gar keinen AP mehr dazu. Aber das ist noch in der Entwicklung...
MfG,
SlyD
Thorben W
28.06.2012, 13:53
Danke SlyD
Dann bin ich mal gespannt.
Thobe
Wenn das in Firmware ist, wird man da ein Update durchführen können? Ich denke, das ist nicht so einfach, wie den uC flashen, oder?
Grüsse
Filou
Hallo,
doch ist ganz einfach, das Modul kann die neue Firmware einfach per FTP übers Netzwerk laden. Im RobotLoader 2.x ist sogar ein kleiner mini FTP Server integriert (der nur kurz gestartet wird um das Firmware Update durchzuführen). Das ist momentan nur in eine Testroutine integriert, wird aber später auch allgemein nutzbar gemacht dann kann man die Firmware per Mausklick updaten (klappt natürlich nur wenn die Netzwerkeinstellungen korrekt sind). Das Modul hat auch immer noch die orginale Firmware im Flash gespeichert, also kann man im Falle von Problemen mit der neuen Firmware einfach auf die alte zurück wechseln.
Man kann auch direkt vom Server des Modulherstellers eine neue Firmware installieren - das WLAN Modul hat eine Kommandozeile wo man das per Textbefehl manuell durchführen kann.
MfG,
SlyD
Das klingt gut - noch einfacher geht es wirklich nicht ;)
Noch eine Frage zu den SD-Karten: Beim Raspberry PI gab es ja das Problem, dass nicht alle SD-Karten kompatibel sind. Ist dies hier auch der Fall? Wie sieht es mit der maximalen Größe der SD-Karte aus - ist diese irgendwie limitiert?
Grüße,
Max
Hallo,
es wird eine Open Source Library zur Ansteuerung der SD Karten verwendet - der AVR hat wie die meisten Mikrocontroller natürlich keinen SD Controller integriert (der irgendwelche Hardware Bugs wie bei dem Broadcom SoC enthalten könnte...) sondern steuert die Karten im SPI Modus an.
Es werden normale SD und auch SDHC Karten unterstützt. Also theoretisch bis 32 GByte, aber das wurde noch nicht getestet.
Die größte microSD Karte die erfolgreich getestet wurde war eine 8 GByte Karte von Transcend.
MfG,
SlyD
Sehr gut!
Gibt es denn mittlerweile eine (Beta-)Dokumentation bzw. Homepage zu dem Modul? Ich konnte diesbezüglich noch nichts finden, allerdings soll das Modul ab 5.7. ausgeliefert werden.
Max
Hallo,
Doku kommt nächste Woche.
> allerdings soll das Modul ab 5.7. ausgeliefert werden.
Warum Conrad das schreibt weiss ich nicht - Schätzwert vermutlich.
Ich kann Dir garantieren das es nächste Woche noch nicht lieferbar sein wird.
s.
https://www.roboternetz.de/community/threads/58160-Funk-Erweiterungsmodul-f%C3%BCr-den-RP6-und-RP6v2-Gratis-f%C3%BCr-Tester!?p=552678&viewfull=1#post552678
MfG,
SlyD
radbruch
29.06.2012, 18:08
Doku und Libraries würden mich auch interessieren. Auch von den anderen drahtlosen Platinen die neu angeboten werden...
Gruß
mic
Genau!
Habe mir gerade überlegt, mir die mal runterzuladen und schon einmal anzusehen. Aber (noch) findet man nix.
Modul sollte jetzt (laut dem C) am 10.7. rauskommen...
Wäre klasse, wenn man sich - wie bei den anderen Modulen - schon mal die Libs und vielleicht sogar Beispielprogramme ansehen könnte!?!?!?
Weißt du da was, SlyD?
Mich würde in erster Linie die SD-Kartenansteuerung interessieren.
Grüße
Hm, also ich bezweifle jetzt mal, dass die Module schon ab dem 10. ausgeliefert werden, sonst würde die Testaktion ja keinen wirklichen Sinn machen, da sonst genug Tester zur Verfügung stehen würden.
Das mit der SD-Karte ist sehr interessant, da diese über den SPI-Bus ansprechbar sein soll. Wie sieht es dann eigentlich mit dem Anschluss weiterer SPI-Hardware aus? Muss diese per Software-SPI angesprochen werden?
Wäre es eventuell möglich, die bisherigen Libs als Beta-Libs im RN-Wissen zu verlinken?
Weiterhin wäre es noch interessant zu wissen, ob das Modul noch über einen USERBUS verfügt.
- Max
radbruch
07.07.2012, 19:55
...sonst würde die Testaktion ja keinen wirklichen Sinn machenWelche "Testaktion"? SlyD verschenkt die gebrauchten Prototypen, von "testen" habe ich ich dabei nichts gelesen.
Testaktion: Kostenlose RP6v2-M256-WIFI Module!
Einige RP6v2-M256-WIFI Module* stehen bereit um kostenlos an Testanwender
vergeben zu werden, die sich gerne damit beschäftigen und darüber berichten würden.
Diese.
Es wäre aber trotzdem gut, wenn die Module schon bald rauskommen.
Max
Hallo,
"verschenken" nicht ganz, Bedingung ist natürlich etwas damit umzusetzen (was genau spielt aber keine Rolle wie schon gesagt) und sich an der Diskussion im Forum zu beteiligen oder was ins Wiki zu schreiben.
Nochmal zur Lieferzeit der normalen Module:
Wie ich schon mehrfach geschrieben habe ist die Lieferangabe bei Conrad nicht korrekt. Die Module werden diese Woche sicherlich nicht mehr lieferbar, evtl. nächste oder übernächste.
Das mit der SD-Karte ist sehr interessant, da diese über den SPI-Bus ansprechbar sein soll. Wie sieht es dann eigentlich mit dem Anschluss weiterer SPI-Hardware aus? Muss diese per Software-SPI angesprochen werden?
Wäre es eventuell möglich, die bisherigen Libs als Beta-Libs im RN-Wissen (http://www.rn-wissen.de/index.php/Hauptseite) zu verlinken?
Weiterhin wäre es noch interessant zu wissen, ob das Modul noch über einen USERBUS verfügt.
Die SD Karte hat ihren eigenen SPI Bus - ist aber auf dem ISP Stecker zugänglich.
Es gibt aber noch zwei weitere Hardware SPI Busse auf den Erweiterungssteckverbindern (dual UART / SPI Ports).
Doku folgt noch diese Woche - hatte leider viel zuviel anderes zu tun bin noch nicht dazu gekommen.
USRBUS hatten wir ja schon in einem anderen Thread geklärt. Ist kein Platz für gewesen wegen des
WLAN Moduls und der vielen Schnittstellen. Der USRBUS ist ja eh frei vom Anwender belegbar.
Lösung ist daher einfach: Experimentierplatine als Adapter verwenden bei Bedarf.
MfG,
SlyD
TrainMen
11.07.2012, 13:02
SlyD schrieb:
Wie ich schon mehrfach geschrieben habe ist die Lieferangabe bei Conrad nicht korrekt. Die Module werden diese Woche sicherlich nicht mehr lieferbar, evtl. nächste oder übernächste.
Conrad hat die Lieferzeit auf September verschoben.
mfg TrainMen
So jetzt noch ein letztes mal: Die Angabe im Conrad Shop ist frei erfunden ;-)
Die aktuelle Bedienungsanleitung ist nun übrigens hier:
www.arexx.com/rp6/downloads/RP6_M256_WIFI_MANUAL_DE_20120711.zip (http://www.arexx.com/rp6/downloads/RP6_M256_WIFI_MANUAL_DE_20120711.zip)
zu finden.
Sind 60 Seiten und natürlich wieder als Zusatz zur RP6 Anleitung gedacht, d.h. die schon vom RP6 bekannten Dinge
werden nicht nochmals erklärt.
MfG,
SlyD
Sieht gut aus, auch die Beispielprogramme sehen sehr vielversprechend aus!
Ein Beispielprogramm, das die M32 ansteuert, wäre insbesondere für Anfänger auch interessant,
allerdings kann man sich so ein Programm auch schnell selbst schreiben.
Jap, gefällt mir!
Bin schon sehr gespannt.
Ein paar Programme zur Kommunikation mit den beiden anderen Modulen M32 und M128 wären echt super gewesen! Vielleicht kommt das ja noch!?
Mir gehts dabei vor allem um die Slave-Programme :D
Fabian E.
11.07.2012, 18:20
Klingt alles super :) Jetzt muss ich mich nur entscheiden, welcher Controller der Master wird :confused:
Prinzipiell eigentlich ja immer noch die M128 zwecks Debugging....
Hm, schwere Entscheidung :D
Ein Beispielprogramm, das die M32 ansteuert, wäre insbesondere für Anfänger auch interessant,
allerdings kann man sich so ein Programm auch schnell selbst schreiben.
Ich habe gerade solch ein Programm gefunden: Die M32 Slave in der Remotrol wäre für Besitzer der M32 wohl sehr interessant - vielleicht sollte das in die Lib aufgenommen werden?
Ich selbst verwende statt der M32 ein RNControl, mein Code sieht jedoch sehr ähnlich aus.
Hallo,
das RP6Base Slave Programm lässt sich natürlich für die M32 anpassen.
Was man genau braucht ist jedoch stark vom jeweiligen Projekt abhängig - also was für Sensoren/Aktoren genau an der M32 angeschlossen sind.
Je nachdem braucht man andere Register usw.
Bei der RP6Base ist das klarer definiert, da ja viele Standard Sensoren vorhanden sind.
Das Grundgerüst kann aber einfach von der Base übernommen werden. Sieht dann ähnlich aus wie das Remotrol Programm.
Ja prinzipiell könnte man sowas auch direkt mit in die Lib aufnehmen. Mal sehen.
Die Ansteuerung davon ist dann sehr ähnlich - abgesehen davon das man einen anderen Interrupt Pin für die Benachrichtigung des Masters bei Sensoränderungen wählen sollte.
MfG,
SlyD
Also in der Remotrol von Fabian E. ist ein Spitzen-Slave für die M32 drin. Dennoch fände ich es klasse, wenn man für die M32 und nun auch für die M128 Slaves als Beispielprogramme rausbringen könnte, die alle ADCs ins Register eintragen und z.B. eine Lib beinhalten zum schalten von Beeper, LCD und I/Os der beiden Module! Fände ich wirklich eine nette Sache und für die Programmier-Meister aus der Arexx-Schmiede wohl bedeutend leichter und einheitlicher zu bewerkstelligen, als wenn das jeder selbst versucht... Brauchen kann diese Programme ja jeder, der die M32 UND die M 128 oder demnächst noch die M256 besitzt... Viele Grüße, Fabian
Hallo,
die Module sind ja nun unterwegs bzw. treffen so langsam bei den ersten ein.
Die aktuelle Version des RobotLoaders gibt es hier:
http://www.arexx.com/rp6/downloads/RobotLoader_20120717.zip
und die aktuellen Beispielprogramme hier:
http://www.arexx.com/rp6/downloads/RP6Examples_20120716.zip
Zu den WLAN Einstellungen gab es auch direkt eine kleine Rückfrage wegen Passwörtern die Leerzeichen enthalten.
Der Kommandointerpreter im WLAN Modul teilt alle Argumente jeweils an Leerzeichen.
Man muss daher alle Leerzeichen im Passwort durch $ ersetzen.
Sollte das Passwort Leerzeichen und $-Zeichen enthalten, muss man ein anderes Ersatzzeichen wählen.
Das geht über die Kommandozeile des WLAN Moduls mit
set opt replace $
save
reboot
... wobei das $ durch ein anderes Zeichen ersetzt werden muss also z.B. # oder + o.ä.
In der nächsten RobotLoader Version werden Leerzeichen automatisch durch $ Zeichen ersetzt werden.
Nur wenn man gleichzeitig $ und Leerzeichen verwendet, wird man noch manuell eingreifen müssen.
MfG,
SlyD
Hallo,
zwar ist der Paketdienst noch nicht gekommen, allerdings hatte ich ein wenig Zeit, mir die Library einmal genauer anzuschauen - sieht schonmal gut aus!
Allerdings ist mir aufgefallen, dass auch die Libraries der anderen Module verändert wurden - hier ist mir ein Bug in der RP6RobotBaseLib.c aufgefallen:
Die neuste Version bietet drei Varianten des Richtungswechsels an, hier steht in der aktuellen Lib
#define CHANGE_DIRECTION_FAST (Zeile 638 ).
Sollte hier nicht eigentlich das
#define CHANGE_DIRECTION_SLOW (Zeile 635) verwendet werden? Schließlich wird der RP6 auch von vielen unerfahrenen Programmierern benutzt, da kann ein unerwünschter Richtungswechsel bei voller Geschwindigkeit schonmal vorkommen.
Grüße,
Max
So, M256 ist soeben eingetroffen :D
Wie von SlyD angesprochen, hat es optisch winzige (!!!) Mängel, wirklich nicht der Rede wert.
SD-Disk funktioniert auch schon wunderbar, kein haken, kein stecken-bleiben!
Habe es gleich mal montiert, und glücklicherweise passt alles sogar mit meinem Chassis zusammen (hatte Angst, Antenne und Chassis könnten sich kreuzen.
Hier die ersten Fotos:
22823 22824 22825 22826
Jetzt geht es an die ersten Beispielprogramme und vor allem ans wlan!
Werde schreiben, wenn alles mal durchprobiert wurde!
Was gleich mal auffällt: Die grüne WLAN-Status-LED ist sowas von HELL :D
Mein Modul ist auch gerade angekommen, die Einrichtung des WLAN (mit WPA2) funktioniert einfach tadellos, der Roboter wird gleich erkannt und der Programmupload funktionier.
Der Selftest und alle Demoprogramme, die ich bisher hochgeladen habe, funktionieren ebenfalls ohne Probleme, mit dem SD-Kartenslot stimmt auch alles.
Störende optische Mängel sind mir jetzt keine aufgefallen, alle Bauteile sind korrekt verlötet - könnte man glatt als Serienmodell durchgehen lassen ;)
- Max
@MaxWeb:
Ah ja so ist das wenn man mal mit der Lib was testet und es dann nicht wieder zurück ändert ;)
Danke für den Hinweis!
> Die grüne WLAN-Status-LED ist sowas von HELL
Das wurde auf dem Serienmodell übrigens auch geändert ;)
MfG,
SlyD
PS:
Noch zur Erläuterung für alle nicht-Tester die die Mail natürlich nicht gesehen haben können:
Auf den Testmodulen ist ein anderer microSD Kartenslot verbaut als auf dem Serienmodell,
der auf dem Serienmodell ist etwas hochwertiger.
@MaxWeb und alle anderen, die helfen können:
Hast du was am Wlan-Router umgestellt? Oder wie hast du den Accesspoint eingestellt?
Ich finde nämlich gar nix. Die gelbe LED blinkt auch nach der Konfiguration weiter...
Hallo,
2.4GHz und nicht 5GHz,
SSID passend einstellen,
kein MAC Filter aktivieren oder passend einrichten,...
Passphrase korrekt?
IP Adresse DHCP oder statisch?
Aktivere mal im Optionsmenü den Passthrough modus und führe den "scan" Befehl aus.
Oder lass das Beispielprogramm 05_WLAN_CMD laufen und schau Dir an ob der Accesspoint irgendwo gefunden wird.
MfG,
SlyD
Hallo,
nein, ich habe nichts am Router umgestellt (Frequenzband ist bei mir 2,4GHz, der a-Standard läuft afaik mit 5GHz, das geht mit dem Modul nicht, Zugangsbeschränkungen ist im Router angepasst), ich habe es einfach wie in der Anleitung beschrieben konfiguriert:
Ich habe einfach das USB-Interface mit dem Modul verbunden, im Robotloader (2.3c, Version 2.3b soll einen Bug haben) Options-> Wifi Serial Config -> Configure Wifi Settings ausgewählt.
Dort habe ich dann einfach die Einstellungen meines WLANs eingegeben (feste IP, SSID des WLANs, Gateway, DNS, Verschlüsselung und Passwort), eine Device ID gewählt und den Configure-Button gedrückt.
Danach ging es problemlos.
Ein Screenshot der Einstellungen wäre hier eventuell hilfreich.
Die grüne WLAN-Status-LED ist sowas von HELL
So sieht man wenigstens von Weitem, dass alles in Ordnung ist ;)
Noch ein Edit: Hast Du eventuell Leerzeichen im Kennwort? Das kann auch Fehler verursachen!
- Max
hier mal der der Screenshot.
22827
Deine SSID lautet "M256TST" - hier gehört der Name Deines WLans hin!
Watt iss denn datt für eine IP Adresse? ;)
Im lokalen Netz nimmt man i.d.R. was im Bereich 192.168.x.x
Und Deine SSID ist noch die voreingestellte M256TST - Dein Netz heisst wirklich so?
MfG,
SlyD
Hubsi :D
Ne, Netz geändert - JUHUUU! Gelbe LED ist aus, grüne blinkt!
Hat geklappt, danke euch.
Die IP war so, hab ich aber jetzt auf die übliche geändert.
Dennoch finde ich nix im "Discover Wifi...", beim manuellen Verbinden kommt ein Timeout.
Die IP kann so stimmen - für den privaten Gebrauch gibt es drei Addressbereiche, siehe http://de.wikipedia.org/wiki/IP-Adresse#Besondere_IP-Adressen. Die SSID stimmt aber definitiv nicht ;)
Edit: Zu langsam...
Das "Discover WIFI devices" dauert manchmal etwas... BTW: Auf welcher Adresse findet hier eigentlich der Broadcast statt? Ist das die ABC.DEF.GHI.255 ?
Hast Du beim manuellen Verbinden auch den Port richtig angegeben (z.B. "192.168.2.42:2000") ?
OK aber 10.x nimmt doch niemand ;)
Naja egal.
> Dennoch finde ich nix im "Discover Wifi...", beim manuellen Verbinden kommt ein Timeout.
Was wird denn in den beiden Terminals und im Log angezeigt?
PS:
@MaxWeb: Ja ist die .255, Port 55555, der darf natürlich nicht durch eine Firewall blockiert werden.
im LOG:
Trying to open port: USB0 | RP6 USB Interface | ART5UP21USB0 | RP6 USB Interface | ART5UP21 open @38400baud
Set Comport...
Baudrate is set to: 38400
OK!
Try to get ID...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.10.171:2000
Network Connection Timeout ERROR (101) ||| Network Connection attempt timed out!
#### Network close all...
#### Network close all done!
#### DISCONNECTED
So, jetzt wars erstmals im "Discover Wifi...", ich hab geadded, aber bei Auswahl von "Connenct" commt wieder der Timeout.
Probiere mal, das Modul über einen PING zu erreichen.
Wie lauten denn andere Adressen in Deinem Netzwerk?
192.168.10.171:2000 könnte z.B. Probleme machen, wenn der normale Adressbereich 192.168.2.XYZ lautet.
Oh leck, hab da keine Ahnung!
Mein PC (der einzig andere Teilnehmer nach dem Internetrouter) hat ne automatische IP-Adresszuteilung. Sie lautet 192.168.1.2
Das sollte doch aber nicht unbedingt das Problem sein, oder?
So, etz hats gefunzt :D
Zuerst ist der Loader abgeschmiert, dann hab ich alles nochmal neu gemacht und nun klappts auch!!!!
Sorry für die umstände :|
EDIT: Jetzt wird auf Teufel komm raus getestet ;)
Oh leck, hab da keine Ahnung!
Hier werden Sie geholfen: http://de.wikipedia.org/wiki/Netzmaske
;-)
Fabian E.
17.07.2012, 19:25
Okay, ich der Loader kann sich mit meinem Modul leider auch nicht verbinden.
WiFi klappt ist verbunden und auch der UDP broadcast vom RP6 kommt an (Port 55555).
Der Loader "sieht" den RP6 also auch wenn ich nach ihm suche.
Verbinden via TCP schlägt jedoch immer mit einem TimeOut fehl.
Ich habe in der Firewall mal extra Regel sowohl für die benutzen Ports als auch für den Loader selbst erstellt.
Leider kein Erfolg.
Log des RP6 zeigt ohne Frage, dass er korrekt verbunden ist (sieht man ja auch am UDP)
Keine Ahnung was ich noch versuchen soll :)
Werde dann wohl mal ein paar Test via Kabel machen :D
EDIT: auf mein ping reagiert der RP6 auch nicht. ( sollte er?)
> EDIT: auf mein ping reagiert der RP6 (http://www.rn-wissen.de/index.php/RP6) auch nicht. ( sollte er?)
Doch das sollte er!
Wenn schon ein Ping nicht klappt, kanns mit dem RobotLoader auch nicht gehen.
Das Problem liegt also irgendwo in den Netzwerk Einstellungen / Firewall.
Fabian E.
17.07.2012, 19:34
Ja, davon gehe ich auch aus. Ich habe manuell Port 2000 freigegeben und auch alles für den RobotLoader erlaubt...
Blödes Windows :)
Hat der RP6 irgendeine "ping" funktionalität mit der ich mal testen kann?
Ja auf der WLAN Kommandozeile einfach ping 192.168.x.x eingeben.
Poste vielleicht auch mal Infos zu Deinen Netzwerk Einstellungen, evtl. fällt mir da ja was auf.
get wlan
get ip
PS:
WLAN Kommandomodus musst Du mit .$$$ aktivieren wenn der Bootloader im Passthrough Modus ist.
Fabian E.
17.07.2012, 20:01
# get ip
get ip
IF=UP
DHCP=ON
IP=192.168.0.110:2000
NM=255.255.255.0
GW=192.168.0.1
HOST=0.0.0.0:2000
PROTO=TCP,
MTU=1524
FLAGS=0x6
TCPMODE=0x0
BACKUP=0.0.0.0
<2.32>
# get wlan
get wlan
SSID=Home
Chan=7
ExtAnt=0
Join=1
Auth=MIXED
Mask=0x1fff
Rate=8, 6 Mb
Linkmon=5
Passphrase=******
TxPower=0
<2.32>
# ping 192.168.0.101
ping 192.168.0.101
Ping try 192.168.0.101<2.32>
Ich nutze DHCP mit fixer Adresszuweisung im Router.
Mit meinem Laptop klappt es übrigens auch nicht, also wohl eher ein Router Problem.
Wie sieht eigentlich das "Protokoll" aus, mit dem der RobotLoader mit dem Bootloader kommuniziert?
D.h. was kann ich an den Bootloader senden, um Infos wie im Status-Bereich des Roboters zu erhalten (FW-Rev, Board-Name etc) und was muss ich senden, um ein Programm zu starten/stoppen?
- Max
Fabian E.
17.07.2012, 20:03
Wie sieht eigentlich das "Protokoll" aus, mit dem der RobotLoader mit dem Bootloader kommuniziert?
D.h. was kann ich an den Bootloader senden, um Infos wie im Status-Bereich des Roboters zu erhalten (FW-Rev, Board-Name etc) und was muss ich senden, um ein Programm zu starten/stoppen?
- Max
Schau dir mal den Quellcode meines FlashWriters an. Da ist das alles drin :)
> Mit meinem Laptop klappt es übrigens auch nicht, also wohl eher ein Router Problem.
Jep.
Probier doch mal statische IPs.
> und was muss ich senden, um ein Programm zu starten/stoppen?
Starten geht mit
start_program
Reset auslösen (= Stoppen) geht per WLAN Kommandos.
Der Reset Pin ist mit einem GPIO des WLAN Moduls verbunden.
set sys output 0x0080 0x0080
set sys output 0x0000 0x0080
MfG,
SlyD
Schau dir mal den Quellcode meines FlashWriters an. Da ist das alles drin :)
Stimmt, alles kompakt und verständlich aufgeführt - interessantes Projekt!
Fabian E.
17.07.2012, 20:42
Auch eine statische IP hilft leider nicht. Wie kann man eigentlich den Port ändern? Wenn ich die default 2000 ändere passiert nichts. Wird auch nicht übertragen zum Wifi Modul.
> Auch eine statische IP hilft leider nicht.
Tja, ist irgendwas anderes im Router aktiviert was probleme bereiten könnte?
(MAC Filter, Firewall, kann man im Router anzeigen was für Geräte damit verbunden sind?)
Kannst Du den Router vom Notebook aus anpingen (also im WLAN an die Adresse des Routers, nicht übers Kabel)?
Geht das auch vom WLAN Modul aus?
Was für ein Router Modell / Hersteller ist es denn?
> Wie kann man eigentlich den Port ändern?
Schau her, die Einstellung ist tatsächlich deaktiviert gewesen (muss man eigentlich so gut wie nie ändern).
Kommt dann in der nächsten Version.
Bis dahin:
set ip localport 2000
save
reboot
Fabian E.
17.07.2012, 21:13
Ping klappt überall, Laptop -> Router, Laptop -> Desktop Rechner, nur der RP6 will nicht.
Router ist ein D-LINK DIR 600. MAC Filter ist nicht aktiv.
Wie soll denn ein funktionierender Ping auf dem Wlan Modul aussehen? (die Ausgabe)
Reagiert der RP6 denn überhaupt auf einen normalen Ping, ausgeführt auf der Windows-Kommandozeile oder geht auch das nicht?
Fabian E.
17.07.2012, 21:24
Reagiert der RP6 denn überhaupt auf einen normalen Ping, ausgeführt auf der Windows-Kommandozeile oder geht auch das nicht?
Nein, auf ein normales ping antwortet der RP6 nicht.
ping 192.168.10.2
Ping try 192.168.10.2
<2.32>
64 bytes from 192.168.10.2: seq=1 ttl=60 time=0.80 ms
64 bytes from 192.168.10.2: seq=2 ttl=60 time=0.80 ms
192.168.10.2 ist die Adresse des Test Accesspoints hier.
Notebook hast Du eben noch gesagt würde auch nicht funktionieren mit dem Router, klappt das jetzt?
Was hast Du dazu geändert?
Schau mal im STATUS Menü Deines Routers bei Wireless nach ob das WLAN Modul da aufgelistet wird.
Versuch auch mal andere Sicherheitseinstellung im Router, also WPA2-PSK oder WPA-PSK zu ändern.
PSK verwenden.
Cipher Type auf AUTO stellen, wenn das nicht klappt mal mit TKIP oder AES probieren.
MfG,
SlyD
Fabian E.
17.07.2012, 21:40
Laptop ping zum Router oder Rechner klappt die ganze Zeit schon, nur zum RP6 nicht.
Der Router sieht den RP6 als kabellosen Client. Verschlüsselt mit WPA2.
Werde den RP6 mal manuell auf WPA1 setzen, der Router macht aktuell beides.
Ich denke allerdings nicht, dass es an einem Verbindungsproblem liegt. Router und RP6 sagen beide, dass alles korrekt ist, scheint mir mehr ein Routing Problem zu sein.... :/
Welcher OS nutzt ihr? Ich habe Win7 x64. Sind unsere Module richtige Testmodule, auf denen vorher gearbeitet wurde? D.h. können wir ein Hardware Problem fast komplett ausschließen?
> Werde den RP6 (http://www.rn-wissen.de/index.php/RP6) mal manuell auf WPA1 setzen
Die Einstellung wird eigentlich sogar automatisch erkannt - Du musst das am Router umstellen damit sich das ändert.
Sicherstellen das PSK aktiviert ist. Dann mal WPA1 probieren.
Die Einstellung vom WLAN Modul ist fürs automatische Verbinden mit *irgendeinem* passenden Router gedacht der diese Sicherheitseinstellungen kann.
Also wenn join mode auf "Auto join any Network" steht.
> Sind unsere Module richtige Testmodule, auf denen vorher gearbeitet wurde?
Alle Module (natürlich auch die Serie) werden einem ausführlichen Funktionstest unterzogen und das Testprogramm wird per WLAN in den Controller geladen und ausgeführt.
EDIT:
> Welcher OS nutzt ihr? Ich habe Win7 x64.
Das sollte keine Rolle spielen.
MfG,
SlyD
Fabian E.
17.07.2012, 21:57
Was mich halt wundert, ist, dass das UDP Paket ja ohne Probleme ankommt. Nur TCP scheint ein Problem zu sein.
Alle möglichen Kombinationen von Sicherheitsfeatures bringt keine neuen Ergebnisse.
EDIT: Soll ich mal dieses Factory Reset script ausführen? Vielleicht ist bei mir ja irgendwo was falsch eingestellt.
mmmh. Ja da UDP durchkommt sollte das Modul eigentlich korrekt verbunden sein.
Kannst Du mit dem Notebook über den WLAN Router im Internet surfen?
(das läuft ja über TCP)
Check mal bitte die Logs von dem Router.
Zu finden unter Status -> Logs.
Da gibts scheinbar mehrere verschiedene, schau alle an.
Factory Reset dürfte eigentlich in diesem Fall nichts bringen.
Factory Reste musste ich bei meinem Modul auch vornehmen, daher kann's bestimmt nicht Schaden.
danach dann eben neu config!
Fabian E.
17.07.2012, 22:28
Laptop kommt ins Internet, generell habe ich hier keine Netzwerk Probleme normalerweise ;)
Factory Reset brachte nichts, die Router Logs sind ziemlich leer. Ein paar DHCP Meldungen von heute Mittag und hier und da ein ping flood von außerhalb.
Was genau bedeutet die rote LED auf der Platine? (SL4) Die blinkt (langsam) zusammen mit WL3 (auch langsam, so als wäre alles okay).
Ist die rote einfach nur die Standby LED der Platine?
Die SL sind die Status-LEDs des ATmega.
Die WL sind die Wlan-LEDs...
Habe gerade erst mal den selftest geladen. Wenn ich jeden Test einzeln durchgehe, funktioniert es super, keine Fehler.
Wenn ich alle Tests automatisch durchgehen lasse (Programmcode '0') , kommt ein Fehler nach dem I2C-Test:
ATTENTION: TESTS FINISHED WITH ERRORS!!!PLEASE CHECK RP6-M256 ASSEMBLY!!!
<<<TEST FAIL, CODE ---AB5OP793FE4R30IQ931M--->>>
Aber wie gesagt, einzeln durchgeführte Test sind fehlerfrei!
Fabian E.
17.07.2012, 22:42
Jo klar, wollte nur wissen, ob die rote blinken soll :)
Ach so, hat sie bei mir auch getan, bis es dann endlich ging!
SL4 blinkte, WL3 blinkte, WL1 blinkte halb so oft wie WL3, aber nur sechs mal. Beim siebten Mal leuchtete sie für etwa 1 Sekunde...???
Fabian E.
17.07.2012, 22:45
D.h. bei dir blinkt nun NUR NOCH die grüne LED vom WiFi Modul?? Und sonst keine?
Jap. Bzw wenn Wlan-Verbindung Terminal <-> M256 vorhanden ist, leuchtet das helle Ding nur noch, kein blinken mehr.
Lauter Fehler:
+++ Now Testing WLAN Module I/O Ports +++
Testing M256 CTS (PINJ7) <<-- WLAN RTS...
*** ERROR M256 CTS DOES NOT WORK PROPERLY! TRY AGAIN!
*** Test M256 CTS --> FAIL! ############
*** Make sure flow control is enabled!
Now testing the other GPIOs please wait...
*** Test M256 RTS --> FAIL! ############
*** Make sure flow control is enabled!
WLAN GPIO14 is working fine!
WLAN GPIO8 is working fine!
ERROR ERROR ERROR ERROR ERROR ERROR ERROR
ATTENTION: TESTS FINISHED WITH ERRORS!!!
PLEASE CHECK RP6-M256 ASSEMBLY!!!
<<<TEST FAIL, CODE ---AB5OP793FE4R30IQ931M--->>>
Fabian E.
17.07.2012, 22:53
Interessant, dann müsste SlyD mal sagen, ob diese LED ein Problem darstellt.
OK hier mal kurz erklärt:
Wenn von den WLx LEDs nur die grüne LED WL3 blinkt, ist eine WLAN Verbindung aufgebaut.
Leuchtet die LED dauerhaft, ist eine TCP Verbindung aufgebaut (z.B. im RobotLoader).
Blinkt die LED und die gelbe WL1, wird versucht eine Verbindung zum WLAN Netzwerk aufzubauen.
Das Modul gibt dabei auch Status Meldungen auf der seriellen Schnittstelle aus...
Die roten LEDs sind mit dem Mikrocontroller verbunden und haben ähnliche Funktionen wie beim RP6-M32,
zeigt ob ein Programm geladen ist oder nicht.
@fabqu:
Der WLAN GPIO Test ist zur Zeit darauf ausgelegt, das das WLAN Modul passend dafür konfiguriert wurde.
Denn sonst verhalten sich die I/Os nicht so wie vom Programm erwartet (z.B. wenn die Flusskontrolle deaktiviert ist!)
Die Flusskontrolle musst Du unbedingt aktivieren!
Wenn Du den Factory Reset ausgeführt hast, musst Du anschließend mindestens Run initial WIFI config (Baudrate is 9600) ausführen, dann ist die Flusskontrolle aber noch deaktiviert, da das im automatischen Testprogramm so notwendig ist.
Erst wenn Du noch "Run default WIFI config" ausführst, wird die Flusskontrolle wieder aktiviert.
Gut OK das sollte man wohl besser noch dazuschreiben.
MfG,
SlyD
Fabian E.
17.07.2012, 23:15
Ja, bei mir blinken SL4 und WL3, Verbindung zum Router steht also, TCP aber nicht...
OK. Leider gehen mir da die Ideen aus eigentlich kann es nur daran liegen das der Router das blockt.
Hast Du in allen möglichen Varianten probiert Anwendungen und Ports usw. passend freizugeben mit UDP und TCP?
Mach sonst einfach die DD-WRT Firmware drauf vielleicht gehts damit besser ;-)
Eine temporäre Lösung könnte noch der Ad-Hoc Modus sein. Setz mal Join Mode auf AdHoc, Channel auf 1, Security auf Open
und ändere die SSID in irgendwas anderes.
Versuch Dich dann mit dem Notebook direkt drauf zu verbinden - also ohne Router dazwischen.
MfG,
SlyD
Fabian E.
17.07.2012, 23:44
Hahaha :D
DD-WRT drauf gemacht und es läuft :D
Wusste gar nicht, dass das so einfach geht ;)
Vielen Dank für den Tipp :)
lol :) also wars die D-Link Firmware die nicht mochte :-/
Fabian E.
18.07.2012, 00:22
Okay, jetzt klappt hier alles wunderbar. Selbsttests hat er alle bestanden und die interessanten Demos laufen auch gut :) (Außer, dass mein linker Bumper nicht mehr reagiert :( Aber das ist eine andere Sache ;) )
Als nächstes werde ich mich dann wohl mal mit der Verbindung per .net /C# befassen :)
Fabian E.
18.07.2012, 01:25
Wow, die Übertragungsraten können sich ja wirklich sehen lassen :)
Konstant mehr als 50.000 Byte/s über größere Entfernung /durch Wände sollten wohl jedem ausreichen :)
Ohhhh! Da kommen einem soooo viele Ideen :)
bin gespannt auf deine nächste Remotrol!!!
Noch eine kurze Frage zum RobotLoader (Kommandozeile): Hier werden mir nur serielle Ports aufgelistet, wie geht das mit WLan?
Hallo,
das steht eigentlich in der Anleitung beschrieben.
Es gibt ja nun zwei Tabs - einmal für den seriellen Loader (btw. unter Windows sollte nur USB0 aufgelistet werden und keine seriellen COMx Ports wenn Du den Treiber richtig installiert hast) und einmal für WLAN. In die WLAN Liste fügt man entweder manuell die IP ein oder nimmt den Discover WIFI Devices Dialog dazu.
MfG,
SlyD
Fabian E.
18.07.2012, 16:54
Ich glaube es geht ihm um die Kommandozeile und nicht um die GUI :)
Ups sorry falsch verstanden :P ;)
Da geht das zur Zeit noch gar nicht, wird noch nachgeliefert.
Was war denn nun eigentlich mit dem "Slow" und "fast", da war doch irgendwas in der Lib falsch, oder?
Soll/Muss man das ändern?
Und was muss ich denn noch unternehmen, um den Webserver nutzen zu können?
Programm gestartet, Server auf IP-Adresse, dann das hier:
Diese Webseite ist nicht verfügbar.Die Verbindung zu 192.168.1.171 wurde unterbrochen.
Vorschläge:...
Hallo,
Du hast vermutlich den Port nicht mit angegeben.
-> 192.168.1.171:2000
Und die Netzwerk Verbindung im RobotLoader muss zuvor geschlossen werden!
Was war denn nun eigentlich mit dem "Slow" und "fast", da war doch irgendwas in der Lib falsch, oder?
Ist nur so konfiguriert das Richtungswechsel schneller als wie mit der normalen Einstellung ausgeführt werden.
Hat nix mit dem WLAN Modul zu tun betrifft nur die Motorregelung in der Base Lib.
MfG,
SlyD
Aber schadet das schnelle Richtungswechseln den Motoren/dem Getriebe?
Sollte ich das ändern bzw. eine alte Slave-Version verwenden?
Noch ein Bug:
Manchmal, nach erneutem Öffnen des neuen Loaders fehlen alle alten Einstellungen, wie Kategorien und hexfiles...
EDIT: Quatsch, i depp!
War mein Fehler :D
Sorry
Alle Antriebe werden wohl stärker belastet je schneller man damit irgendwas macht ;)
Die Mechanikteile nutzen sich dann eben schneller ab als normal.
Die Fast Einstellung ist quasi der Wettbewerbs Modus wenns schnell gehen muss.
Wenn man Zeit hat, sollte man Slow oder Medium wählen.
s.
http://www.arexx.com/forum/viewtopic.php?f=19&t=1682
Cool, dake dir. Slow reicht bei meinen Anwendungen ;) Werd's also ändern. Grüße!
Mittlerweile habe ich ein ganz seltsames Problem:
Die grüne Status-LED blinkt ganz normal, scheinbar besteht eine normale Verbindung.
Wenn ich mit dem Loader eine Verbindung herstelle bekomme ich IMMER einen Timeout -ich habe nichts verändert, keine anderen Programme sind offen.
Selbst wenn ich einen Ping ausführe (ging bisher immer) kommen meistens nur 1-2 der 4 Pakete an, meistens kommt hier eine Zeitüberschreitung...
Die Einstellungen sind korrekt und wurden mittlerweile mehrmals neu eingestellt - ohne Resultat.
Fabian E.
19.07.2012, 23:55
Router mal neu gestartet? PC neu gestartet? Batteriespannung okay? RP6 mal resettet?
Wenn Du in den Optionen Reset+Passthrough machst, was wird im seriellen Terminal angezeigt?
Dann noch:
.$$$
show rssi
show net
show status
get wlan
get ip
get comm
scan
ausführen und Ergebnisse posten.
MfG,
SlyD
Edit: Scheinbar ist es doch nicht ganz so einfach... Hier die Log-Datei:
RobotLoader is ready to go.
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.2.60:2000
Network Connection Timeout ERROR (101) ||| Network Connection attempt timed out!
#### Network close all...
#### Network close all done!
#### DISCONNECTED
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.2.60:2000
#### CONNECTED TO HOST: 192.168.2.60:2000
Try to get ID...
Reset Microcontroller...
WAIT RESPONSE TIMEOUT!!!! RETRY FAILURE! Please run again manually!
Enter CMD Mode not OK, try again...
############# NETLOAD TIMEOUT!
Reconnect...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.2.60:2000
Connection interrupted!
RESET MCU FAILED! CONNECTION ERROR!
########### Action failed! Abort. Please retry manually. If this fails, check settings!
Network Connection Timeout ERROR (101) ||| Network Connection attempt timed out!
#### Network close all...
#### Network close all done!
#### DISCONNECTED
Nach Reset+Enable Passthrough kommt:
WiFly Ver 2.32, 02-13-2012 on RN-171
MAC Addr=00:06:66:72:03:4d
Auto-Assoc ***************** chan=1 mode=************ SCAN OK
Joining ****************** now..
*READY*
Associated!
Using Static IP
Listen on 2000
Und hier der Rest:
.$$$
Enter Command Mode...
CMD
# show rssi
show rssi
RSSI=(-48 ) dBm
<2.32>
# show net
show net
SSid=***********************
Chan=1
Assoc=OK
Rate=8, 6 Mb
Auth=OK
Mode=*******
DHCP=OK
Boot=147
Time=FAIL
Links=1
<2.32>
# show status
show status
Conns=0, WRX=0/0, WTX=0/0, RTRY=0, RTRYfail=0
URX=6, UTX=279, RXdrop=0, RXerr=0,
FlwSet=0, FlwClr=0
TX-UDP=0, netbufs=0, evt=0, adhoc_lost=0
Boots=1, Wdogs=0,TXon=1
<2.32>
# get wlan
get wlan
SSID=******************
Chan=0
ExtAnt=0
Join=1
Auth=*********
Mask=0x1fff
Rate=8, 6 Mb
Linkmon=5
Passphrase=******
TxPower=0
<2.32>
# get ip
get ip
IF=UP
DHCP=OFF
IP=192.168.2.60:2000
NM=255.255.255.0
GW=192.168.2.1
HOST=0.0.0.0:2000
PROTO=TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0
<2.32>
# get comm
get comm
OPEN=*OPEN*
CLOSE=*CLOS*
REMOTE=
FlushSize=1024
MatchChar=0
FlushTimer=10
IdleTimer=0
CmdChar=$
<2.32>
# scan
scan
<2.32>
SCAN:Found 5
Num SSID Ch RSSI Sec MAC Address Suites
Andere Netzwerke habe ich rausgenommen!
2 **************** 01 -47 WPA2PSK ********************* AESM-AES WPSPB 3100
Den Router habe ich auch neu gestartet, wie gesagt ohne Erfolg... Mal geht es, mal geht es nicht - und vor Kurzem ging es noch problemlos.
Die Einstellungen sehen schonmal OK aus.
Wird das Modul im Discover WIFI Devices Dialog gelistet?
Kannst Du vom WLAN Modul aus einen Ping senden?
ping 192.168.2.1
Läuft eine Firewall auf Deinem Rechner?
Check mal ob mehrere Nachbar WLANs auf demselben Kanal liegen den Du verwendest,
falls ja dann im Router auf einen anderen wechseln.
(1,6 oder 11)
MfG,
SlyD
Hallo,
ja, das geht alles, die Firewall habe ich während der Tests deaktiviert. Das Seltsame ist, dass es manchmal geht, manchmal aber wieder nicht... Ich schätze, dass es irgendwie am Router liegt - werde das mal überprüfen.
- Max
Und noch ein Edit: Scheinbar stellt der RobotLoader eine Verbindung her (grüne LED leuchtet), bricht diese dann jedoch wieder mit verschiedenen Timeout-Nachrichten ab. Verbinde ich mit mit meinem bisherigen Netzwerk-Code (auch Java), so geht es problemlos...
OK dann schick mir doch mal das vollständige Logfile per Mail (wird bei jedem Neustart des RobotLoaders überschrieben! Also vorher beenden... ).
Am besten per Kommandozeile robotloader_start.exe -d ausführen bzw. unter linux ins Startscript hintendran hängen.
So, hab's rausgefunden: Das Kabel, das ich für das USB-Modul verwendet habe hing noch dran und ist kaputt - das hat wohl ständig Resets ausgelöst ;)
Gut, das erklärt das Verhalten natürlich ;)
Edit:
Btw. man muss nicht unbedingt auf "Connect" klicken, man kann sich auch per Menü "Open Port WIFI" verbinden ohne das ein Reset ausgelöst wird und die ID etc. abgefragt wird.
Ich bin mittlerweile wieder dabei, das Protokoll des Bootloaders zu untersuchen - scheinbar sind die Befehle über Wifi etwas anders als in dem OpenSource FlashLoader...
Ich habe auch mal einen Network Sniffer ausprobiert, nur bekomme ich dort meistens nur Datenmüll ;)
Was müss ich denn senden, um die Board-ID zu bekommen, wie sie in dem Status-Fenster angezeigt wird?
Fabian E.
20.07.2012, 16:52
Ich bin mittlerweile wieder dabei, das Protokoll des Bootloaders zu untersuchen - scheinbar sind die Befehle über Wifi etwas anders als in dem OpenSource FlashLoader...
Ich habe auch mal einen Network Sniffer ausprobiert, nur bekomme ich dort meistens nur Datenmüll ;)
Was müss ich denn senden, um die Board-ID zu bekommen, wie sie in dem Status-Fenster angezeigt wird?
Bist du dir sicher, dass tatsächlich andere Befehle gesendet werden? Der Flashvorgang sieht exakt gleich aus :)
Kannst du nicht den Debug Modus des Loaders aktivieren? (Wie ging das nochmal? SlyD?)
Bist du dir sicher, dass tatsächlich andere Befehle gesendet werden? Der Flashvorgang sieht exakt gleich aus :)
Nein, bin ich nicht ;) Dazu sind die Zeichenfolgen im Sniffer etwas zu "kryptisch" - und ich habe noch kein funktionierendes Programm gefunden, mit dem ich auf Win7 x64 einen COM-Port abhören kann...
Deshalb wäre eine Auflistung der Kommandos doch ganz nett, es würde eine Menge Zeit sparen.
radbruch
20.07.2012, 18:49
Hallo
Meine Platine ist inzwischen auch angekommen, nochmals herzlichen Dank dafür an alle die dazu beigetragen haben.
Ich bin jetzt voll neidisch auf eure Erfolge, weil ich es mal wieder nicht hinbekomme. Wie alle anderen auch stürze ich mich zuerst auf die WIFI-Funktion, aber das will einfach nicht funktionieren. Grundsätzlich wird das Board erkannt, nach "Factory Settings", "Initial WIFI Config (9600 Baud)" und "Configure WIFI Module!" blinkt die grüne LED langsam und alleine und das Log sieht so aus:
WLAN Module perform factory reset.
### DELAY
### DELAY
factory RESET
### DELAY
### DELAY
### DELAY
reboot
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Delay...
Delay...
WIFI issue command: factory RESET
Delay...
Delay...
Delay...
WIFI issue command: reboot
### WIFI configure commands DONE!
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI and activate passthrough mode with 9600 Baud!
### Run WIFI configure script:config/wifi_init_config_baudrate.txt
Script:1:CMD: ver
Script:2:DELAY
Delay...
Script:3:CMD: ver
OK!
Script:5:CMD: show rssi
Script:6:CMD: get mac
Script:7:CMD: set wlan join 0
OK!
Script:9:CMD: get everything
Script:10:DELAY
Delay...
Script:11:DELAY
Delay...
Script:12:DELAY
Delay...
Script:13:DELAY
Delay...
Script:14:DELAY
Delay...
Script:15:DELAY
Delay...
Script:16:CMD: set sys mask 0x21f0
OK!
Script:18:CMD: set sys value 0x0
OK!
Script:20:CMD: set uart raw 500000
OK!
Script:22:CMD: set uart flow 0
OK!
Script:24:CMD: set wlan linkmon 5
OK!
Script:26:CMD: set wlan rate 8
OK!
Script:28:CMD: set comm size 1024
OK!
Script:30:CMD: set comm time 10
OK!
Script:32:CMD: set comm remote 0
OK!
Script:34:CMD: set opt deviceid RP6v2-M256-WIFI
OK!
Script:36:DELAY
Delay...
Script:37:CMD: save
Script:38:DELAY
Delay...
Script:39:DELAY
Delay...
Script:40:DELAY
Delay...
Script:41:CMD: reboot
Script:42:DELAY
Delay...
Script:43:DELAY
Delay...
### WIFI configure script DONE!
set wlan ssid RP6-WIFI-AP
### WAIT_FOR:AOK
set ip dhcp 0
### WAIT_FOR:AOK
set ip netmask 255.255.255.0
### WAIT_FOR:AOK
set ip adr 192.168.137.2
### WAIT_FOR:AOK
set ip gateway 192.168.137.1
### WAIT_FOR:AOK
set dns address 192.168.137.1
### WAIT_FOR:AOK
set wlan join 1
### WAIT_FOR:AOK
set wlan channel 0
### WAIT_FOR:AOK
set wlan auth 3
### WAIT_FOR:AOK
### DELAY
set wlan passphrase radbruch2012
### WAIT_FOR:AOK
### DELAY
### DELAY
set wlan hide 1
### WAIT_FOR:AOK
set opt deviceid RP6-WIFI
### WAIT_FOR:AOK
### DELAY
save
### DELAY
### DELAY
reboot
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
WIFI issue command: set wlan ssid RP6-WIFI-AP
OK!
WIFI issue command: set ip dhcp 0
OK!
WIFI issue command: set ip netmask 255.255.255.0
OK!
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: set ip gateway 192.168.137.1
OK!
WIFI issue command: set dns address 192.168.137.1
OK!
WIFI issue command: set wlan join 1
OK!
WIFI issue command: set wlan channel 0
OK!
WIFI issue command: set wlan auth 3
OK!
Delay...
WIFI issue command: set wlan passphrase radbruch2012
OK!
Delay...
Delay...
WIFI issue command: set wlan hide 1
OK!
WIFI issue command: set opt deviceid RP6-WIFI
OK!
Delay...
WIFI issue command: save
Delay...
Delay...
WIFI issue command: reboot
### WIFI configure commands DONE!
Got UDP Broadcast on port 55555 from IP: 192.168.137.2; open port:2000
Accespoint MAC:00:0c:f6:6d:2b:61; ch:1; rssi:46; rtc_val:8
Ver: WiFly Ver 2.32, 02-13-2012 ; ID:RP6-WIFI BatVolt:
Mit "Device Discover" wird das Board nun mit 192.168.137.2:2000 zum Adden angeboten. Allerdings enden alle Versuche zu connecten mit einem Timeout. Die Selbstkonfiguration endet nach 47% ebenfalls mit einem Timeout und folgender Ausgabe:
Seltest Settings:
IP Subnet:192.168.137.
Use fixed IP:192.168.137.2
HOME Mode, accept any RSSI level!
Do NOT update Firmware!
RSSI Threshold is set to: -46dBm
################################################## ##################
################################################## ##################
Complete Factory initial configure has been started!
PLEASE WAIT until it finishes...
################################################## ##################
################################################## ##################
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure Bootloader Settings...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Get current Boot settings!
Configure Boot settings!
Reset to defaults!
Store new settings!
Loader Action: FINISHED!
Loader Action: CONFIGURE DONE!
Run Factory RESET...
WLAN Module perform factory reset if required...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
### DELAY
factory RESET
### DELAY
### DELAY
### DELAY
reboot
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
Delay...
WIFI issue command: factory RESET
Delay...
Delay...
Delay...
WIFI issue command: reboot
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Run Initial Configure...
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI and activate passthrough mode with 9600 Baud!
### Run WIFI configure script:config/wifi_init_config_baudrate.txt
Loader Action: FINISHED!
Script:1:CMD: ver
Script:2:DELAY
Delay...
Script:3:CMD: ver
OK!
Script:5:CMD: show rssi
Script:6:CMD: get mac
Script:7:CMD: set wlan join 0
OK!
Script:9:CMD: get everything
Script:10:DELAY
Delay...
Script:11:DELAY
Delay...
Script:12:DELAY
Delay...
Script:13:DELAY
Delay...
Script:14:DELAY
Delay...
Script:15:DELAY
Delay...
Script:16:CMD: set sys mask 0x21f0
OK!
Script:18:CMD: set sys value 0x0
OK!
Script:20:CMD: set uart raw 500000
OK!
Script:22:CMD: set uart flow 0
OK!
Script:24:CMD: set wlan linkmon 5
OK!
Script:26:CMD: set wlan rate 8
OK!
Script:28:CMD: set comm size 1024
OK!
Script:30:CMD: set comm time 10
OK!
Script:32:CMD: set comm remote 0
OK!
Script:34:CMD: set opt deviceid RP6v2-M256-WIFI
OK!
Script:36:DELAY
Delay...
Script:37:CMD: save
Script:38:DELAY
Delay...
Script:39:DELAY
Delay...
Script:40:DELAY
Delay...
Script:41:CMD: reboot
Script:42:DELAY
Delay...
Script:43:DELAY
Delay...
### WIFI configure script DONE!
Loader Action: CONFIGURE DONE!
Get Infos and Configure...
Set Comport...
Baudrate is set to: 38400
OK!
Activate WIFI Passthrough + Reset WIFI Module + Get Infos...
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI, activate passthrough mode and get Infos!
### Get WIFI Module Infos...
Loader Action: FINISHED!
GOT VER = WiFly Ver 2.32, 02-13-2012 on RN-171 6
GOT MAC = Mac Addr=00:06:66:72:03:4c
52
GOT RSSI = RSSI=(-4) dBm
< 92
### Get WIFI Module Infos... DONE!
Loader Action: GET WLAN INFOS DONE!
Same MAC, no IP Change required. Continue...
MAC: 00:06:66:72:03:4c
Set Comport...
Baudrate is set to: 38400
OK!
### Parse WIFI configure script:config/wifi_defaults_basic.txt
### WIFI configure script DONE!
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
WIFI issue command:
WIFI issue command:
WIFI issue command: ver
OK!
WIFI issue command: show rssi
WIFI issue command: get mac
WIFI issue command: set wlan join 0
OK!
Delay...
Delay...
WIFI issue command: set sys mask 0x21f0
OK!
WIFI issue command: set sys value 0x0
OK!
WIFI issue command: set ip dhcp 0
OK!
WIFI issue command: set ip flags 0x6
OK!
WIFI issue command: set ip gateway 192.168.10.1
OK!
WIFI issue command: set wlan join 1
OK!
WIFI issue command: set wlan linkmon 5
OK!
WIFI issue command: set wlan rate 8
OK!
WIFI issue command: set comm size 1024
OK!
WIFI issue command: set comm time 10
OK!
WIFI issue command: set comm remote 0
OK!
WIFI issue command: set opt deviceid RP6v2-M256-WIFI
OK!
WIFI issue command: set ftp address 208.109.14.133
OK!
Delay...
WIFI issue command: set wlan ssid M256TST
OK!
WIFI issue command: set ip netmask 255.255.255.0
OK!
WIFI issue command: set ip adr 192.168.137.2
OK!
Delay...
WIFI issue command: set wlan auth 3
OK!
WIFI issue command: set wlan passphrase radbruch2012
OK!
WIFI issue command: set wlan hide 1
OK!
Delay...
WIFI issue command: set uart raw 500000
OK!
WIFI issue command: set uart flow 1
OK!
Delay...
WIFI issue command: save
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN Reset...
Set Comport...
Baudrate is set to: 38400
OK!
Activate WIFI Passthrough + Reset WIFI Module...
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI and activate passthrough mode!
Loader Action: FINISHED!
OK got normal response from Module after Reset!
WLAN configure for test...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
WIFI issue command: set ip adr 192.168.137.2
WAIT RESPONSE_TIMEOUT!!!!
Issue Command wait for response "AOK" FAILURE, script aborted!
Loader Action: CONFIGURE FAILED!
########## Test Configure failed... Retry # 0 to get infos and configure...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: save
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN connection, please wait...
Open Network Connection...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.137.2:2000
Connection open FAILED! Please try again!
Retry # 1...
############ Will now retry with different IP...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
#### Network close all...
#### Network close all done!
Network Connection Status changed: CONNECT TIME OUT!
#### DISCONNECTED
Network Connection Status changed: DISCONNECTED!
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: save
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN connection, please wait...
Open Network Connection...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.137.2:2000
Connection open FAILED! Please try again!
Retry # 2...
############ Will now retry with different IP...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
#### Network close all...
#### Network close all done!
Network Connection Status changed: CONNECT TIME OUT!
#### DISCONNECTED
Network Connection Status changed: DISCONNECTED!
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: save
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN connection, please wait...
Open Network Connection...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.137.2:2000
Connection open FAILED! Please try again!
Retry # 3...
############ Will now retry with different IP...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
#### Network close all...
#### Network close all done!
Network Connection Status changed: CONNECT TIME OUT!
#### DISCONNECTED
Network Connection Status changed: DISCONNECTED!
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: save
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN connection, please wait...
Open Network Connection...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.137.2:2000
Connection open FAILED! Please try again!
Retry # 4...
############ Will now retry with different IP...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
set ip adr 192.168.137.2
### WAIT_FOR:AOK
save
### DELAY
### DELAY
### DELAY
reboot
### DELAY
### DELAY
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
WIFI issue command: set ip adr 192.168.137.2
OK!
WIFI issue command: save
#### Network close all...
#### Network close all done!
Network Connection Status changed: CONNECT TIME OUT!
#### DISCONNECTED
Network Connection Status changed: DISCONNECTED!
Delay...
Delay...
Delay...
WIFI issue command: reboot
Delay...
Delay...
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Test WLAN connection, please wait...
Open Network Connection...
#### Network close all...
#### Network close all done!
#### BEGIN CONNECT TO: 192.168.137.2:2000
Connection open FAILED! Please try again!
############ Network Connection failed due to connection error / timeout! Abort. Please retry manually. If this fails, check settings and assembly!
Network Connection Timeout ERROR (101) ||| Network Connection attempt timed out!
#### Network close all...
#### Network close all done!
Network Connection Status changed: CONNECT TIME OUT!
#### DISCONNECTED
Network Connection Status changed: DISCONNECTED!
Was nun?
Gruß
mic
[Edit]
Wie kommt das denn rein:
WIFI issue command: set wlan ssid M256TST
In den Einstellungen für die Autoconfig-Funktion hatte ich meine eigene SSID "RP6-WIFI-AP" eingetragen. Ein weiterer Test mit "M256TST" als SSID wird allerdings schon nach 11% mit der Meldung
### WIFI configure script config/wifi_defaults_flow_FACTORY.txt NOT FOUND!!!
abgebrochen:
Seltest Settings:
IP Subnet:192.168.137.
Use fixed IP:192.168.137.2
Factory Mode!
Do NOT update Firmware!
RSSI Threshold is set to: -46dBm
################################################## ##################
################################################## ##################
Complete Factory initial configure has been started!
PLEASE WAIT until it finishes...
################################################## ##################
################################################## ##################
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure Bootloader Settings...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Get current Boot settings!
Configure Boot settings!
Reset to defaults!
Store new settings!
Loader Action: FINISHED!
Loader Action: CONFIGURE DONE!
Run Factory RESET...
WLAN Module perform factory reset if required...
Set Comport...
Baudrate is set to: 38400
OK!
### DELAY
### DELAY
factory RESET
### DELAY
### DELAY
### DELAY
reboot
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure commands...
Loader Action: FINISHED!
Delay...
Delay...
WIFI issue command: factory RESET
Delay...
Delay...
Delay...
WIFI issue command: reboot
### WIFI configure commands DONE!
Loader Action: CONFIGURE DONE!
Run Initial Configure...
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI and activate passthrough mode with 9600 Baud!
### Run WIFI configure script:config/wifi_init_config_baudrate.txt
Loader Action: FINISHED!
Script:1:CMD: ver
Script:2:DELAY
Delay...
Script:3:CMD: ver
OK!
Script:5:CMD: show rssi
Script:6:CMD: get mac
Script:7:CMD: set wlan join 0
OK!
Script:9:CMD: get everything
Script:10:DELAY
Delay...
Script:11:DELAY
Delay...
Script:12:DELAY
Delay...
Script:13:DELAY
Delay...
Script:14:DELAY
Delay...
Script:15:DELAY
Delay...
Script:16:CMD: set sys mask 0x21f0
OK!
Script:18:CMD: set sys value 0x0
OK!
Script:20:CMD: set uart raw 500000
OK!
Script:22:CMD: set uart flow 0
OK!
Script:24:CMD: set wlan linkmon 5
OK!
Script:26:CMD: set wlan rate 8
OK!
Script:28:CMD: set comm size 1024
OK!
Script:30:CMD: set comm time 10
OK!
Script:32:CMD: set comm remote 0
OK!
Script:34:CMD: set opt deviceid RP6v2-M256-WIFI
OK!
Script:36:DELAY
Delay...
Script:37:CMD: save
Script:38:DELAY
Delay...
Script:39:DELAY
Delay...
Script:40:DELAY
Delay...
Script:41:CMD: reboot
Script:42:DELAY
Delay...
Script:43:DELAY
Delay...
### WIFI configure script DONE!
Loader Action: CONFIGURE DONE!
Get Infos and Configure...
Set Comport...
Baudrate is set to: 38400
OK!
Activate WIFI Passthrough + Reset WIFI Module + Get Infos...
Baudrate is set to: 38400
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Reset WIFI, activate passthrough mode and get Infos!
### Get WIFI Module Infos...
Loader Action: FINISHED!
GOT VER = WiFly Ver 2.32, 02-13-2012 on RN-171 6
GOT MAC = Mac Addr=00:06:66:72:03:4c
52
GOT RSSI = RSSI=(-4) dBm
< 92
### Get WIFI Module Infos... DONE!
Loader Action: GET WLAN INFOS DONE!
Same MAC, no IP Change required. Continue...
MAC: 00:06:66:72:03:4c
Set Comport...
Baudrate is set to: 38400
OK!
Baudrate is set to: 38400
Configure WIFI...
Connected to [WIFI] target!
Target ID received:
RP6: Board ID 8, Firmware Version 1.4, Board Rev.: 3
["RP6 M256 WIFI", 8, MEGA2560, 0, 253952, true]
Configure WIFI passthrough mode!
### Run WIFI configure script:config/wifi_defaults_flow_FACTORY.txt
### WIFI configure script config/wifi_defaults_flow_FACTORY.txt NOT FOUND!!!
Loader Action: FINISHED!
D:\_rp6-wifi\RobotLoader_20120717\RobotLoader_20120717\con fig>dir
Volume in Laufwerk D: hat keine Bezeichnung.
Volumeseriennummer: DA78-31FF
Verzeichnis von D:\_rp6-wifi\RobotLoader_20120717\RobotLoader_20120717\con fig
17.07.2012 21:10 <DIR> .
17.07.2012 21:10 <DIR> ..
17.07.2012 21:10 2.055 boards.cfg
19.07.2012 19:17 247 files.cfg
19.07.2012 19:17 247 files_net.cfg
17.07.2012 21:10 <DIR> ftp_home
20.07.2012 17:53 324 rn171.properties
19.07.2012 19:17 848 rp6loader.cfg
17.07.2012 21:10 <DIR> selftest
20.07.2012 19:07 677 wifi.cfg
17.07.2012 21:10 1.036 wifi_defaults.txt
17.07.2012 21:10 626 wifi_defaults_basic.txt
17.07.2012 21:10 606 wifi_init_config.txt
17.07.2012 21:10 644 wifi_init_config_baudrate.txt
17.07.2012 21:10 606 wifi_init_config_flow.txt
11 Datei(en), 7.916 Bytes
4 Verzeichnis(se), 815.963.852.800 Bytes frei
Hallo mic,
Danke für den Hinweis mit dem automatischen Test, da wird noch die Standard Test SSID gesetzt statt der vom Anwender selbst festgelegten.
Der Test war ursprünglich übrigens nur für den Funktionstest in der Fabrik gedacht (nicht konfigurierbar).
Hab den aber nachträglich noch etwas universeller nutzbar gemacht.
Wird in der nächsten Version korrigiert sein.
Das der "FACTORY" Testmodus nicht läuft ist normal, steht ja auch direkt darüber im Hinweistext.
Bei der öffentlichen Version sind halt nicht die entsprechenden Konfigurationsdateien mit dabei.
Ist aber egal, alles was der Test macht kannst Du auch manuell durchführen.
Zum Problem:
Läuft auf Deinem Rechner eine Firewall?
Wenn ja welche und kannst du die mal komplett abschalten?
MfG,
SlyD
radbruch
20.07.2012, 22:59
Hallo SlyD
Das der "FACTORY" Testmodus nicht läuft ist normal,...Den wollte ich doch auch gar nicht. Ich hatte meine SSID auf "M256TST" gesetzt und wollte den Home-Testlauf nochmals durchlaufen lassen und hab wohl zuvor irgendwie auf "Factory" geklickt. Den Test werde ich aber noch nachreichen, wenn es nötig sein sollte.
Ich verwende Win7 mit der integrierten Firewall. Weder die Freigabe des Port 2000 noch das komplette Ausschalten der Firewall brachte eine Änderung.
Jetzt habe ich noch mit einem Notebook unter XP verbunden (IP 192.168.137.27 mit DHCP) und damit erkennt der Loader das WIFI-Board ebenfalls (nur per WIFI verbunden!) und bietet es zum Adden an. Aber auch damit funktioniert es nicht wegen Timeoutfehler (mit ERRORCODE 101).
Was kann ich noch testen?
Gruß
mic
OK, dann probier noch bitte folgendes:
1. Mit Pings testen welche Verbindungen überhaupt funktionieren.
Ping vom Notebook zum Router,
Ping vom Notebook zum Desktop (übers WLAN),
Ping vom Notebook zum WLAN Modul,
Ping vom Desktop zum WLAN Modul,
Ping vom WLAN Modul zum Router,
Ping vom WLAN Modul zum Desktop,
Ping vom WLAN Modul zum Notebook
2. RobotLoader neustarten. Beide Terminals abdocken und beobachten.
Dann nur im Menü zuerst auf:
Options->Wifi->Reset + Enable Passthrough, anschließend auf RobotLoader->Open Port WIFI klicken.
Im seriellen Terminal irgendwas eintippen. "HALLO TEST" + Enter oder so.
Dann im Network Terminal dasselbe tun.
Dann mal im WLAN Tab auf Close und dann auf Connect clicken.
Was erscheint in den Termnials?
RobotLoader beenden.
Was taucht in der Logdatei auf?
Normalerweise sollte der Text der im einen Terminal gesendet wird, jeweils im anderen auftauchen.
Beim Verbinden sollte einiges an Kommandos und Antworten vom WLAN Modul im Network
Terminal auftauchen.
3. Im Router alle Logs checken ob irgendwas blockiert wurde.
4. Im Router MAC Filter, Filter für bestimmte Adressen und Firewall deaktivieren
5. Sicherstellen das kein ICMP (Ping) Blocker aktiv ist
6. Firewall im Router deaktivieren
Dann ggf. nochmal probieren.
MfG,
SlyD
radbruch
21.07.2012, 00:15
Ächz, hätte ich nur nicht gefragt...
Zu 1: Alle, außer die zum WLAN-Modul, habe ich schon geprüft und die funktionieren.
Zu 2: Bei "auf RobotLoader->Open Port WIFI klicken." wird "Timeout" gemeldet
Den Rest überprüfe ich morgen. Danke für die Mühe.
Gruß
mic
> Zu 1: Die Pings funktionieren alle
Das schonmal gut.
Dann könntest Du mal PuTTY runterladen
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Dort dann Host Namen und Port einstellen, TELNET wählen.
In TERMINAL sicherstellen das alles auf Auto steht und "Implicit CR in every LF" selektiert ist.
Dann wieder zurück zu Session und unter neuem Namen speichern.
Dann Verbinden.
Dort denselben Terminal Test machen wie im RobotLoader (RobotLoader aber laufen
lassen und die Ausgaben auf der seriellen Schnittstelle im Passthrough Modus beobachten!).
Ist nur um auszuschließen das RobotLoader selbst wegen irgendwas blockiert wird...
MfG,
SlyD
radbruch
21.07.2012, 10:28
Hallo
Bei der Routerverbindung gingen die Pings nicht zum WIFI-Board durch. Die einzige Reaktion war ein schnelles Blinken der grünen LED.
Ein neuer Anlauf führte mich nun doch zum Erfolg. Ich habe jetzt eine AD-HOC-Verbindung (über einen WLAN-Stick) aufgebaut und die funktioniert wunderbar. Echt sensationell finde ich das drahtlose Flashen. :)
Danke für die Unterstützung.
Gruß
mic
[Edit]
Aha, das schnelle Blinken bedeutet, dass sich das WIFI-Modul im CMD-Modus befindet. Prima. Aber wie kann man die Ausgabe im WIFI-Terminal kopieren/speichern?
Ah gut das wäre mein nächster Vorschlag gewesen es mal per Adhoc zu probieren :-)
OK irgendwas scheint dann bei den Einstellungen des Routers nicht zu stimmen.
Wir haben das bislang mit über 10 verschiedenen Routermodellen getestet es gab nie so ein Problem.
Aber es gibt natürlich noch viele andere.
Welchen Router verwendest Du genau?
-----
@Max + Fabian:
Nachdem das vorerst gelöst ist noch kurz zu der Frage von weiter oben, das WLAN Bootloader Protokoll ist
leicht verändert um es gegenüber möglichen Störungen robuster zu machen.
z.B. wenn irgendwas übers WLAN übertragen wird oder Statusmeldungen
ausgegeben werden soll ja nicht gleich der Speicher überschrieben werden ;-)
Deswegen sind einige Kommandos nun etwas länger, insbesondere muss zu beginn
"[WIFIBOOT_START]\n" gesendet werden um den Bootloader zu aktivieren und
bei der Übertragung der Datenblöcke zu beginn "[P]\n" und einmal zum Beenden des Boot Modus "[E]\n".
Die restlichen Sachen sind recht ähnlich geblieben, abgesehen von den Zusatzfunktionen...
> Wie ging das nochmal?
-d anhängen.
Aber ich sehe gerade für den WLAN Modus ist der Debug Modus in der aktuellen Version deaktiviert,
kommt ggf. in der nächsten Version.
MfG,
SlyD
EDIT:
Ah den Edit hatte ich übersehen
[Edit]
Aha, das schnelle Blinken bedeutet, dass sich das WIFI-Modul im CMD-Modus befindet. Prima. Aber wie kann man die Ausgabe im WIFI-Terminal kopieren/speichern?
Entweder aus der Logdatei rauskopieren oder markieren und STRG+C... ich denke das hast Du nicht geschafft da Text zu markieren? ;)
Ich hab leider noch nicht rausgefunden woran das liegt aber auf manchen Systemen (nicht allen) ist die Textmarkierung etwas hakelig. Der Trick ist dann folgender: Doppelt klicken und markieren. Also Klick; schnell nochmal Klick/Gedrückt halten und dann markieren.
radbruch
21.07.2012, 11:22
Hallo
Mein "Router" ist mein WLAN-Stick den ich unter Win7 als virtuellen AP verwende. Aber wie oben gesehen funktioniert das mit dem m256 aber noch nicht so richtig. ;)
------------
Leider muss ich mich erstmal ausklinken und zum Shoppen aufbrechen. "Zu der Frage von weiter oben" werde ich erst heute abend Antworten geben können. Wenn ich dann durchblicke was du eigentlich wissen willst.
Gruß
mic
[Edit]
Für das Speichern der WIFI-Terminalausgabe finde ich keinen Menupunkt unter [Optionen]. Mit dem Doppelklicktrick funktioniert das Kopieren der Ausgabe:
# .$$$
Enter Command Mode...
CMD
# get info
get info
IF=UP
DHCP=AUTOIP
IP=169.254.77.3:2000
NM=255.255.0.0
GW=0.0.0.0
HOST=0.0.0.0:2000
PROTO=TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0
<2.32>
Ah OK DAS wurde bislang wirklich noch nicht getestet ;-)
Das mit der Frage von weiter oben war nicht an Dich gerichtet sondern Antwort für Max und Fabian.
radbruch
21.07.2012, 11:44
Sensationell:
<html><head><title>RP6v2-M256-WIFI Simple Webserver</title></head><body><font size="+4" face="sans-serif">HELLO FROM RP6v2-M256-WIFI!</font><br>Please visit my homepage: <a href="http://www.arexx.com/rp6">www.arexx.com/rp6</a><br><br><font size="+3" face="sans-serif">Stopwatch 1 Value: 6516<br>Page hit counter: 5<br>*****</font></body></html>
Der Webserver macht bei mir ein paar Probleme:
Die Verbindung klappt mit verschiedenen Browsern problemlos, allerdings wird die Verbindung nicht geschlossen!
Hier der Log aus dem Terminal:
Got request: GET / HTTP/1.1GOT GET!
GET / HTTP/1.1
Close connection...
#### TIMEOUT! TRY AGAIN! ####
#### TIMEOUT! TRY AGAIN! ####
ERROR!
#### WRITE COMMAND FAILURE! ####
done!
Hast du in den WLAN Einstellungen "Enable CMD Mode by GPIO" aktiviert?
Einfach mal auf den Button klicken.
Ausserdem musst Du die Flusskontrolle aktivieren - wie weiter oben schon gesagt, wird das bei dem Initial Config Script deaktiviert und erst mit "Run default WIFI config!" wieder aktiviert.
Oder indem man in der WLAN Kommandozeile einfach
set uart flow 1
save
reboot
ausführt.
MfG,
SlyD
Habe ich alles gemacht, der Fehler bleibt der Gleiche...
Editier mal in der RP6M256_WIFIlib.c die Zeile 341
#define WIFI_DEBUG
also Kommentarzeichen wegmachen. Dann den Simple Webserver nochmal neu übersetzen.
Was wird im SERIELLEN Terminal ausgegeben?
Aussehen sollte es so:
Got request: *CLOS**OPEN*GET / HTTP/1.1
GOT GET!
Close connection...
### WIFI Enter CMD mode
ENTER CMD GPIO14!
W{?}
?
[OK:?]
RAW_CMD{close
}
close
Write Commad done!
### WIFI Leave CMD mode
W_CMD{exit ; EXIT}
RAW_CMD{exit}
exitWrite Commad done!
[RESP_OK:EXIT]
done!
MfG,
SlyD
Oh - ich glaube ich habe den Fehler gefunden: Der HTTP-Header, den ich benutzt habe, hat ein "Connection:close" nachgeschickt - vermutlich gab das Probleme mit dem manuellen Trennen der Verbindung im Programm...
Ja da die Kommandobefehle ja prüfen ob die Kommandos richtig übertragen werden kann sich das in die Quere kommen.
Kommt da nicht das richtige zurück gibts Fehlermeldungen.
Wie schon dabei steht, das ist der simpelst denkbare Webserver damit es ein schön übersichtliches Beispiel bleibt.
Wenn man den ganzen Kram den ein normaler Webserver sonst noch so kann braucht, muss man schon etwas mehr Aufwand treiben.
MfG,
SlyD
radbruch
22.07.2012, 02:18
Hallo
Das macht echt Spass mit dem Loader und seinen abgedockten Terminals zu spielen.
Auf Basis des Webserverbeispiels eine LED-Ansteuerung mit dem Browser:
// LEDs mit dem Browser ansteuern mic 22.7.2012
#include "RP6M256Lib.h"
char c, kommando=0;
void send_html_page(void);
int main(void)
{
initRP6M256();
writeString_P("\n\nsetLEDs() mit dem Browser 22.7.2012 mic\n\r");
// Make sure WLAN Module Packet size / buffer size and flush timer is OK
enter_cmd_mode_WIFI();
issueCMD_WIFI("set comm size 1024","AOK");
issueCMD_WIFI("set comm time 10","AOK");
leave_cmd_mode_WIFI();
while(true)
{
if(getBufferLength_WIFI()) // Daten vom Browser empfangen?
{
c=readChar_WIFI();
writeChar(c); // ja, dann Daten zum seriellen Terminal senden
if(c == '?') { kommando=1; setLEDs(0); } // und ab dem ? interpretieren
if(kommando) switch(c)
{
case 'a': setLED1(1); break;
case 'b': setLED2(1); break;
case 'c': setLED3(1); break;
case 'd': setLED4(1); break;
}
if(c == 13) // Datenende
{
if(kommando) kommando=0; else setLEDs(0); // LEDs aus, wenn kein ? gefunden
send_html_page();
}
}
}
return 0;
}
void send_html_page(void)
{
// Send HTTP Header:
writeString_P_WIFI("HTTP/1.0 200 OK\r\n");
writeString_P_WIFI("Content-Type: text/html\r\n");
writeString_P_WIFI("\r\n");
// Send HTML Content:
writeString_P_WIFI("<html><head><title>RP6-WIFI: Leds ansteuern</title></head><body>\n");
writeString_P_WIFI("setLeds():\n");
writeString_P_WIFI("<form action=\"http://169.254.77.3:2000\" method=\"get\">\n");
writeString_P_WIFI("<input type=\"radio\" name=\"SL4\" value=\"d\"> \n");
writeString_P_WIFI("<input type=\"radio\" name=\"SL3\" value=\"c\"> \n");
writeString_P_WIFI("<input type=\"radio\" name=\"SL2\" value=\"b\"> \n");
writeString_P_WIFI("<input type=\"radio\" name=\"SL1\" value=\"a\">\n");
writeString_P_WIFI("<br>\n");
writeString_P_WIFI("<input type=\"submit\" value=\"Setzen\">\n");
writeString_P_WIFI("<input type=\"reset\" name=\"Name\" value=\"reset\">\n");
writeString_P_WIFI("</form>\n");
writeString_P_WIFI("</body>\n");
writeString_P_WIFI("</html>\n");
// Wait a bit and then close connection:
mSleep(50); // Depending on the content you may have to wait longer.
enter_cmd_mode_WIFI(); // ??? Wie funktioniert das?
writeCommand_WIFI("close\r");
leave_cmd_mode_WIFI();
}
Die URL im Form-Tag muss man natürlich anpassen.
Gruß
mic
ElchiMtr
24.07.2012, 22:24
Hey leute,
ich werf mal so zwischen durch ein, dass ichs auch endlich am Laufen habe :-)
Die Einarbeitung ist doch etwas tricky, wenn man keinen RP6 hat, aber es ist eigentlich alles super erklärt nur schadet es nicht das RP6 Handbuch auch zu kennen.
ich hatte zuerst auch Probleme mit der WLAN-Verbindung, aber es lag an meinem Router. Hab das Modul jetzt wo anders getestet, da geht es sofort ohne Probleme. Super Arbeit von Arrex. Jetzt auf ans weiter testen.
Gruß
Elchi
Jo, Ichthyosaurier nun auch endlich ein vernünftiges WLAN-Terminal in labview, welches ich nun gerade versuche, zu verwenden und einzubauen.
Mal sehen... :D
radbruch
25.07.2012, 21:25
Hallo
Beim Kompilieren des SD-Card-Beispiel habe ich einige Hürden zu überwinden. Gegen " 'for' loop initial declaration used outside C99 mode" hilft ein "-std=c99" in den Flags des Kompilers im Makefile. Das war noch einfach. Aber das verstehe ich nicht:
avr-gcc -std=c99 -mmcu=atmega2560 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb -c -DF_CPU=16000000UL -Wa,-acdhlmns=RP6M256Lib.lst RP6M256Lib.c -o RP6M256Lib.o
RP6M256Lib.c:547: warning: declaration does not declare anything
RP6M256Lib.c: In function 'delayCycles':
RP6M256Lib.c:650: error: 'asm' undeclared (first use in this function)
RP6M256Lib.c:650: error: (Each undeclared identifier is reported only once
RP6M256Lib.c:650: error: for each function it appears in.)
RP6M256Lib.c:650: error: expected ';' before 'volatile'
make: *** [RP6M256Lib.o] Error 1
Beides bezieht sich auf die Datei RP6M256Lib.c:
/************************************************** ***************************/
// Delays, Stopwatches and Beeper:
// ---------------------
// Internal status bits
volatile union {
uint8_t byte;
struct {
unsigned beep:1;
unsigned unused:7;
}; <-- Zeile 547
} controlStatus;
/**
* Delay a number of instruction cycles.
* No exact delay function! And interrupts can still occur and
* add a lot of extra cycles.
* This function only guarantees to delay for a MINIMAL number
* of cycles!
*
* Example:
* delayCycles(1000); // Delays for *about* 1000 instruction cycles
*/
void delayCycles(volatile uint16_t dly)
{
//volatile uint16_t delay2 = dly;
//while(delay2--) nop();
while(dly--) nop(); <-- Zeile 650
}
Das #define für nop() findet sich in RP6M256.h in Zeile 276:
// Assembly and system macros:
#define nop(); {asm volatile("nop\n\t");} <-- Zeile 276
#define bl_reset(); cli();bl_start();(Zeilenangaben jeweils aus der Library der Testmodule)
Irgendwelche Ideen?
Gruß
mic
Hallo mic,
gibt keine Probleme hier, der Compiler Aufruf ist aber auch deutlich anders... Du verwendest nicht die makefiles die dabei waren nehme ich an?
Compiling: ../../RP6Lib/RP6control_M256_WIFI/RP6M256Lib.c
avr-gcc -c -mmcu=atmega2560 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../RP6Lib/RP6control_M256_WIFI/RP6M256Lib.lst -I../../RP6Lib -I../../RP6Lib/RP6control_M256_WIFI -I../../RP6Lib/RP6common -I../../RP6Lib/RP6control_M256_WIFI/sdc -std=gnu99 -MD -MP -MF .dep/RP6M256Lib.o.d ../../RP6Lib/RP6control_M256_WIFI/RP6M256Lib.c -o ../../RP6Lib/RP6control_M256_WIFI/RP6M256Lib.o
Wie sieht Dein Makefile denn aus?
Benutzt Du WinAVR oder was anderes?
Übrigens das nop(); wird auch an anderen Stellen in der Lib verwendet, also dürftest Du eigentlich wenn es denn Probleme macht gar kein Programm erfolgreich compilieren können.
> "-std=c99"
Nimm mal gnu99.
MfG,
SlyD
radbruch
25.07.2012, 22:18
Hallo
Danke für die schnelle Antwort.
Ich verwende KamAVR welches sein eigenes Makefile automatisch erstellt:
################################################## ##############################
################################################## ##############################
## ##
## NOTE: This makefile uses GNU make syntax. ##
## ===== It may not work when called by other make utilities ##
## ##
################################################## ##############################
################################################## ##############################
################################################## ##############################
### ################################################## #############
### PROJECT NAME ################################################## #############
### ################################################## #############
################################################## ##############################
PROJECT = sd-card-test
################################################## ##############################
## ################################################## #######################
## CPU ################################################## #######################
## ################################################## #######################
################################################## ##############################
CPU = atmega2560
################################################## ##############################
### ################################################## ##################
### SOURCES ################################################## ##################
### ################################################## ##################
################################################## ##############################
OBJ = RP6M256Lib.o
OBJ += RP6M256uart.o
OBJ += RP6M256_WIFIlib.o
OBJ += sdc\partition.o
OBJ += sdc\sd_raw.o
OBJ += sd-card-test.o
OBJ += sdc\fat.o
OBJ += sdc\byteordering.o
################################################## ##############################
## ################################################## #####################
## TOOLS ################################################## #####################
## ################################################## #####################
################################################## ##############################
COMPILER = avr-gcc
ASSEMBLER = avr-gcc
LINKER = avr-gcc
ROMIZER = avr-objcopy
DUMPER = avr-objdump
################################################## ##############################
## ################################################## #####################
## FLAGS ################################################## #####################
## ################################################## #####################
################################################## ##############################
COMMON_FLAGS = -std=c99
COMMON_FLAGS += -mmcu=$(CPU)
COMMON_FLAGS += -Os
COMMON_FLAGS += -mno-interrupts
COMMON_FLAGS += -funsigned-char
COMMON_FLAGS += -funsigned-bitfields
COMMON_FLAGS += -Wall
COMMON_FLAGS += -Wstrict-prototypes
LINK_FLAGS = $(COMMON_FLAGS) -ggdb
COMPILE_FLAGS = $(LINK_FLAGS) -c -DF_CPU=16000000UL
ASSEMBLE_FLAGS = $(COMMON_FLAGS) -c -I. -x assembler-with-cpp
EEPROM_FLAGS = -j .eeprom
EEPROM_FLAGS += --change-section-lma .eeprom=0
FLASH_FLAGS = -j .text
FLASH_FLAGS += -j .data
ELF_FLAGS = --cref
ELF_FLAGS += -lm
################################################## ##############################
## ################################################## ###################
## ACTIONS ################################################## ###################
## ################################################## ###################
################################################## ##############################
COMPILE = $(COMPILER) $(COMPILE_FLAGS)
ASSEMBLE = $(ASSEMBLER) $(ASSEMBLE_FLAGS)
LINK = $(LINKER) $(LINK_FLAGS)
REMOVE = rm -f
################################################## ##############################
## ################################################## #####################
## BUILD ################################################## #####################
## ################################################## #####################
################################################## ##############################
all: elf flash eep
rebuild: clean all
clean:
$(REMOVE) $(PROJECT).hex
$(REMOVE) $(PROJECT)_eeprom.hex
$(REMOVE) $(PROJECT).elf
$(REMOVE) $(PROJECT).map
$(REMOVE) $(PROJECT).cof
$(REMOVE) $(PROJECT).lst
$(REMOVE) $(OBJ:.o=.lst)
$(REMOVE) $(OBJ)
eep: $(PROJECT)_eeprom.hex
flash: $(PROJECT).hex
elf: $(PROJECT).elf
################################################## ##############################
## ################################################## ######################
## LINK ################################################## ######################
## ################################################## ######################
################################################## ##############################
$(PROJECT)_eeprom.hex: $(PROJECT).elf
$(ROMIZER) $(EEPROM_FLAGS) -O ihex $(PROJECT).elf $(PROJECT)_eeprom.hex
$(PROJECT).hex: $(PROJECT).elf
$(ROMIZER) $(FLASH_FLAGS) -O ihex $(PROJECT).elf $(PROJECT).hex
$(PROJECT).elf: $(OBJ)
$(LINK) $(OBJ) -o $(PROJECT).elf $(ELF_FLAGS)
################################################## ##############################
## ################################################## ###################
## COMPILE ################################################## ###################
## ################################################## ###################
################################################## ##############################
%.o : %.c
$(COMPILE) $< -o $@
%.o : %.s
$(ASSEMBLE) $< -o $@
Inzwischen bin ich etwas weiter gekommen. Die union-Strucktur habe ich auskommentiert, asm habe ich in __asm__ umbenannt. Und siehe da: Es funktioniert!
_______________________
\| RP6 ROBOT SYSTEM |/
\_-_-_-_-_-_-_-_-_-_/
Hello World from RP6 CONTROL M256 WIFI!
Let's move it! :)
This message was sent via ***WLAN***!
(Kompiliert von mic 25.7.2012
Testing SD Card. Please wait (SDHC Cards will take longer)...
SD INIT OK!
opening filesystem OK!
opening root directory OK!
manuf: 0x27
oem: PH
prod: SD04G
rev: 48
serial: 0xc202
date: 2/12
size: 3768MB
copy: 0
wr.pr.: 0/0
format: 0
free: 0/0
M256_SELFTEST_TESTFILE.txt 1455
################################################## #############################
RP6 M256 SD CARD Testfile 01234567890
################################################## #############################
If you can see the two 3D Triangles below and can read this text,
SD Card reading works fine!
################################################## #############################
____ ____ ____ ____ ______________________
/\ \/\ \/\ \/\ \ /\ \
/ \___\ \___\ \___\ \___\ / \ _________________\
\ / __/_/ / / / / / \ \ \ /
\/_/\ \__/\/___/\/___/ \ \ \__________ /
/ \___\ / \___\ \ \ \ / / /
\ / __/_ _\ / / \ \ \ / / /
\/_/\ \/\ \/___/ \ \ \/ / /
/ \__/ \___\ \ \ / / /
\ / _\ / / \ \/ / /
\/_/\ \/___/ \ / /
/ \___\ \ / /
\ / / \ / /
\/___/ \/___/
################################################## #############################
Juhu :)
Gruß
mic
P.S.: Hier klemmts noch:
sd-card-test.c:283: warning: pointer targets in passing argument 1 of 'strstr' differ in signednes
uint8_t buffer[160];
uint32_t offset = 0;
intptr_t count;
while((count = fat_read_file(fd, buffer, sizeof(buffer))) > 0)
{
if(offset == 0) {
// Briefly check if the contents are correct!
// Only one single line is checked.
char* ptr = strstr(&buffer[0], "RP6 M256"); <-- Zeile 283
if(strncmp(ptr, "RP6 M256 SD CARD Testfile 01234567890", 37) != 0) {
Ah gut.
Das asm statement kann je nach Compiler und auch abhängig von den Compilerpoptionen durchaus auch anders sein.
Das ist ja eh nicht portabel.
> sd-card-test.c:283: warning: pointer targets in passing argument 1 of 'strstr' differ in signednes
Das ist an der Stelle eigentlich egal.
In der einen Lib ist es halt ein uint8_t, in der anderen ein char...
Aber hast recht sollte man vielleicht noch casten:
char* ptr = strstr((char*)&buffer[0], "RP6 M256");
MfG,
SlyD
radbruch
25.07.2012, 22:52
Hallo
Das hat ja nicht wirklich was mit recht haben zu tun, ich melde nur weiter, was mein Kompiler anmotzt. Was er damit meint ist mir meist ebenfalls rätselhaft.
Wie erwartet funktioniert dein Vorschlag:
//char* ptr = strstr(&buffer[0], "RP6 M256");
char* ptr = strstr((char*)&buffer[0], "RP6 M256");
...wird nun fehler- und warnungsfrei übersetzt. Du bist der Beste :)
Gruß
mic
So, hier auch noch eine kurze Rückmeldung von mir:
Das Modul funktioniert fehlerfrei, die Library liefert mir keine unerklärlichen Compilerfehler. Mittlerweile steht auch die Verbindung zum PC und auch meine Programm-Idee hat sich als gut realisierbar erwiesen, der Roboter lässt sich gut vom PC aus fernsteuern. Jetzt fehlt eigentlich nur noch die GUI und vielleicht ein etwas effizienteres Protokoll ;)
- Max
Hi Radbruch,
funzt dein Programm bei dir immer? Bei mir klappt es bis zur ersten Eingabe, ab der zweiten ist die Verbindung weg?!!?
Grüße
Habe da einen kleinen Fehler im Beispiel 12 entdeckt:
Wenn man cmd aktiviert hat, aber einen Bumper betätigt, wird zunächst kein Escape-Behave aktiviert. Dieser folgt dann aber prompt, wenn man den Command-Modus wieder deaktiviert...
Ist glaube ich nicht so gewollt, oder?
Grüße
radbruch
28.07.2012, 18:42
Hallo
Bei mir klappt es bis zur ersten Eingabe, ab der zweiten ist die Verbindung weg?Das Beispiel für die SD-Card erwartet keine Parameter. Hast du die Text-Datei aus dem Beispielordner in das Root-Verzeichniss der SD-Card kopiert? SD-Card ist mit FAT32 formatiert?
Jetzt fehlt eigentlich nur noch die GUI und vielleicht ein etwas effizienteres ProtokollEin WIFI-Board braucht doch keine GUI, eine Browserschnittstelle ist viel knuffiger:
// LEDs setzen und Daten der Browseranforderung anzeigen mic 28.7.2012
// https://www.roboternetz.de/community/threads/58162-Diskussion-zum-RP6-M256-WIFI-Modul?p=555651&viewfull=1#post555651
#include "RP6M256Lib.h"
uint8_t c, header_html_request[20][100], hhr_zeile=0, hhr_zeile_max=0, hhr_pos=0, hhr_params;
uint8_t leds_mask=0;
void leds_setzen(void);
void send_html_page(void);
int main(void)
{
initRP6M256();
writeString_P("\n\rBrowserdaten anzeigen mic 28.7.2012\n\r");
// Make sure WLAN Module Packet size / buffer size and flush timer is OK
enter_cmd_mode_WIFI();
issueCMD_WIFI("set comm size 1024","AOK");
issueCMD_WIFI("set comm time 10","AOK");
leave_cmd_mode_WIFI();
while(true)
{
if(getBufferLength_WIFI()) // Daten vom Browser empfangen?
{
c=readChar_WIFI(); // Zeichen einlesen...
if(hhr_pos<98) header_html_request[hhr_zeile][hhr_pos++]=c; // ...und speichern
if(c==13) // Zeilenende?
{
header_html_request[hhr_zeile][hhr_pos++]=0; // String Endekennung anfügen
hhr_zeile++; // nächste Zeile einlesen
hhr_pos=0; // Zeile startet bei Position null
stopStopwatch1();
setStopwatch1(0);
startStopwatch1(); // Timeout starten
}
}
if(getStopwatch1() > 50) // Timeout beim Empfang bedeutet Headerende
{
header_html_request[hhr_zeile][hhr_pos++]=0; // String Endekennung anfügen
hhr_zeile_max=hhr_zeile+1; // Anzahl der Zeilen speichern...
leds_setzen();
send_html_page(); // ... und antworten
hhr_zeile=0; // vorbereiten für nächsten Request-Header
hhr_pos=0;
hhr_zeile_max=0;
stopStopwatch1(); // ab jetzt kein Timeout mehr überprüfen
setStopwatch1(0);
}
}
return 0;
}
void leds_setzen(void)
{
hhr_pos=0;
do
c=header_html_request[0][hhr_pos++];
while(c && (c != 'G'));
if(c) // GET oder POST im Request gefunden?
hhr_params=0; // GET
else
hhr_params=hhr_zeile_max-1; // kein GET
hhr_pos=0;
leds_mask=0;
do
{
c=header_html_request[hhr_params][hhr_pos++];
if(c) switch(c)
{
case 'a': leds_mask |= 1; break;
case 'b': leds_mask |= 2; break;
case 'c': leds_mask |= 4; break;
case 'd': leds_mask |= 8; break;
}
}while(c);
setLEDs(leds_mask & 0Xf);
}
void send_html_page(void)
{
// Erhalt der Anforderung quittieren:
writeString_P_WIFI("HTTP/1.1 200 OK\r\n");
writeString_P_WIFI("Content-type: text/html\r\n");
writeString_P_WIFI("\r\n");
stopStopwatch1();
setStopwatch1(0);
startStopwatch1();
// Send HTML Content:
writeString_P_WIFI("<html>\n<head>\n<title>RP6-WIFI: HTTP-Requestdaten anzeigen</title>\n</head>\n<body>\n");
writeString_P_WIFI("<h1>RP6-WIFI: LED setzen mit GET und POST</h1>\n");
writeString_P_WIFI("<form action=\"\" name\"get\" method=\"get\">\n");
writeString_P_WIFI("gSL4<input type=\"checkbox\" ");
if(leds_mask & 8) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL4\" value=\"d\"> \n");
writeString_P_WIFI("gSL3<input type=\"checkbox\" ");
if(leds_mask & 4) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL3\" value=\"c\"> \n");
writeString_P_WIFI("gSL2<input type=\"checkbox\" ");
if(leds_mask & 2) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL2\" value=\"b\"> \n");
writeString_P_WIFI("gSL1<input type=\"checkbox\" ");
if(leds_mask & 1) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"gSL1\" value=\"a\"> \n");
writeString_P_WIFI("<input type=\"submit\" value=\"GET\">\n");
writeString_P_WIFI("</form>\n");
writeString_P_WIFI("<form action=\"\" name\"post\" method=\"post\">\n");
writeString_P_WIFI("pSL4<input type=\"checkbox\" ");
if(leds_mask & 8) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL4\" value=\"d\"> \n");
writeString_P_WIFI("pSL3<input type=\"checkbox\" ");
if(leds_mask & 4) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL3\" value=\"c\"> \n");
writeString_P_WIFI("pSL2<input type=\"checkbox\" ");
if(leds_mask & 2) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL2\" value=\"b\"> \n");
writeString_P_WIFI("pSL1<input type=\"checkbox\" ");
if(leds_mask & 1) writeString_P_WIFI("checked ");
writeString_P_WIFI("name=\"pSL1\" value=\"a\"> \n");
writeString_P_WIFI("<input type=\"submit\" value=\"POST\">\n");
writeString_P_WIFI("</form>\n");
for(hhr_zeile=0; hhr_zeile < hhr_zeile_max; hhr_zeile++)
{
hhr_pos=0;
writeString_P_WIFI("Request Zeile ");
writeInteger_WIFI(hhr_zeile, 10);
writeString_P_WIFI(": ");
do
{
c=header_html_request[hhr_zeile][hhr_pos++];
if(c) writeChar_WIFI(c);
}while(c);
writeString_P_WIFI("\n<br>\n");
}
writeString_P_WIFI("\n<br>\nDie Parameter befinden sich in Zeile ");
writeInteger_WIFI(hhr_params, 10);
writeString_P_WIFI(":\n<br>\n");
hhr_pos=0;
do
{
c=header_html_request[hhr_params][hhr_pos++];
if(c) writeChar_WIFI(c);
}while(c);
writeString_P_WIFI("<br>\nleds_mask ist ");
writeInteger_WIFI(leds_mask, 2);
writeString_P_WIFI("\n<br><br>\n<small>\n[Ladezeit der Seite: ");
writeInteger_WIFI(getStopwatch1()+1, 10);
writeString_P_WIFI("ms]\n<br><br>\nmic 29.7.2012\n</small>\n");
writeString_P_WIFI("</body>\n");
writeString_P_WIFI("</html>\n");
stopStopwatch1();
setStopwatch1(0);
// Wait a bit and then close connection:
mSleep(50); // Depending on the content you may have to wait longer.
enter_cmd_mode_WIFI();
writeCommand_WIFI("close\r");
leave_cmd_mode_WIFI();
}
Zwar noch etwas holperig und viel "zu Fuss" programmiert, weil ich mit HTML nicht wirklich geübt bin, aber immerhin zeigt es den Ansatz. Leider funktioniert es nicht mit meinem 9er IE, aber mit dem FF klappts wie erwartet. Es ist natürlich noch nicht perfekt.
Das hier stört mich noch sehr dabei, weil es massig Speicherplatz verschwendet:
header_html_request[20][100]
Aber der m256 hat ja reichlich davon. ;)
Gruß
mic
Hi,
ich meinte
Bei mir klappt es bis zur ersten Eingabe, ab der zweiten ist die Verbindung weg? zu deinem ersten vorgestellten Webbrowser-Programm.
Dort konnte ich einmal die LEDs nach Wunsch setzen, beim zweiten mal kam ein Verbindungsabbruch...
Soso, LabView-Kommunikation steht endlich. Die Datenauswertung der Messwerte funzt seit gestern, das Senden von Befehlen klappt im Allgemeinen auch schon. Jedoch alles momentan nur mit dem Example12.
Fehlt also nur noch die nette Befehlsstruktur von FabianE.!!!!!
:D
Mal sehen, ob ich das hinbekomme - ansonsten: FabianE., was macht das Programmieren???
Grüße!
So, mein Test-Projekt nimmt auch mehr und mehr Form an. Mittlerweile werden fast alle Sensordaten übertragen und grafisch in einer Benutzeroberfläche dargestellt, auch die ersten PC-seitigen Programme habe ich schon getestet.
Probleme mit dem M256 gab es dabei zu keiner Zeit - lediglich ein paar Verbindungsabbrüche, wenn zu viele Befehle gesendet werden - der PC ist dann doch noch etwas schneller ;)
So sieht es bisher aus:
22981
Der Sourcecode sieht (besonders auf C-Seite) nicht nicht so toll aus, hier ist noch einiges an Refactoring zu tun.
Der aktuelle Zwischenstand ist hier zu finden: http://code.google.com/p/robobridge/
- Max
Wow, nicht schlecht!
Mal ne frage: Sind mit AVR eigentlich Funktionen wie str_fill oder Str_ReadInt erlaubt?
Bräuchte das für die Befehlsstrucktu-Aufdröselung von FabianE.'s Remotrol...
Grüße
Was heist erlaubt? Das sind meines Wissens Funktionen aus der Lib vom M128 bzw. von den älteren CControl Boards und gehören quasi zum "Betriebssystem" der jeweiligen Geräte... die kannst du dir aber natürlich in C nachbauen... schon mal gegoogelt?
LG Rolf
Jo klar!
Ich wollte nur wissen, ob die schon vorhanden sind in den Libs, oder ob man sie sich eben erst zusammenbauen muss.
Wenn ich mir die Dokumentation dieser C-Control-Funktionen anschaue meinst Du vermutlich folgendes:
str_fill scheint diesem C-Code zu entsprechen: http://www.koders.com/c/fidB67BE9216F72F7450083780D39A7B505E7EC51E2.aspx
Str_ReadInt heißt in C "itoa"
strlen (vor Deinem Edit) ist in C natürlich auch "erlaubt", hier wird einfach gezählt, wie viele Zeichen vor dem '\0' stehen.
genau :D
Das Str_fill habe ich schon gefunden, für strlen hatte ich schon ne Funktion und das mit dem readInt hatte ich vergessen. Und ich glaub, es müsste atoi sein, oder?
Danke Dir!
Stimmt, da hab ich mich wohl vertippt...
atoi: string to integer
itoa: integer to string
Hi noch mal,
habe nun den ersten Teil mal soweit zusammen.
Würde sich jemand mit mehr Sachverstand den bisherigen Code mal ansehen? Es ist im Prinzip das Beispiel 12 der M256. Ich habe in der Main.c nur die beiden Funktion "void behaviour_wifiControl(void)" verändert und eine Funktion "int cmdsplit(void)" hinzugefügt.
Keine Fehler beim Kompilieren, nur die Warnung "RP6M256_12_WIFI_REMOTE_2.c:487: warning: 'x' may be used uninitialized in this function".
Meine Fragen:
Klappt das so?? :D
und in der Funktion "int cmdsplit(void)" habe ich anstelle der "normalen" str_fill einfach eine for-Schleife gelegt. Klappt das so???
Und wenn ich den atoi-Aufruf mache, ist mein Array "tmp" mit einigen Ziffern besetzt, der Rest wurde vorher mit "x" aufgefüllt. Sieht also z.B. so aus (für 10 Einträge) : |#|3| : |2| : |5|0|*|x|x|, wenn der gesendete String dieser war: #3:2:50*
Wird das dann richtig übernommen? Das resultierende Array params sollte danach so aussehen: |3|2|50|.
Danke schon einmal! Möchte erst einen Sachkundigen Rat hören, bevor ich daran weiterbastle. Sonst wird das debugging später etwas schwer für mich.
In die untere Funktion kommt dann noch ein Funktionsaufruf für das Bearbeiten dieses gesplitteten Strings.
Hier der Code:
//This Funktion splits the incoming String. This String looks like: #1:30:50:0:13*.
// "#" = Begin of Command
// "*" = End of Command
// "1" is for "driving"
// "30" ist for left engine, "50" ist for right engine -> driving a curve
// "0" is for "driving forwards"
// "13" is just an increasing number, increased after every command
#define MAX_PARAMS 6
int params[MAX_PARAMS];
int cmdsplit(void)
{
int cursor;
cursor=0;
int param_nr;
param_nr =0;
// Parameterarray initialisieren
int i;
for (i=0;i<MAX_PARAMS;i++)
params[i] = -1;
/* Prüfen ob der command-string gültig beginnt */
if ((receiveBuffer_WIFI[cursor] != '#'))
return -1;
while (receiveBuffer_WIFI[cursor] != '\0' && receiveBuffer_WIFI[cursor] != '*') // prüfen ob das ende erreicht wurde
{
char tmp[10];
char x;
for (i=0;i<10;i++)
tmp[i] = x;
//Str_Fill(tmp,'x',10);//!!!!!!!!!!!!!!!!!!!
cursor++;
int j;
j= 0;
while(receiveBuffer_WIFI[cursor] != ':' && receiveBuffer_WIFI[cursor] != '*')
{
tmp[j] = receiveBuffer_WIFI[cursor];
cursor++;
j++;
}
params[param_nr] = atoi(tmp); // wert auslesen
if (param_nr >= MAX_PARAMS) // sind mehr parameter verfügbar als erwartet? Stimmt was mit dem Commando nicht...
return -1;
param_nr++;
// Überspingen der ausgelesen Zeichen und ermitteln des nächsten "interessanten" Teils im string.
while((receiveBuffer_WIFI[cursor] != ':') && (receiveBuffer_WIFI[cursor] != '*') && (receiveBuffer_WIFI[cursor] != '\0'))
cursor++;
}
return param_nr;
}
/**
* This behaviour allows to remotely control the Robot with Text commands that
* are sent over a WIFI connection (with a small modification also via standard serial interface).
*
* It basically receives a text line (with \r or \n or both at the end) and checks if
* it is a command or a number. If it is a number it sets the speed of the motors.
*
* This behaviour first waits to be activated, then it surpresses all other behaviours
* (except for the low battery behaviour).
*
*/
void behaviour_wifiControl(void)
{
static uint8_t speedl = 0;
static uint8_t speedr = 0;
switch(wifiControl.state)
{
case IDLE:
if(getInputLine_WIFI())
{
if(strcmp(receiveBuffer_WIFI,"cmd")==0 || strcmp(receiveBuffer_WIFI,"command")==0)
{
writeString_P_WIFI("\nWIFI COMMAND MODE ACTIVE\n");
wifiControl.state = WIFI_ACTIVE;
break;
}
else if(!behaviour_command_interpreter()) // Call behaviour control interpreter code
writeString_P_WIFI("\nYou must enter cmd or command to enable command mode!\n");
}
break;
case WIFI_ACTIVE:
if(getInputLine_WIFI())
{
if(strcmp(receiveBuffer_WIFI,"z")==0 || strcmp(receiveBuffer_WIFI,"quit")==0)
{
writeString_P_WIFI("\nWIFI COMMAND MODE EXIT!\n");
wifiControl.state = IDLE;
}
else if( strcmp(receiveBuffer_WIFI,"fwd")==0 || strcmp(receiveBuffer_WIFI,"f")==0 || strcmp(receiveBuffer_WIFI,"w")==0)
{
wifiControl.speed_left = speedl;
wifiControl.speed_right = speedr;
writeString_P_WIFI("\nFWD!\n");
wifiControl.dir = FWD;
}
else if(strcmp(receiveBuffer_WIFI,"bwd")==0 || strcmp(receiveBuffer_WIFI,"b")==0 || strcmp(receiveBuffer_WIFI,"s")==0)
{
wifiControl.speed_left = speedl;
wifiControl.speed_right = speedr;
writeString_P_WIFI("\nBWD!\n");
wifiControl.dir = BWD;
}
else if(strcmp(receiveBuffer_WIFI,"left")==0 || strcmp(receiveBuffer_WIFI,"l")==0 || strcmp(receiveBuffer_WIFI,"a")==0)
{
if(speedl/2 >= 30)
{
wifiControl.speed_left = speedl / 2;
wifiControl.speed_right = speedr / 2;
}
else if(speedl > 10)
{
wifiControl.speed_left = 30;
wifiControl.speed_right = 30;
}
writeString_P_WIFI("\nLEFT!\n");
wifiControl.dir = LEFT;
}
else if(strcmp(receiveBuffer_WIFI,"right")==0 || strcmp(receiveBuffer_WIFI,"r")==0 || strcmp(receiveBuffer_WIFI,"d")==0)
{
if(speedl/2 >= 30)
{
wifiControl.speed_left = speedl / 2;
wifiControl.speed_right = speedr / 2;
}
else if(speedl > 10)
{
wifiControl.speed_left = 30;
wifiControl.speed_right = 30;
}
writeString_P_WIFI("\nRIGHT!\n");
wifiControl.dir = RIGHT;
}
else if(strcmp(receiveBuffer_WIFI,"fl")==0 || strcmp(receiveBuffer_WIFI,"q")==0)
{
if(speedl/2 >= 30)
{
wifiControl.speed_left = speedl / 2;
wifiControl.speed_right = speedr;
}
else if(speedl > 10)
{
wifiControl.speed_left = 20;
wifiControl.speed_right = 40;
}
writeString_P_WIFI("\nCURVE FWD LEFT!\n");
wifiControl.dir = FWD;
}
else if(strcmp(receiveBuffer_WIFI,"fr")==0 || strcmp(receiveBuffer_WIFI,"e")==0)
{
if(speedr/2 >= 30)
{
wifiControl.speed_left = speedl;
wifiControl.speed_right = speedr / 2;
}
else if(speedr > 10)
{
wifiControl.speed_left = 40;
wifiControl.speed_right = 20;
}
writeString_P_WIFI("\nCURVE FWD LEFT!\n");
wifiControl.dir = FWD;
}
else if(strcmp(receiveBuffer_WIFI,"stp")==0 || strcmp(receiveBuffer_WIFI,"x")==0)
{
writeString_P_WIFI("\nSTOP!\n");
wifiControl.dir = FWD;
wifiControl.speed_left = 0;
wifiControl.speed_right = 0;
}
else if(!behaviour_command_interpreter()) // Call behaviour control interpreter code
{
cmdsplit();
/*uint8_t pwm_tmp = atoi(receiveBuffer_WIFI);
if(pwm_tmp == 0)
{
uint8_t not_a_number = 0;
int8_t i;
for(i = strlen(receiveBuffer_WIFI)-1; i >= 0 ; i--)
if((receiveBuffer_WIFI[i] < '0') || (receiveBuffer_WIFI[i] > '9'))
{
not_a_number = 1;
writeString_P_WIFI("\n### NOT A NUMBER! ###\n");
}
if(not_a_number) {
pwm_tmp = speedl;
break;
}
}
else if(pwm_tmp > 160){pwm_tmp = 160; writeString_P("\n--> Power limited to 160!");}
else if(pwm_tmp < 0) {pwm_tmp = 0;}
writeString_P_WIFI("\n--> Change speed to:");
writeInteger_WIFI(pwm_tmp,DEC);
writeChar_WIFI('\n');
wifiControl.speed_left = pwm_tmp;
wifiControl.speed_right = pwm_tmp;
speedl = pwm_tmp;
speedr = pwm_tmp;*/
}
}
break;
case WIFI_EXECUTE_CMD:
wifiControl.state = WIFI_ACTIVE;
break;
default:
wifiControl.state = IDLE;
break;
}
}
EDIT: Nun, was ich möchte, ist eine Remote wie die von FabianE., gepaart mit den Cruise- und Avoid-Funktionen des Beispiels 12. Nur zur Info ;)
Hmmm... Ich lasse mir nun das fertige Array zusenden und versuche es auch gleich zu verarbeiten.
Das Zurücksenden klappt super, aber der Befehl wird nicht ausgeführt... ???
Hier die Ausgabe, wenn ich die zwei momentan möglichen Befehle 1 (fahren) und 7 (stoppen) sende:
("1" erwartet dann natürlich noch die Geschwindigkeiten der rechten und linken Kette und die Fahrtrichtung)
WIFI COMMAND MODE ACTIVE
#7:2*
Params:7|2|-1|-1|-1|-1
#1:20:20:0:4*
Params:1|20|20|0|4|-1
Der Code, den ich zu der Funktion aus dem letzten Beitrag hinzugefügt habe:
#define CMD_SET_SPEED 1
#define CMD_SET_STOP 7
...
else if(!behaviour_command_interpreter()) // Call behaviour control interpreter code
{
cmdsplit();
switch(params[0])
{
case CMD_SET_SPEED:
moveAtSpeed(params[1],params[2]);
changeDirection(params[3]);
break;
case CMD_SET_STOP:
stop();
break;
}
//Hier wird mal getestet, ob auch alles richtig im params-Array drinnen steht:
writeString_P_WIFI("\nParams:");writeInteger_WIFI(params[0],DEC);
writeString_P_WIFI("|");writeInteger_WIFI(params[1],DEC);
writeString_P_WIFI("|");writeInteger_WIFI(params[2],DEC);
writeString_P_WIFI("|");writeInteger_WIFI(params[3],DEC);
writeString_P_WIFI("|");writeInteger_WIFI(params[4],DEC);
writeString_P_WIFI("|");writeInteger_WIFI(params[5],DEC);
writeString_P_WIFI("\n");
}
Scheinbar lag der Befehl "moveAtSpeed" mit den anderen in diesem Example verwendeten Befehlen "wifiControl.dir", "wifiControl.speed_left" und "wifiControl.speed_right" im Streit... Habe das nun geändert und es funktioniert :D
Ich hoffe, ich habe bis zum Wochenende eine halbwegs akzeptable Fernbedienung auf die Beine gestellt.
Grüße
Mein Projekt nimmt langsam Gestalt an!
Ich habs mal in meinen alten Thread (https://www.roboternetz.de/community/threads/58177-LabView-Fernsteuerungs-Tool-mit-diversen-Routinen/page4?p=557488#post557488) rein.
Grüße
@Max Web und fabqu:
Eure Bedienoberflächen sehen wirklich schon sehr sehr schick aus!
Weiter so! :)
MfG,
SlyD
Danke dir, wird schon!
Das neue LabVIEW 2011 und auch 2012 sind nicht mehr ganz so eckig und kantig und Windows-98-mäßig :D
Jetzt kann sich das auch mal sehen lassen.
Hallo zusammen,
ich habe heute versucht, die M32 Platine von der M256 aus er I2C anzusprechen. Dabei habe ich gemerkt, dass es dazu noch gar keine Bibliotheken-Funktionen gibt.
Also habe ich versucht, selber etwas zu erstellen. Ich habe ganz einfach mit den Leds auf der M32 angefangen. Wie schon früher hier erwähnt, habe ich dabei das meiste bei der Kommunikation zur Base abgeschaut.
Grundsätzlich scheint es zu funktionieren, aber irgendwie will es doch noch nicht so, wie es sollte. Die Leds sollten genau denselben Status haben, wie die der M256.
Eventuell kann jemand von euch den Fehler finden. Hier (https://dl.dropbox.com/u/54952272/I2C_Testfirmware.rar)könnt Ihr die Firmware mit allen nötigen c und h Dateien runterladen.
Grüsse Filou
Ich wollte fragen, ob es eigentlich (ohne große Umstände) möglich ist, auf die M256 OHNE Router zuzugreifen? Also direkt vom PC (Wlan-Karte) auf den RP6??
Grüße
Ja per ADHOC Modus
(Im Konfigurationsdialog aktivieren)
MfG,
SlyD
Ah, danke. Schon mal jemand gemacht? Wird ja im Manual "nicht weiter beschrieben..."
Ja natürlich (sogar in diesem Thread) ;) .
Das funktioniert mit jedem Betriebssystem etwas anders daher wird das da nicht beschrieben.
radbruch
16.09.2012, 21:05
Hallo
Da sich die RP6-Spezialisten um die Einbindung des M256 in die RP6-Familie kümmern versuche ich ein "Waisenkind" zu adoptieren:
http://youtu.be/EC_VEmwQgjM
(Noch ein Vorkucker: http://www.youtube.com/watch?v=_XI_xrk95H8)
Mechanisch bin ich fertig, jetzt starte ich mit der Software. Wenn SlyD es erlaubt werde ich die RP6-Lib auf die bee übertragen...
Gruß
mic
Die RP6Lib ist GPL... http://de.wikipedia.org/wiki/GNU_General_Public_License
Da gibts nicht viel zu fragen. Und für Uri et Orbi ist jemand anderes zuständig.
Siehe insbesondere auch http://de.wikipedia.org/wiki/GNU_General_Public_License#Copyleft-Prinzip
Aber ne andere Frage... hat sich schon mal jemand mit Ethersex auf der M256 beschäftigt?
Nein kein Schweinkram.... http://www.ethersex.de/index.php/Main_Page
Auf ATMega32 und 644 soll das sehr gut laufen - incl ENC28J60 also z.B. dem NETIO-Board von Polin.
Müsste dann auf der M256 ja auch gehen wenn man den WLAN Chip da statt dem LAN chip aktiviert.
Das wär zumindest mal vernünftige Software für die M256 ...
LG Rolf
@Radbruch: Du darfst damit wie Rolf schon sagt alles machen was Du willst, die Quellen sind ja komplett Opensource, GPLv2.
Das M256 ist auch gut geeignet auf anderen Robotern eingesetzt zu werden, also mach ruhig :-)
@Rolf: Die Lib ist nett, aber vieles davon wird mit dem RP6 WLAN Modul nicht benötigt, im WLAN Modul steckt ein 32 Bit Prozessor der vieles davon schon übernimmt (inkl. UDP, TCP, FTP, NTP... )
Man könnte aber natürlich Teile davon portieren für bestimmte Anwendungen die da noch fehlen.
MfG,
SlyD
Hi,
eine Frage an die Fachmänner.
Hardware:
RP6
RP6v2 Control M256 WiFi
M32 (nicht installiert)
Software:
Ordner RP6_M256......
RP6M256_10_Move2.hex
Ordner RP6BASE....
RP6Base_I2C_Slave
Programm RP6Base_I2C_Slave und RP6M256_10_Move2 erkennt nach WiFi Loader Start nur noch die Bumber?
Motoren laufen.
Wenn ich die START Taste am Baseboard drücke, funktioniert alles. USB Start mit Serial Loader funktioniert auch.
Gruß
Kurt
Hallo Kurt,
ja, da scheint irgendwas beim Start nicht zu passen ich schaus mir später diese Woche mal an.
Es funktioniert übrigens auch mit UPLOAD+Start im WIFI Loader normal.
Bis dahin: Upload+Start benutzen oder im WIFI Terminal "start_program" eintippen.
Damit gehts auch.
MfG,
SlyD
Hallo Dirk,
danke für die schnelle Info. Upload+Start funktioniert.
Gruß
Kurt
Hallo SlyD,
gib es noch mehr Befehle wie 'start_program' etc.
Die cmd Palette ist bekannt (.$$$) - get wlan etc.
Danke
Kurt
Meinst Du jetzt Befehle für den Bootloader oder Befehle für das WLAN-Modul?
Die Befehle für das WLAN-Modul sind auch alle noch einmal hier zu finden: http://www.rovingnetworks.com/resources/download/93/WiFly_User_Manual
Was den Bootloader angeht: Schau Dir auch mal die Sourcen des RP6 Flash Writers an - dort ist auch einiges zu finden: https://www.roboternetz.de/community/threads/51352-RP6FlashWriter-Der-Opensource-RP6-Loader .
Allerdings ist der neue Bootloader ein wenig anders als der des RP6.
Meinst Du jetzt Befehle für den Bootloader oder Befehle für das WLAN-Modul?
Die Befehle für das WLAN-Modul sind auch alle noch einmal hier zu finden: http://www.rovingnetworks.com/resources/download/93/WiFly_User_Manual
Was den Bootloader angeht: Schau Dir auch mal die Sourcen des RP6 Flash Writers an - dort ist auch einiges zu finden: https://www.roboternetz.de/community/threads/51352-RP6FlashWriter-Der-Opensource-RP6-Loader .
Allerdings ist der neue Bootloader ein wenig anders als der des RP6.
Hi und Danke.
Ich meine die Bootloader - Anweisungen.
Mit dem Programm RobotLoader Option WiFiLoader aufrufen. Verbindung über Wlan hat funkioniert.
Jetzt klick auf WiFi Terminal.
Hier können wir den Befehl start_program zum Roboter RP6 senden.
Leider funktioniert der direkte Klick WiFi Loader 'Start' noch nicht optimal.
BaseBoard wird nicht richtig initialisiert.
Welche Funktionen gibt es noch?
Gruß
Kurt
Hallo,
ich komm einfach nicht weiter. Ich bin stolzer Besitzer eines RP6, M32 und WiFi-Modul.
Ich habe an einem Servo ein SRF08 Ultraschallmodul befestigt, an der M32 habe ich es zum laufen gebracht, dass der Servo
den SRF geschwenkt hat und er somit "Hindernisse" gut erkannt hat. Das habe ich dank der ServoLib hinbekommen.
Ich will die M32 durch die WiFi ersetzen, aber ich schaffe es nicht das Servo anzusteuern.
Kann mir jemand einen Loesungsansatz geben? Am besten waere PWM, aber ich weiss nicht wie ich einen 2ten Timer programmiere.
Ich habe auch versucht die ServoLib auf die WiFI zu Uebertragen, leider ohne erfolg.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.