Liste der Anhänge anzeigen (Anzahl: 1)
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
Liste der Anhänge anzeigen (Anzahl: 2)
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:
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_enab...indows-xp.html . Kann das aber erst am Mittwoch ausprobieren.
Liste der Anhänge anzeigen (Anzahl: 1)
Update für WiFly-Server
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.
Code:
$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...ighlight=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