PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-XV WiFly Modul von Sparkfun



Christian H
16.12.2012, 11:56
Hallo Gemeinde,

ich habe letzte Woche das WiFly-Modul RN-XV http://www.sparkfun.com/products/10822von Sparkfun bekommen und will kurz über meine ersten Erfahrungen damit berichten, da ich im Forum noch nichts darüber gefunden habe. Das Modul ist einfach ins wlan einzubinden, wenn man sich an das Manual http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-UM.pdf hält. Ist nicht so wild, wie´s auf den ersten Bilck erscheint. Das Modul verträgt nur 3,3 V, braucht also einen extra Spannungsregler wenn man mit 5 V arbeitet. Auch der Pegel für UART-RX muß mit einen Spannungsteiler (habe 1,8 und 3,3 kOhm genommen) angepaßt werden. Abstand zwischen den Pins ist 2 mm. Habe deshalb bei einer 2mm- Sockelleiste die Pins 4 bis 9 umgebogen, da ich für meine Zwecke nur + - Rx und TX brauche. So paßt die Sockelleiste dann auch auf eine 2,7mm Platine.
Die Voreinstellung für Uart ist 9600baud. Dann meldet sich das Modul automatisch. Mit $$$ kommt man in den Command-Modus und gibt dann alle Angaben wie im Manual beschrieben ein.

Ich will bei meinen rasenrobo https://www.roboternetz.de/community/threads/17785-Rasenrobo-mit-Induktionsschleife-Schaltbilder-Hallsensor/page31?highlight=rasenrobo die Funke mit dem easyradio TR-900 durch das WiFly ersetzen. Brauche also von dem Modul nur Uart und als Übertragungsprotokoll UDP. Als Gegenstelle habe ich auf meinem Rechner ein VB6-Programm mit Winsock. Sowohl im VB-Programm als auch dem WiFly-Modul müssen natürlich die IP-Adressen und Ports und als Protokol UDP eingegeben werden. Und schon funktioniert´s. Ansonsten kann man die wlan-Verbindung mit dem Terminalprogramm Tera Term (http://www.rovingnetworks.com/support) sehr gut testen, besser als mit Hyperterminal von windoofs.

Das Modul kann noch mehr: FTP, HTML-Client. Da müßte man sich noch etwas reinknien. Außerdem hat´s , 8 I/O und 3 analoge Eingänge.

Kleiner Nachteil: Der Stomverbrauch beträgt etwa 38 mA im Vgl. zu 19mA beim Easyradio.

Kosten: 27,80€. Dazu kommen allerdings noch Versand und 6 € Zoll. Mußte das Teil selbst in Garching beim Zollamt abholen.

Beste Grüße

Christian H

jcrypter
17.12.2012, 08:13
Guten Morgen!

Es freut mich sehr zu lesen, dass noch jemand außer mir sich hier mit dem beschäftigt :)
Bei mir ist es bisher nicht über die Theorie hinausgegangen, da ich unsicher war ob ich in der Lage bin, das was ich vorhabe wirklich umzusetzen.

Hast Du dich auch mit der Kommunikation zwischen zwei Mikrocontrollern über das Modul beschäftigt?
Bzw weißt Du wie man das umsetzen kann?

Mit welcher Sprache programmierst Du deinen Roboter?

hier ist meine Frage zu dem Modul:
https://www.roboternetz.de/community/threads/59892-WLAN-Chip-RN-XV-Kommunikation-mit-Mikrocontroller?highlight=crypi

viele Grüße,
Crypi

radbruch
17.12.2012, 09:20
Hallo

Der RN-171 wird auch im RP6M256Wifi eingesetzt. Die Kommunikation mit dem Mega256 läuft über dessen USART3. Anleitungen und Beispiele (auch für den RN-171) gibts auf der arexx-HP: http://arexx.com/rp6/html/de/soft_doc_rp6m256.htm

Gruß

mic

Christian H
17.12.2012, 14:04
Aha, gut zu wissen, dass der RN-171 in dem Wifly-Teil der gleiche ist wie im RP6M256Wifi.

