Kann man bei Linux eine serielle Schnittstelle eine IP verpassen? Und wenn ja, wie? Vielleicht weire Infos? Hintergrund: Wollte gern über µC eine HTML-Seite über z.B. /dev/ttyS0 Ausgeben und auf dem Webbrowser anzeigen lassen. Allso http://192.168.0.20 Dann wird die Schnittstelle abgefragt und die daten kommen dann vom µC. Geht das ?
Hi du könntest das über ein CGI lösen was auch das einfachste sein dürfte. Matthias
Ein kleines Serverprograemmchen kann das machen. z
@Ulrich: Ist doch eine Idee :-) Windows habe ich auch - braucht da noch was dazu? @Zacc: Was für ein Serverprogrämmchen meinst du ? Ein Script der als Daemon gestartet wird im TCP-Wrapper? Wie läuft dann die IP-Bindung zur Seriellen Schnittstelle? @Mattias : Auch gute Idee , wollte lieber eine IP nehmen wenn es möglich ist du meist das CGI Script gibt dann eine Anforderung am µC weiter , welcher dann die Daten zurück gibt?
Schau dir mal das Serial Line Internet Protocol (kurz SLIP) an. Vielleicht ist das das was du suchst!?
oder der 'normale' weg über eine dfü-verbindung: tcp<->ppp<->rs232~~~~rs232<->ppp<->tcp brauchst natürlich dann auch ppp und tcp auf dem µC
Wenn du dem Controller partout ein TCP/IP verpassen willst, dann ganz normal per SLIP oder PPP. Wenn es nur darum geht, dass er scheinbar eine eigene IP-Adresse hat, dann kannst du auch einen virtuellen Webserver auf einem IP-Alias auf der Linux-Maschine laufen lassen, und dahinter ein CGI verbergen. Erspart das TCP/IP auf dem Controller.
Ok -Danke euch sehr - Werde es mal mit einen CGI versuchen. Wenn einer noch eine Idee hat kann er es noch Kund tun. Hatte nicht vor einen TCP/IP Stack im µC einzubauen, da hätte ich ja gleich einen Webserver auf µC nehmen können. Jungs - bei euch lernt man nie aus ! Danke
bei linux gibt es ein Programm slattach, das alles füer eine serielle TCP-verbindung zur verfügung stellt. ist aber dann ein kompletter LAN-Portnur sehr langsam da über seriell
Man muesste meines Erachtens am Besten selbst was schreiben wenn's nur darum geht, dass der Controller einen ASCII bandwurm schickken kann, der dann als HTML page im browser erscheinen kann. Man muesste die HTTPGet anfragen ueber die serielle Schnittstelle schicken, zurueck kommt jeweils eine Seite. Das Prograemmchen haette ein TCP Port, zB 1234 und der Browser wuerde mit localhost:1234/index.html, dieses Prograemmchen nach der Seite index.html fragen. Das Prograemmchen waere demnach ein Portserver. Etwas in dieser Richtung ? Z
Avr Nix wrote:
> Kann man bei Linux eine serielle Schnittstelle eine IP verpassen?
Ich sach ma, das ist vollkommen egal, ob Linux, DOS oder Windows.
Die UART ist nur ne pure Byte-Schubser Schnittstelle ganz ohne
Protokoll, der kannst Du nix zuweisen (außer die Baudrate).
Du mußt entweder auf dem MC einen Server einrichten, der den ganzen
Protokoll-Schrunz inclusive IP macht oder auf dem PC.
Deshalb wird auch die UART so gerne von Anfängern benutzt, weil sie
keinerlei Protokoll-Overhead hat im Gegensatz zu Ethernet oder USB.
Einfach ranstöpseln, Terminalprogramm starten und fertich.
Peter
Also, was Du suchst nennt sich "netcat". Kleines Shell-Script ringsrum das die serielle Schnittstelle öffnet und stdin/stdout von Netcat mit der seriellen Schnittstelle verbindet. Netcat öffnet dann einen TCP-Port und gibt den Datenverkehr über stdin/stdout aus. Die sind aber mit der seriellen Schnittstelle verbunden. Also das was Du willst. Sollte out-of-the-box gehen.
@Zacc: ja in dieser Richtung geht das HTML wird quasi auf den µC erzeugt und über die Serielle Schnittstelle geschickt. HTTPGet ? Ist das nicht vom HTT Protokoll eine Abfrage der IP? Wie soll das Funktionieren? @all Wenn ich diese IP eingebe soll dann entsprechend die Seite angezeigt werden. Klappt das dann auch mit Netcat die Serielle Schnittstelle abfrage, da kenne ich noch nicht. Browser <-- IP-ADR <-- Netcat <-- ttyS0 Es soll keine Termialanwendung werden, sondern über den Browser Funktionieren.
Schreib folgendes Programm: 1) akzeptiere TCP-Verdindung 2) lies bis "\r\n\r\n" (Ende der Browser-Anfrage) 3) sende "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n" 4) lies aus /dev/ttyS0 bis "</html>" 5) sende die gelesenen Daten 6) schließe Verbindung Beispiel (Ruby):
1 | require 'socket' |
2 | |
3 | server = TCPServer.new(8000) |
4 | |
5 | while s = server.accept |
6 | s.gets("\r\n\r\n") |
7 | s.write("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n") |
8 | s.write(File.open('/dev/ttyS0').gets('</html>')) |
9 | s.close |
10 | end
|
> Deshalb wird auch die UART so gerne von Anfängern benutzt, weil sie > keinerlei Protokoll-Overhead hat im Gegensatz zu Ethernet.. bei ethernet braucht man im einfachsten fall auch kein protokoll, sondern kann rohdaten senden und empfangen > ja in dieser Richtung geht das HTML wird quasi auf den µC erzeugt > und über die Serielle Schnittstelle geschickt. HTTPGet ? Ist das nicht > vom HTT Protokoll eine Abfrage der IP? Wie soll das Funktionieren? wenn du auf tcp und ppp oder slip verzichten willst, dann brauchst du aber mindestens HTTP auf dem µC, denn irgendwie muss der PC die seiten ja anfordern und vielleicht was zurückschicken. wenn du eine seite mit frames oder bildern o.ä hast, dann musst du auch noch mehrere simultane connections handlen, denn ein browser holt sich das zeug meistens parallel. wenn der µC nicht zu klein ist, dann würde ich ihm die volle packung, also ppp/tcp/http verpassen. der vorteil dabei ist, dass es dann keine rolle spielt, ob du auf dem PC linux, windoofs, mac-os, bsd oder sonstwas verwendest und welchen browser du benutzt.
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.