Hallo, ich würde gern einen Lantronix XPORT mit einem MC verbunden. Als Trockenübung wollte ich einen XPORT seriell mit dem Hyperterminal verbinden. Um über das Netzwerk zuzugreifen startete ich einen Webbrowser. Nun sendete ich wacker eine völlig simple html seite vom Hyperterminal zum XPORT (Textmodus), in der Hoffnung die Seite im Browser zu erkennen. Es tut sich aber nichts im Browser. Als remote Port habe ich 10002 gewählt und den Browser mit <ip>:10002 gestartet. Wer hatte schon einmal Erfolg mit dieser Konfiguration, oder mit einer MC Kopplung ? Mein Ziel ist es, mit dem MC über die rs232 permanent eine einfache html Seite zu generieren und hier Meßdaten zu übertragen. Das wäre eine schöne Sache; wenns laufen würde ! Danke vorab für Euren "Input" !! d.s.
Hallo Die Web Seite muß noch in ein cob File gepackt werden. Dieses mußt dann dann übertragen. Über die RS232 wird das aber nicht gehen, soviel ich weiß. Schau mal hier. http://ltxfaq.custhelp.com/cgi-bin/ltxfaq.cfg/php/enduser/std_adp.php?p_sid=nq4Ctech&p_lva=&p_faqid=943&p_created=1075227796&p_sp=cF9zcmNoPSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NzgxJnBfcGFnZT01&p_li= Ist alles erklärt web2cob http://www.datanab.com/docs/barionet/tools/v146/ Messdaten kannst du über Java einbinden. MFG Dieter
Hallo Dietmar In dieser Richtung (WEB -> XPort) habe ich es noch nicht versucht, es sollte aber prinzipiell gehen, wenn man die HTML-Seite mit dem entsprechenden Header HTTP/1.0 200 OK gefolgt von 2xCRLF und der HTML-Seite sendet, sobald der Browser-Request kommt. Ich verwende den XPort genau anders herum, u.a. um HTML-Seiten aus dem Web zu laden. Diesen Modus kann man auch verwenden, um Daten mit PUT oder POST hochzuladen bzw. an ein CGI-Skript zu senden, welches sie dann auswertet und den Benutzern anzeigt. Dafür den XPort in den Modemmodus schalten, dann kann man auf dem Mikroprozessor einfach mit ATDT192.168.0.1/80\r verbinden (nicht CRLF, nur CR senden!), dann die entsprechenden Befehle, etwa GET / HTTP/1.0\r\nHost: 192.168.0.1\r\n\r\n Das funktioniert hier einwandfrei. Allzu hohe Geschwindigkeiten liegen im Internet leider nicht drin, weil eine Verbindung nur 2kByte für den Empfangspuffer verwendet. Die Verbindung trennt man mit 1 Sekunde Pause, +++, 1 Sekunde Pause, ATH genau wie beim Modem. Gruss Christian
Hallo Chris, habe gerade noch ein wenig herumgespielt... Meine ersten Versuche liefen nicht, weil ich einfach nicht die richtigen HTTP-Protokoll-Sequenzen eingehalten habe. Jetzt habe ich aber schon einen einfachen Text im Browser darstellen können. Über die rs232 sendete ich dazu: Content-Type: text/html Connection: Keep-Alive Last-Modified: Mon, 17 Oct 2005 19:03:03 GMT Content-Length: 62 <html> <body> Hallo Welt !!!!!!!!!!!!111 </body> </html> Das habe ich über das Hyperterminal schnell als Textdatei rübergeschoben nachdem ich im Browser eine Verbindung zum Lantronix via http://ip:portnummer aufgebaut habe. (etwas unklar ist mir noch der korrekte Einsatz von CR/LF (0Dh/0Ah, auch scheint die korrekte Content Length wichtig zu sein. Bitte berichtigen wenn ich da auf dem Holzwege bin). Da ich das Rad nicht neu erfinden möchte, wäre es sehr hilfreich wenn jemand schon einmal einen simplen http Server implementiert hätte und den Code zur Verfügung stellen könnte (ohne IP-Stack...nur die HTTP Abwickelung). Präferiere übrigens Bascom; Googeln war bisher ziemlich erfolglos...;-(. Was ich noch nicht in den Griff bekomme ist die Antwort auf die Frage, wie ich die Webseiten dynamisch auffrische, ohne das dazu der Browser browserseitig aktualisiert werden muß. Ich würde das gern vom "Server", also über die RS232 vom MC aus aktiv anstoßen. Wer Ideen hat, melde sich bitte. Momentan tappe ich noch etwas im Dunkeln ! Die Idee halte ich für ideal. Der Xport kostet rel. wenig Geld (um die 40 ), ist super klein. Meßdaten von beliebigen UC's via RS232 ins Web zu senden, hat doch mit Sicherheit eine riesige Anwenderschaft zur Folge ! Den Weg über Java, das Betriebssystem (COBOX) etc. halte ich für zu kompliziert/aufwändig und nicht nötig. (In der C'T gibt es dazu auch ganz nette Anleitungen und Projekte).Ich habe mir zwar die Development Umgebung von Lantronix besorgt, aber die schönsten Dinge im Leben sind halt doch oftmals auch die einfachsten... Und nen RS232 Ausgang via MC zu handeln, sollte die breite Masse an interessierten wohl eher hinbekommen ! Danke, Dietmar
Hallo dietmar Die HTTP-Antwort ist im Prinzip richtig, nur fehlt noch die eigentliche Antwortzeile davor: HTTP/1.0 200 OK Das Dokument sähe dann so aus: HTTP/1.0 200 OK Content-Type: text/html Connection: Close Last-Modified: Mon, 17 Oct 2005 19:03:03 GMT Content-Length: 62 <html> <body> Hallo Welt !!!!!!!!!!!!111 </body> </html> Die ganzen Header unter HTTP/1.0 200 OK sind sogenannte optionale Header, können also weggelassen werden. Wenn man aber Connection: Keep-Alive schickt, so MUSS man die Contentlänge angeben, sonst weiss der Client nicht, wann die Datei fertig ist! Die vorzuziehende Alternative ist Connection: Close, und anschliessend die Verbindung zu trennen. Grund: Der XPort kann nur 1 Verbindung gleichzeitig bedienen! Mit Connection: Keep-Alive würde dann ein User den X-Port die ganze Zeit blockieren. Als Lektüre empfehle ich die RFC 1945 mit den HTTP1.0-Spezifikationen: http://www.w3.org/Protocols/rfc1945/rfc1945
Chris, das bringt mich wieder einen Schritt weiter. Ich habe nur noch keine Ahnung, wie ich den Browser dazu auffordern kann die HTML-Seite selber zu refreshen, oder kann man das auch Serverseitig (MC) erledigen ? Mit der Close Methode würde ich mir ja wohl selbst den "Ast absägen" ?! D.S.
Naja, der Browser wird ein META-Tag mit refresh akzeptieren, auch bei Connection: Close, oder nicht ? Das ist dann ja eher nun HTML, nicht mehr so speziell das XPORT-Problem.. Gruss, Tim
Eine Anmerkung zu Dieter Brüggemann's Hilfestellung: All das beschreibt ja die Programmierung eines Java Applets, über welches ich vom Browser aus auf die serielle Schnittstelle des Xport zugreifen kann. Das ist aber für meine Problemstellung gar nicht nötig. Wenn ich den internen Webserver verwenden möchte, was ja durchaus seinen Reiz hat weil der gesamte http-Kram ja schon implementiert ist, wäre es höchstens nötig, Daten über die RS232 für die dynamische Veränderung des internen html-Codes zu transportieren. Das ganze Java Zeugs ist ja ganz nett, aber m.E. hier völlig überflüssig. Der MC kann doch leicht entsprechende html Seiten dynamisch generieren und über die RS232 entwerder direkt zum Browser senden (was ja schon grundsätzlich funktioniert) oder auch die internen HTML-Seiten im XPORT manipulieren. Hierzu kenne ich aber noch keinen Weg zur Lösung. MFG D.S.
Meta refresh geht mit folgender Zeile im <head> - Teil der HTML-Seite:
<meta http-equiv="refresh" content="10">
Das bewirkt beispielsweise einen Refresh alle 10 Sekunden.
>>oder auch die internen HTML-Seiten im XPORT manipulieren. Hierzu
kenne ich aber noch keinen Weg zur Lösung.<<
Das ist eher ungeeignet, weil das Flash nur eine begrenzte Anzahl
Schreibzyklen übersteht, wie bei den Mikroprozessoren auch.
Ich würde das wie angesprochen anders lösen:
- bei irgend einem Webhoster mit PHP-Unterstützung eine Webseite
aufziehen, gibt's sogar gratis
- mit dem XPort alle paar Sekunden per HTTP POST die Daten dorthin
schicken
- Auf der Webseite per PHP-Skript die Daten aufbereiten, eventuell in
eine Datenbank oder Textdatei loggen
- die User auf diese Adresse verweisen und nicht an die des XPort
Vorteile:
- XPort kann hinter Firewall liegen
- Mehrere User gleichzeitig können die Daten lesen
- Keine Bandbreitenprobleme
Hallo Chris, kompliment das Du an die Lebenszyklen des Flashes gedacht hast ! (Mir fiel das gestern beim Einschlafen auch noch ein). Ich habe an Lantronics eine Anfrage gesendet ob man die internen pages ins RAM mappen kann; mal schauen was die sagen.. Eigentlich ist mir die Lösung aber insgesamt zu "unpragmatisch" für das was ich möchte. Die extern gestützte PHP Lösung ist auch ne gute Idee, ich muß das aber autark und ohne Internetverbindung lösen. (Ehrlich gesagt muß ich auch noch lernen wie das mit der HTTP Post Methode läuft. Der Server "Postet", sendet also eine HTML-Seite... aber was ist denn wenn der Browser schon "disonnected" ist.....?. Ich dachte bisher das HTTP-Protokoll wäre immer von der Client-seite initiert/gesteuert... ) Von daher bleibe ich jetzt bei meinem Grundgedanken über die rs232 immer periodisch vom Controller aufbereitete HTML Seiten mit dynamisch geänderten Inhalten zu senden. Prinzipiell funktioniert das ja schon. Mit dem Meta- Refresh sieht der Anwender im Browser auch immer die aktuellen Informationen. Schön wäres es, gäbe es eine Quelle eines schon fertigen Grüstes für einen simplen HTTP-Server der rudimentäre Funktionen anbieten würde (ohne einen IP-Stack...). Der würde sicher leicht auf einen MC passen; nebst Meßdatenerfassung etc.... Ich berichte weiter. Wenn Du noch Ideen hast, dann tausche sie bitte weiter mit mir aus. Komisch das das Thema eigentlich nur zwischen uns beiden abläuft. Ich denke das wäre doch auch für eine breite Masse interessant... ?! D.S
Nein, der Server postet gar nichts - der XPort agiert hier als HTTP-Client, und postet die Seite an den entfernten HTTP-Webserver. Eventuell kann man auch eine eigene Anwendung auf dem XPort schreiben - dafür braucht man von Lantronix das kostenlose Development Kit. ob das geht, kann ich nicht beurteilen, weil ich es bisher nicht benötigt habe.
Hallo Leute, habe mir gerade alles durchgelesen aber ich finde nicht ganz eine Antwort für mich. Ich habe vor Messdaten von einem Mega128 auf einer Homepage anzuzeigen. Ich möchte über den uart den html code zum xport senden, das xport soll dann die homepage anzeigen. kann ich das nun so einfach machen? wenn die homepage vom browser gestartet wird wie erfahre ich dann im atmel das ich die daten neu laden muss?
>wenn die homepage vom browser gestartet wird wie erfahre ich dann im >atmel das ich die daten neu laden muss? Durch den ankommenden Header vielleicht... In einem anderen Thread (von "Jasmin") wurde das Thema auch schon behandelt. Damals war die Doku zum Siteplayer (http://www.netmedia.com) sehr hilfreich... Der XPORT wurde auch nicht über den Standard-HTML-Port 80, sondern über einen anderen angesprochen (Xport-Doku). PS: deine Shift-Taste ist kaputt...
Da das Thema nochmal aufgerufen wird frage ich auch gleich mal was. Könnt Ihr mir bitte sagen was da falsch ist. Der Browser wartet die ganze Zeit und tut nichts.... {html_aktiv=0;PORTA.7=1;PORTA.6=0; //Led auf senden setzen //Html übertragen putsf_xport ("HTTP/1.1 200 OK"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("Content-Type: text/html"); putsf_xport ("Content-Length: 50"); putsf_xport ("<html>"); putsf_xport ("<title>HalliHallo</title>"); putsf_xport ("TestPage<br>"); putsf_xport ("</html>"); } danke
Du musst entweder die Content-Length angeben, ein TimeOut oder einen Delimiter definieren oder den Xport so konfigurieren, dass ein Pegelwechsel an einem Pin den Vorgang abschließt.
mmm. Ich habe eine content-lenght angegeben aber ich sehe schon am Explorer nichts keine Text keinen Titel, einfach nichts!?! danke
Kommt auf der anderen Xport-Leitung denn der GET? Die Port-Nummer muss natürlich auch stimmen. Evtl. mal mit Etherreal (=LAN-Sniffer) schauen, was los ist. Viel Erfolg! Wird schon, habe ich auch geschafft.
Die Verbindung funktionier! Wenn ich mit Telnet eine Verbindung aufbaue xxx.xxx.xxx.xxx 10000 dann kann ich hin und her senden. Ich bekomme auch vom I-Explorer die Anforderung. Nach dieser Anforderung sende ich meine Page. http://xxx.xxx.xxx.xxx:10000 Aber nichts...... Was sendest du nach der Anforderung vom Explorer? danke
Also das was ich hier mache ist nur mehr Probieren. Keine Ahnung was da falsch ist.. {html_aktiv=0;PORTA.7=1;PORTA.6=0; //Led auf senden setzen //Html übertragen putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("HTTP/1.0 200 OK"); putchar_xport(0x0D);putchar_xport(0x0A); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("Connection: Close"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("Content-Type: text/html"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("Content-Length: 50"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("<html>"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("<title>HalliHallo</title>"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("TestPage<br>"); putchar_xport(0x0D);putchar_xport(0x0A); putsf_xport ("</html>"); putchar_xport(0x0D);putchar_xport(0x0A); html_counter++; } !hilfe!
Ich sende z.b. folgendes, allerdings mit timeout: HTTP/1.0 200 OK Content-type: text/html <html> <head>Test page</head> <body>This is a test page</body> </html> Vor dem HTTP/1.0 sollte kein CR/LF kommen. Ein Request sieht z.B. so aus: GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* Accept-Language: de Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: 192.168.4.44:10001 Connection: Keep-Alive Wenn Du den GET mal vom Telnet aus machst? Kommt dann das was Du vom µC aus sendest, wieder zurück? Es ist sicher nur eine Kleinigkeit! Was sagt der Fortschrittbalken unten in der Statuszeile im Explorer? (evtl. mit Alt+a t einschalten)
Hallo! Wenn ich Get über Telnet mache dann kommt genau das was ich auch zum I-Explorer sende. Der Statusbalken läuft ganz langsam nach oben.... (Website gefunden. Warte auf Antwort) danke!
Stell im XPort mal einen Timeout ein. Im Telnet müsste (glaube ich) dann ein connection lost kommen, was den IE auch zum Anzeigen bringt.
hallo, Timeout hat auch keinen Sinn, Explorerleiste läuft und läuft.Ich glaube das es mit dem 0x10 bzw 0x13 was zu tun hat. Ich habe sonst keine andere Erklärung dafür. Hat Jemand eine Liste was alles zum senden ist wenn man ein ganz einfaches "Hello World" schreiben möchte ? danke
Zwischen dem Header (HTTP/1.0 bis Content-length) müssen ZWEI CR/LF sein. Du kannst (wenn du dich an dieses Protokoll hältst) die Content-length auch weglassen.
1 | ...
|
2 | putsf_xport ("HTTP/1.0 200 OK\r\n"); |
3 | putsf_xport ("Content-Type: text/html\r\n\r\n"); |
4 | putsf_xport ("<html>"); |
5 | ...
|
6 | putsf_xport ("</html>"); |
7 | ...
|
Jetzt hab' ich doch glatt die Hälfte der Information vergessen. The first line should read Zwischen dem Header (HTTP/1.0 bis Content-length) und dem HTML-Teil der mit <html> beginnt müssen sich ZWEI CR/LF befinden.
Habe ich das jetzt richtig verstanden ? putsf_xport ("HTTP/1.0 200 OK\r\n"); putsf_xport ("Content-Type: text/html\r\n\r\n"); putsf_xport ("<html>"); putsf_xport ("<title>HalliHallo</title>"); putsf_xport ("<body>TestPage</body>"); putsf_xport ("</html>"); danke
Hallo Josch, ich habe das gleiche Problem, funktioniert es bei dir schon ? Wenn ich die Seite aufrufe dann läuft die Explorerleiste von links nach rechts. Aber eine Seite sehen kann ich nicht. Auch wenn ich mir nen Quelltext ansehe steht nichts drinn ?? mike
Hallo, hat nicht jemand eine Webseite laufen so könnten wir den code uns ansehen und vergleichen? martin
Du musst entweder die Content Length angeben (ich glaube, dann beendet der IE die Connection) oder den XPort dazu veranlassen, dass er die Connection beendet. Letzteres geht über Timeout, eine Bytekombination oder einen Pin, das dazu konfiguriert werden muss. Zur Kontrolle kannst Du statt des IE einen Telnet öffnen, der muss dann ConnectionLost anzeigen.
Hallo Leute, soweit habe ich es mal. Mit MozillaFireFox geht es aber der balken bleibt noch immer in der mitte stehen! Wenn ich die zwei Befehle schreibe: putsf_xport ("Content-Length: 62"); putsf_xport ("Connection: Close"); bekomme ich das als Text im Explorerfeld, ich möchte auch das alle 2sec die Page aktualisiert wird. aber das geht solange nicht solang der ganze html Befehl abgeschlossen wird. was kann da noch sein. Aja, wenn ich bei MS I-Explorer Stop drücke sehe ich die page auch.
Cool, unter welcher Einstellung kann man beim Xport sagen wie lange das Timeout für die Verbindung sein soll.
Ich habe gerade nochmal angeschaut, was ich damals testweise sendete: Nach dem text/html hatte ich auch mal zwei Leerzeilen , also drei CRLF. (Hatte ich am 30.10. bereits so gepastet.) Versuchs mal damit. Wenn der IE beim Drücken des Stop-Buttons die Seite anzeigt, ist ganz klar bis zu diesem Zeitpunkt die Verbindung noch offen, und der Inhalt wird deshalb noch nicht angezeigt. Nimm den Telnet zum Testen, da siehst Du besser, was Sache ist. Einfach in der Eingabeaufforderung: telnet <gewünschte IP oder URL> <optional Portnummer> ^hier kein Doppelpunkt, sondern Space
@mike Bei DisConnTime (Inactivity Timeout) in XPort-EX User Guide.pdf S. 53/80
Hallo, bin gerade dabei, einen ATmega8535 mittels XPort zum Web-Server zu machen. Habe jetzt auch schon etliche Stunden damit verbracht, das zum Laufen zu bringen. Ich poste hier mal einen Beipiel-Code den ich mit BASCOM-AVR geschrieben habe. Damit tut sich bei mir schon mal was beim Firefox und IE. Verbesserungsvorschläge bitte mitteilen, bin noch nicht so bewandert in der ganzen Geschichte, bin aber lernbereit. Smithee
>Verbesserungsvorschläge bitte
ein paar Kommentare mehr, wären hilfreich.
Kommentare zu test.bas: Die ersten paar Zeilen deklarieren meine Variablen (sollte jedem klar sein). Danach definiere ich einen String "HTTP/1.". Dies ist das Muster, nachdem ich eingehende Botschaften durchsuche. Wird dieser String entdeckt weiß ich, dass ein Browser per "GET /xxx HTTP/1.x" eine Webseite vom µC anfordert (die x'se können variieren, daher suche ich nur nach dem immer gleichen Teil der Botschaft). In der folgende For-Schleife fülle ich meinen Empfangspuffer mit beliebigen werten (habe mich für "A" entschieden) Darauf aktiviere ich den Interrupt, der mir signalisiert, wenn ein neues Zeichen über die UART empfangen wurde. In diesem Fall springt das Programm nach Onrxd:". Dort schiebe ich alle Elemente in meinem, 20 Zeichen fassenden, Empfangspuffer um eine Stelle nach oben und reihe das gerade empfangene Zeichen chr(udr) an die hinterste Stelle des Arrays. Danach wandle ich mein Array zu einem String und schaue, ob dieses meinen Suchstring "HTTP/1." enthält. Falls ja wird Httpcommand auf 1 gesetzt. Das Hauptprogramm was nun, dass die Web-Seite angefordert wurde. Die Webseite selbst liegt unter "Homepage:" als Datenfeld vor. Im Hauptprogramm berechne ich in der ersten For-Schleife die "Content-Length" der Homepage und in der zweiten For-Schleife schreibe ich die einzelnen Zeilen der Homepage. Dabei wird die Zeile mit der "Content-Length" noch gesondert behandelt, um die berechnete "Content-Length" einzufügen. Wie gesagt, ich denke, dass geht alles noch eleganter, aber zumindest funktioniert das bei mir schonmal.
Hallo alle, habe gerade angefangen, auf meiner Homepage (http://www.zzottel.de) meine XPort-Steckdosensteuerung etwas zu dokumentieren. Vielleicht sind für mannche ein paar gute Ansätze dabei. (Ich habe den bereits weiter oben von mir geposteten BASCOM-Code noch etwas optimiert...) Das Ding läuft bei mir übrigens seit Dezember 2006 ununterbrochen und bisher ohne Probleme... schon genial, wenn man jederzeit und von überall seinen PC zuhause hochfahren kann etc. Der HTTP-Server auf dem ATMega8535 ist aber immernoch verbesserungsfähig: Je nachdem, wie die Browser ihre HTTP-Requests abschicken, kann es sein, dass der Controller die Homepage zweimal nacheinander rausschickt. Manche Browser zeigen die Seite dann nicht ordentlich an. Workaround bisher: Einfach die Seite im Browser erneut laden. Dann passt's. Gruß Stefan
hallo smithe, schön, dass du so weit gekommen bist. meine ersten gehversuche liegen nun schon seit geraumer zeit "im keller". ich werde wohl bald wieder etwas zeit investieren ... suuper gemacht !!!!!!!!! dietmar
Nach stundenlangem Rätselraten, warum Webseiten nicht oder nur fehlerhaft im Browser ankommen, nachdem sie mit Hyperterminal via XPORT-COM gesendet wurden hier noch ein Hinweis: In der ASCII-Konfiguration der Hyperterminal-Verbindung muss unbedingt "Gesendete Zeilen enden mit Zeilenvorschub" aktiviert sein :-) Hinterhältig!
@TSSOP14 Mach mal ruhig. Ist eigentlich relativ unkompliziert. Auf den internen Webserver samt Java/CGI Hakeleien kann man locker verzichten wenn man Empfang und den Versand dynamisch erzeugter Webseiten via XPORT-COM selbst in die Hand nimmt. So wie was auf XPORT-Seite zu schalten ist wertet man dafür einfach den ankommenden HTTP-Header aus. Vorausgesetzt, man will nicht nur auf die 3 armseligen GPIOs zugreifen :-) Gruß Rainer
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.