Die Verbindung von 2 Wifly geht sowohl direkt (Adhoc-Modus) oder über Router. Beides sollte nach dem Manual nicht schwer einzustellen sein. Ich habe gestern noch ein kleines Problem gehabt, insofern als die Verbindung WiFly(Tx)-Uart-(Rx)Microcontroler Aussetzer hatte. In der Gegenrichtung dagegen keine Probleme. Auch die Verbindung WiFly-UART-Computer hat problemlos funktioniert. Entweder es liegt an den unterschiedlichen Pegel oder es braucht noch ein paar Kondensatoren an der gemeinsamen Versorgungsspannung vom Microcontroler und WiFly. Ggf. braucht´s einen Pegelwandler. Das sollte aber hinzubekommen sein. Komme erst am Mittwoch dazu das auszuprobieren.

Der Microcontroler ist mit Basic programmiert. Um nur ein paar Daten auszutauschen ist meiner Meinung nach das UDP Protokoll ausreichend, schnell und auch einfach zu programmieren.

Beste Grüße

Christian

Christian H
19.12.2012, 09:35
Hallo,
ich habe soeben versucht herauszufinden weshalb die Übertragung WiFly(Tx) > (Rx)Microcontroler nicht richtig funktioniert. Also an unterschiedlichen Pegel liegt´s nicht, da mit einem VB6 selbstgestrickten Terminalprogramm alles problemlos funktioniert, sowohl mit dem UDP als auch TCP - Protokoll. Deshalb ist mir das Problem erst gar nicht aufgefallen. Das Problem tritt nur auf wenn ich das Telnet TerminalProgramm Tera Term Pro verwende. In dem Programm kann man mit broadcast command Texteingaben oder Befehle an das WiFly schicken. Für Befehle wie z.B. $$$ oder get ip klappt das auch. Nur wenn ich einen Text verschicke (mit CR beendet), kommt am WiFly wohl nur der CR an.
Für den den´s interessiert: In dem Microcontroler ist folgendes Programm geladen:


$regfile = "ATTINY2313.dat"
$crystal = 4000000
Dim Empf As String * 44
$baud = 19200
Echo Off
Enable Interrupts
Do
Empf = ""
Input "Hallo" , Empf
Print Empf + Chr(13)
Loop
End


WiFly sollte mir also alles was ich vom TerminalProgramm sende wieder retour schicken. Und jetzt kommt der Oberklopper: Wenn ich den Controler resete, klappt das genau einmal. Bei jedem weiteren Versuch kommt zwar "Hallo" an, aber Empf bleibt leer. Das ganz klappt aber Gott sei Dank mit meinem selbstgestrickten Terminalprogramm.

Ich check´s echt nicht. Hat jemand mit dem Tera Term Pro bereits gearbeitet und ein ähnliches Problem gehabt? Kennt Ihr ein anderes Terminalprogramm das man hierfür verwenden kann?

Viele Grüße

Christian

radbruch
19.12.2012, 09:45
Hallo

Print Empf + Chr(13)


Print sendet automatisch ein CR, mit deinem zusätzlich eingefügten Chr(13) erzeugst du eine zweite Zeile. Entweder Chr(13) weglassen oder die Zeile mit ; beenden.

Ich hoffe, das passt.

Gruß

mic

Christian H
19.12.2012, 09:57
danke radbruch,

habe sofort Deinen Tip ausprobiert. Auch mit Print Empf das gleiche Problem. Habe bereits vorher einige Varianten mit cr crlf lf, auch auf Seiten des Terminalprogramms ausprobiert und es funktioniert nicht. Verrückt, dass es bei jedem reset funktioniert aber nicht nach Durchlaufen der Schleife

Christian H
19.12.2012, 12:08
Hallo,

habe die Ursache doch noch gefunden. In dem Tera Term Pro muss bei den Einstellungen vor dem Verbindungsaufbau bei Service nicht Telnet sondern Other angelickt sein. Dann klappt´s.

Christian

engineer
22.12.2012, 17:06
Darf ich fragen, was Du an Bruttobandbreite damit hinbekommst?

Christian H
22.12.2012, 21:07
Die Datenrate über wlan ist einstellbar von 1Mbit/s bis 54Mbit/s
Uart Baud rate von 2400 bis 921600

Die Einstellung 54 Mbit/s funktioniert auch bei niedrigster Transmit power über 2 Stockwerke bei relativ ungünstigen Verhältnissen zwischen router und Wifly. Die Transmit power kann man noch um 12 dbm erhöhen. Da ist also noch etwas Luft nach oben.

Der Flaschenhals ist wohl eher die Dateneingabe. Mit dem o.g. Basic Programm komme ich nur bis 19200 baud. Was aber wohl an dem Attiny2313 liegt. Hohe Uart Baud raten konnte ich nur behelfsmäßig wie folgt testen:


$regfile = "ATTINY2313.dat"
Config Pind.0 = Input
Config Pind.1 = Output
Do
Portd.1 = Pind.0
Loop


So kommen alle Eingaben bis 460800 korrekt retour.
Bei 921600 kommt überwiegend Schrott. Dies liegt wohl am zu langsamen Attiny (8 MHz) und nicht am WiFly.
(Nachtrag: warum einfach wenn´s auch kompliziert geht. habe eben am Wifly einfach Tx und Rx kurzgeschlossen und schon gehn auch 921600 baud)

Alles hängt sicher auch noch davon ab, wie ausgelastet das Netz ist. Habe keine Ahnung was bei der Übertragung wirklich passiert. Ich brauche auch keine hohe Raten und gehe lieber auf 1 Mbit/sec runter, wodurch die Reichweite steigt. Einen Vergleich mit dem easyradio kann ich erst im Frühjahr ziehen, wenn der rasenrobo wieder läuft. Dann wird sich´s zeigen ob auch Störungen von den Motoren etc. weggesteckt werden.

Bis jetzt bin ich aber voll zufrieden.

Grüße

Christian

Christian H
31.12.2012, 16:22
Hallo,

habe heute etwas mit dem WiFly gespielt. Im Manual ist angegeben, dass man es als HTML Client einstellen kann, der Daten sowohl an einen web server senden, als auch vom web server abrufen kann. Habe mir hierzu extra den Apache Server installiert. Habe aber keine Verbindung zustande gebracht.

Umgekehrt kann man aber mit einem web browser Daten vom WiFly abrufen. Im Manual ist hierzu nicht´s angegeben. Das WiFly läßt sich aber als Server konfigurieren. Als IP Protokol muß man HTTP und TCP aktivieren (set ip protocol 1) und die Übertragung des header einstellen (z.B. set optio format 1). Dann läßt sich z.B. mit dem IE Explorer über IP:Port eine Verbindung zum WiFly herstellen. Je nach Einstellung sendet das WiFly z.B. wiederholt den Header, die Eingaben am Uart, oder die Sensordaten von den Ports. Wüßte aber nicht wie man mit dem IE Explorer Daten oder Abfragen an das WiFly schicken kann. Anbei ein screenshot der zeigt wie die Daten am IE Explorer ausgegeben werden. Wahrscheinlich läßt sich das WiFly zu einem webserver ausbauen, wenn man ausreichende Kenntisse über HTTP hat. Ansonsten ist die Datenübertragung mit einem Terminalprogramm wie dem Tara Term praktikabler.


Wünsche Allen ein gutes neues Jahr!

Christian

Christian H
06.01.2013, 21:21
Hallo Leute,

war ein langer Kampf, aber jetzt habe ich es geschafft das WiFly als WebServer einzurichten. WiFly schickt im Sekundentakt Daten an den Client (Firefox besser als IExplorer). Und vom Client können Daten ans WiFly geschickt werden. Das Programm ist in einem ATmega32, der über UART mit dem WiFly verbunden ist. D.h. im WiFly sind nur wenige Einstellungen zu machen. Die website ist im ATmega gespeichert und könnte nach Bedarf angepaßt werden.

Um überhaupt zu sehen was zwischen Client und Server abläuft, habe ich mit VB6 ein Programm geschrieben um den Datenaustausch zu verfolgen s.u.. Einiges aus dem header kann man streichen. Im wesentlichen läuft folgendes ab:
Client (IExplorer) stellt TCP Verbindung mit webServer (Port 80) her:
Client an Server: GET / HTTP/1.1 oder z.B: GET /start.htm oder GET /WiFly.gif je nachdem was gefragt ist. Weiteres ohne Belang.
Server muß an Client antworten:
HTTP/1.1 200 OK '+chr(13)+chr(10)
Accept-Ranges: bytes '+chr(13)+chr(10)
Content-Length: 2263 '+chr(13)+chr(10)+chr(13)+chr(10)
Daten

'Content-Length muß genau der Länge der folgenden Daten entsprechen

Die Daten sind z.B: HTML. Die Seite die an den Client geht habe ich mit 3 Frames versehen. 1.Frame:Überschrift. 2. Frame Daten an den Client mit laufender aktualisierung. 3. Frame um Daten vom Client ans WiFly zu schicken.

Für Interessierte hier der kompletten Code:


$regfile = "m32def.dat"
$crystal = 4000000
Dim Anfrage As String * 255
Dim An$ As String * 255
Dim A1$ As String * 255
Dim B1$ As String * 255
Dim C1$ As String * 255
Dim D1$ As String * 200
Dim Mes1 As String * 10
Dim Mes2 As String * 10
Dim Mes3 As String * 10
Dim Mes4 As String * 10
Dim Ende As String * 4
Dim Header As String * 50
Dim I As Integer , Ii As Integer , Iii As Byte , I4 As Integer , I1 As Integer , I2 As Byte , I3 As Byte , I5 As Byte , Zeit As Integer , Ta As Integer
$baud = 19200
Echo Off
Config Timer0 = Timer , Prescale = 1024
On Timer0 Zeiten
Enable Interrupts
Enable Timer0
Start Timer0

Header = "HTTP/1.1 200 OK" + Chr(13) + Chr(10)
Header = Header + "Accept-Ranges: bytes" + Chr(13) + Chr(10)

A1$ = "<html><frameset rows=5,15,10>"
A1$ = A1$ + "<frame src=start.htm name=start><frame src=daten.htm name=Daten><frame src=kont.htm Name=Kommando>"
A1$ = A1$ + "<noframes>Browser muß Frames unterstützen</noframes>"
A1$ = A1$ + "</frameset></html>"
D1$ = "<html><H1>Es klappt! der WiFlyServer ist online</H1></html>"

Do
Input Anfrage
I1 = Instr(anfrage , "GET") 'nur Inputs mit GET interessieren
If I1 > 0 Then
Mes1 = "06.01.2013" : Mes3 = "Sensor1" 'Mes2 <> Zeit
I1 = Instr(anfrage , "eg5=") '>> Daten vom Client ans WiFly
If I1 > 0 Then
I2 = Instr(i1 , Anfrage , " ") : I3 = Instr(i1 , Anfrage , "%")
If I3 < I2 And I3 <> 0 Then I2 = I3
I1 = I1 + 4 : I2 = I2 - I1
Mes4 = Mid(anfrage , I1 , I2)
End If
B1$ = "<meta http-equiv=refresh content=1><html>" '>> Frame wird jede sec aufgerufen
B1$ = B1$ + "<P><Input Name=eg1 Size=10 Value=" + Mes1 + ">"
B1$ = B1$ + "<P><Input Name=eg2 Size=10 Value=" + Mes2 + ">"
B1$ = B1$ + "<P><Input Name=eg3 Size=10 Value=" + Mes3 + ">"
B1$ = B1$ + "<P><Input Name=Eg4 Size=10 Value=" + Mes4 + "></Html>"

C1$ = "<html><form><P><Input Name=eg5 Size=10 Value=" + Mes4 + ">"
C1$ = C1$ + "<P><input type=submit value=send></form></html>"

An$ = A1$
I1 = Instr(anfrage , "daten.htm") : If I1 > 0 Then An$ = B1$
I1 = Instr(anfrage , "kont.htm") : If I1 > 0 Then An$ = C1$
I1 = Instr(anfrage , "start.htm") : If I1 > 0 Then An$ = D1$
I4 = Len(An$) 'BitLänge muß exakt stimmen
Print Header;
Print "Content-Length: " + Str(i4) + Chr(13) + Chr(10) + Chr(13) + Chr(10);
Print An$;
Ta = Zeit : Ta = Ta + 50 'für Timeout s.u. 50 entspr. etwa 2 sec
End If
Loop
End

Zeiten:
Zeit = Zeit + 1 : Mes2 = Str(zeit)
If Zeit > Ta Then
Ta = Zeit + 300 : Print "*CLOS*"; ' falls länger als 2 sec keine Verbindung
End If
Return

'Einstellungen für WiFly:
'Set Uart Baudrate 19200
'Set Comm Remote = 0
'Set Ip Protocol = 3
'Set IP localport 80


Alles hat mich einige Zeit gekostet. Wollte zu Beginn z.B. eine .gif Datei anhängen. Hat Stunden gedauert bis ich gerafft habe, dass BASCOM einen bug hat und CHR(0) nicht kennt. Dann stellt der IExplorer nicht alle Frames zusammen dar (ist wohl ein Timing-Problem). Mit Firefox funktioniert´s aber (ggf. muß man einen frame aktualisieren).

Hoffe, die Infos sind für einige die mit WiFly arbeiten hilfreich. Deren Meinung hierzu würde mich natürlich interessieren. Habe mich gewundert, dass im Manual nicht´s hierüber zu finden war, obwohl das doch der Dreh-und Angelpunkt ist um mit dem WiFly und IExplorer zu arbeiten.
Immer noch kommt es aber zu Ladefehler. Da ist noch Luft nach oben. Bin für jeden Tip dankbar!


Gute Nacht

Christian


P.S.
Die fehlerhafte Darstellung im Internet Explorer liegt wohl an den Sicherheits-Einstellungen >>http://www.ehow.com/how_7189333_enable-internet-explorer-windows-xp.html . Kann das aber erst am Mittwoch ausprobieren.

Christian H
09.01.2013, 15:58
Hallo

habe jetzt das Programm für den WiFly-Server noch etwas geändert. Frames sind zwischenzeitlich wohl out. Mit "Eingebettete Frames" <iframe> läuft das Programm aber tadellos, am besten mit dem Firefox. Habe das Programm auch noch etwas gestrafft und Internetzeit und Feldstärkeanzeige eingebaut.


$regfile = "m32def.dat"
$crystal = 4000000
Dim An$ As String * 255
Dim Mes1 As String * 255
Dim Mes2 As String * 255
Dim Mes3 As String * 255
Dim Mes4 As String * 255
Dim Header As String * 50
Dim I1 As Byte , I2 As Byte , I3 As Byte , I4 As Byte , Zeit As Integer , Ta As Integer
Declare Sub Wifly
Config Timer0 = Timer , Prescale = 1024
On Timer0 Zeiten
Enable Interrupts
Echo Off
$baud = 19200

Print "$$$" ; '
Waitms 300
Print "time" ; Chr(13);
Waitms 500
Print "show t" ; Chr(13);
While Instr(mes1 , "Time") = 0
Input Mes1 ' holt Zeit aus Internet
Wend
Print "show rssi" ; Chr(13);
While Instr(mes2 , "RSSI") = 0
Input Mes2 'Feldstärke
Wend
Print "exit" ; Chr(13);

Enable Timer0
Start Timer0

Header = "HTTP/1.1 200 OK" + Chr(13) + Chr(10)
Header = Header + "Accept-Ranges: bytes" + Chr(13) + Chr(10)

Do
' Mes1 = Zeit Mes2=RSSI Mes3=timer Mes3= webbrowser an WiFly
Wifly
Loop
End

Sub Wifly
While Ischarwaiting() = 1
Input An$
I1 = Instr(an$ , "GET") 'nur Inputs mit GET interessant
If I1 > 0 Then
I1 = Instr(an$ , "GET /?eg1=") '>> Daten vom Client ans WiFly
If I1 > 0 Then
I1 = I1 + 10 : I2 = Instr(i1 , An$ , " ") : I3 = Instr(i1 , An$ , "%")
If I3 < I2 And I3 > 0 Then I2 = I3
I2 = I2 - I1
Mes4 = Mid(an$ , I1 , I2) : If I2 = 0 Then Mes4 = "" 'wegen bug in BASCOM
End If
I1 = Instr(an$ , "d.htm") ' d.htm Name des eingebetteten Frame
If I1 = 0 Then
An$ = "<html><H1>Wifly-Server</H1>"
An$ = An$ + "<iframe src=d.htm Width=90% Height=200></iframe>"
An$ = An$ + "<P><form name=u1>send: <Input name=eg1 size=10 value=" + Mes4 + "></form>"
An$ = An$ + "</html>"
Else
An$ = "<meta http-equiv=refresh content=1>" '>> Seite wird jede sec aufgerufen
An$ = An$ + "<html>Sensor1=" + Mes1
An$ = An$ + "<P>Sensor2=" + Mes2
An$ = An$ + "<P>Sensor3=" + Mes3
An$ = An$ + "<P>Sensor4=" + Mes4 + "</html>"
End If
I2 = Len(an$) 'BitLänge muß exakt stimmen
Print Header + "Content-Length: " + Str(i2) + Chr(13) + Chr(10) + Chr(13) + Chr(10);
Print An$;
Ta = Zeit + 50 'für Timeout s.u. 50 entspr. etwa 2 sec
End If
Wend
End Sub
Zeiten:
Zeit = Zeit + 1 : Mes3 = Str(zeit)
' If Zeit > Ta Then 'timeout besser weglassen
' Ta = Zeit + 100 'funktioniert nicht zuverlässg
' Print "$$$" ;
' Waitms 300
' Print "close" ; Chr(13); ' falls länger als 2 sec keine Verbindung
' Print "exit" ; Chr(13);
' End If
Return

'Einstellungen für WiFly:
'Set Uart Baudrate 19200
'Set Comm Remote = 0
'Set Ip Protocol = 3


Am Montag morgen habe ich erst https://www.roboternetz.de/community/threads/60361-W-Lan-Modul-für-Webserver?highlight=wiFly
entdeckt. Werde mir demnächst ansehen was Arduino+Wifi Shield zu bieten haben. War für mich aber interessant die Lösung weitgehend selbst zu stricken. Vielleicht kann´s der eine oder andere der mit BASCOM pogrammiert, verwenden.


Beste Grüße

Christian

pirndi
12.01.2013, 08:26
Hallo!

Hab heute auch mein Modul bekommen und wollte es einmal Testen. Meine Steuerung in dem ich das Modul einbauen will hat aber 5V. Reicht da ein einfacher Spannungsteiler aus oder brauche ich da noch einen Levelshifter? Mein Atmega2560 müsste ja 3,3v als High erkennen? Die Baudrate muss nicht all zu hoch sein da ich nicht viele Daten übertrage.

Pirndi

Christian H
12.01.2013, 09:07
Hallo pirindi,

ich habe nur einen einfachen Spannungsteiler zwischen ATmega32 und WiFly.

Christian

pirndi
12.01.2013, 09:33
Wie hast du denn gebaut wenn ich fragen darf? Testen kann ich es mal mit meinem Xmega der hat 3,3v aber für später wäre deine Info sehr nett.
Atmega TX - Spannungsteiler mit ???k Widerstand - RX Wifi stimmt das so?

Bin mehr der Mechaniker als der Elektriker :)

Christian H
12.01.2013, 11:09
Spannungsteiler aus 3 und 1,8 KOhm. Wie Du schreibst, damit an RX vom WiFly nicht mehr als 3,3 V anliegen. Natürlich 3,3 V Spannungsregler für das WiFly. Will damit das EasyRadio von meinem Rasenrobo ersetzen. Funktioniert auch alles problemlos. Nehme dafür das UDP Protokoll und ein selbstgestricktes Programm auf meinem Rechner.

Die Sache die ich in den letzen beiden posts beschrieben habe, um mit einem webbrowser mit dem WiFly zu kommunizieren, war vorerst nur Spielerei. Ist fast wie mit Kanonen auf Spatzen schießen, da man eine kleine website im ATmega abspeichern muß. Fand´s aber knifflig, insbesondere wenn im Webbrowser laufend die Daten ausgegeben werden sollen und man nebenher Daten auch vom webbrowser zum WiFly schicken will.

Habe gestern noch mit der timer funktion gespielt. Auch nicht schlecht. Das WiFly holt sich damit die Uhrzeit aus dem Internet und man hat parallel dazu die Verbindung mit dem webbrowser.

Die Funkmodule Xbee, easyradio etc. werden´s meiner Meinung nach in Zukunft sehr schwer haben. Allenfalls die Reichweite könnte noch für die Funkmodule sprechen.

Wozu brauchst Du das WiFly? Willst Du mit webbrowser arbeiten oder hast Du ein extra Programm auf dem Rechner. Programmierst Du mit BASCOM oder C? Mich würde auch interessieren was die Arduino-Fraktion mit dem WiFi Shield alles machen kann.

Gruß

Christian

pirndi
12.01.2013, 13:44
Ich programmiere in C (aber nicht Arduino). Hab mir einmal eine Aquarien-Steuerung gebastelt da werde ich es mal zum testen einbauen. Zeit abrufen, Daten loggen usw.. da kann man alle Funktionen ganz gut testen :)

pirndi
19.01.2013, 08:42
Hallo Christian!

Zu deiner frage Arduino hab das hier gefunden: http://sourceforge.net/projects/arduinowifly/files/
Eine Fertige lib. Kannst ja mal durchsehen was man da alles machen kann.

Ich selbst hab mir einen Ringbuffer besorgt und das Modul mal angesteuert. Klappt ganz gut. Jetzt muss ich mal einen Levelshifter bauen und dann auf meinen Mega2560 hängen.

mfg daniel

flipp86
25.05.2013, 17:24
Hi Christian,

ich habe mir auch so ein Wlan Modul zugelegt und dank deiner ausführlichen Beschreibungen es auch erfolgreich ins Wlan gebracht.

Mit µC Programmierung kenn ich mich noch so einigermaßen aus, aber auf dem PC wirds schon sehr eng. Hab mit ach und krach ein Programm in VB geschrieben, das Daten per Bluetooth raus schickt.

Mich würde brennend dein Programm interressieren, welches du im ersten Beitrag erwähnt hast, mit dem du deine Daten überträgst. Gibt es ne Chance das du das Projekt zur Verfügung stellst ?? :D


Viele Grüße
Philipp

Christian H
25.05.2013, 19:40
http://www.youtube.com/watch?v=maQh-15z0IY

flipp86
25.05.2013, 22:42
Kann ich verstehen. War n geiles Spiel ;)

Danke dir aber schonmal für die Rückmeldung! :D

Christian H
26.05.2013, 09:16
Hallo Philipp,

es gibt prinzipiell 2 Möglichkeiten
1. über den webbrowser vom PC. Hat den Nachteil, dass man die Daten am PC nicht leicht weiterverarbeiten kann und das Programm hängt gelegentlich, wenn aus irgendwelchen Gründung die Verbindung abbricht. Außerdem braucht man ein längeres Programm im Microcontroller.

2. Besser finde ich es deshalb mit vb.net ein Programm zuschreiben das per UDP-Protokoll die Daten austauscht. Da steht die Verbindung immer. Beispielprogramm (ginge sicher auch anders):
WindowsForm Anwendung erstellen, einen Button, 2 Textfelder und einen Timer hinzufügen und folgenden Quellcode einfügen:


Imports System.Runtime.InteropServices.MarshalImports System.Drawing, System.Drawing.Imaging
Imports System.Net, System.IO
Imports System.Net.Sockets
Public Class Form1
Inherits System.Windows.Forms.Form
Dim sendbef As Integer, bytes(200) As Byte, udpclient1 As UdpClient, IPPort1 As IPEndPoint


Public Sub New()
InitializeComponent()
udpclient1 = New System.Net.Sockets.UdpClient(23)
IPPort1 = New IPEndPoint(IPAddress.Parse("192.168.1.25"), 80)
Timer1.Interval = 100 : Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Do While udpclient1.Available > 0
Dim receiveBytes As [Byte]() = udpclient1.Receive(IPPort1)
textbox1.text = System.Text.Encoding.UTF8.GetString(receiveBytes)
Loop
If sendbef = 1 Then
sendbef = 0
bytes = System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + Chr(13))
udpclient1.Send(bytes, bytes.Length, IPPort1)
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sendbef = 1
End Sub
Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
udpclient1.Close()
Timer1.Enabled = False
End
End Sub
End Class




Die Einstellungen vom WiFly sind:
<2.32> get ip
IF=UP
DHCP=OFF
IP=192.168.1.25:80
NM=255.255.255.0
GW=192.168.1.1
HOST=IPRechner:23
PROTO=UDP,TCP,
MTU=1524
FLAGS=0x7
TCPMODE=0x0
BACKUP=0.0.0.0

Im Mikrocontroller zum senden z.B.
Print Hex(sharp2); 'z.B. um werte als Hexadezimalzahlen zu übertragen
Print Message; 'z.B. string übertragen
Print Chr(13); 'gesendet wird erst bei Abschluss mit cr

zum empfangen z.B.
If Ischarwaiting() = 1 Then Inputhex Kurssoll 'falls Wert als HEX übertragen


Sollte so klappen.

Viele Grüße

Christian

flipp86
26.05.2013, 20:47
Hi Christian,

viieeeelen vielen Dank für deinen Code.

Ich konnte ihn halb erfolgreich bei mir umsetzen :D.
Mit deinem Code habe ich es geschafft eine Zeichenkette an den µC zu übertragen. Die umgekehrte Richtung funktioniert nur leider nicht. (Ich habe per RS232 Verbindung kontrolliert das alles funktionieren müsste)


Mein Problem ist, ich kann nicht mal eine Frage oder so stellen, da ich deinen Code zwar umsetzen konnte, aber leider nur seeehr wenig daran verstehe.

Du hast nicht zufällig ne Glaskugel, mit der du mal gucken kannst, was da nicht läuft ? :D
Oder vlt nen heißen Tipp, was ich mal kontrollieren könnte ??

Viele Grüße
Philipp

Christian H
26.05.2013, 21:09
Hallo flipp86,

IP-Adressen und Port auf beiden Seiten richtig ?
im Microcontroller das Chr(13) zu Schluß (oder alternativ Print ohne ";"
baud-Rate wird wohl für Controler und WiFly gleich sein, da es ja in eine Richtung funktioniert.
Versuch mal textbox1.text = textbox1.text + System.Text.Encoding.UTF8.GetString(receiveBytes)
vielleicht überschreibt er ja einen Text gleich wieder mit nichts

sollte eigentlich klappen. Hast Du das Programm TeraTerm Pro ? Funktioniert´s denn damit?

Christian

flipp86
26.05.2013, 21:39
IP-Adressen und Port auf beiden Seiten richtig ?


ganz und gar nicht sicher :D
könnte auch gut damit zusammenhängen.

udpclient1 = New System.Net.Sockets.UdpClient(23)
hab in der Zeile zwei verschiedene Werte angegeben und beide male klappte das senden und nicht das empfangen. Insofern wird wohl mein Hoste Gate falsch sein.
Mal sehen wo ich das rausfinde. Programmier über einen Mac wo Windows virtuell drauf läuft

Christian H
27.05.2013, 07:09
Das WiFly hat bei mir die IP 192.168.1.25 und den Port 80. Gateway ist bei mir 192.168.1.1 (IP vom Router). Im WiFly muß natürlich die IP und der Port (bei mir 23) vom Rechner(Host) eingegeben sein. Mußt ggf. bei Dir anpassen. Falls Das weiterhin nicht klappt kannst ja mal einen Ausdruck aller Einstellungen des WiFly schicken ( get everything ). Da es in eine Richtung funktioniert, wird´s wohl auch nicht an der firewall liegen.

jcrypter
27.05.2013, 08:13
Hi Christian,

ist das Setzen der IP-Adresse des Rechners, an den die Daten gesendet werden sollen nur über die Einstellungen im Wifly möglich oder kann man sie auch per Bascom festlegen, sozusagen während der Laufzeit des Programmes?

Danke für die Auszüge aus dem Quellcode!
Das wird mir sicher sehr helfen!

Crypi

Christian H
27.05.2013, 09:22
Hi

man kann das auch zu Beginn des Programms einmal machen indem man ans WiFly per UART sendet

$$$
set ip host <addr> // set the IP address of the remote host <addr> IP von Deinem Rechner (z.B. 192.168.1.2)
set ip remote <port> // set the IP port of the remote host in meinem Beispiel ist das die 23
save // save settings in config file
reboot // reboot the modul oder exit

soweit ich mich erinnere kommt nach $$$ kein return, nach den Kommandos aber schon. Vor und nach $$$ muß eine Pause von etwa 1/2 Sekunde sein. Einmal eingestellt behält das Modul diese Eingaben. Ist also nur ein einziges mal erforderlich

jcrypter
27.05.2013, 10:05
Danke für deine Antwort!

Crypi

flipp86
27.05.2013, 19:44
Hi Christian,

vielen Dank für deine Hilfe. Ich hab jetzt das Testprogramm auf nem alten Laptop mit Windows drauf ausprobiert.
Es hat auf Anhieb funktioniert!!!

Ich vermute das auf dem Mac mit virtuellem Windows irgendwas nicht richtig weiter gegeben wird oder eben einfach die IP und Port falsch sind.
Mal sehen ob ich es schaffe das Problem zu beheben. sonst probier ich es mal mit nem eigenen Wlan Stick für das virtuelle Windows.

Nochmals vielen vielen Dank!!! Ohne dich hätte ich das nicht hinbekommen.

Viele Grüße
Philipp

jcrypter
12.06.2013, 13:51
Moin,

gibt es einen entsprechenden Chip eigentlich auch für Ethernet?


Crypi