Moin!
Ich wollte einen µC über eine (echte oder USB) COM-Schnittstelle mit
einem Browser (Clientseitig) kommunizieren lassen. Dazu gibt es auch
sehr viele Lösungsansätze, aber ich google schon seit Tagen an der
richtigen Lösung. Leider könnte ich nicht wirklich Infos finden, wie man
mein Problem lösen kann.
Es gäb nun die PHP Lösung mit dem Webserver auf dem PC, aber ich kann
nicht auf allen Rechnern an denen ein µC hängt einen Webserver
einrichten....aber mit PHP würde es gehen. Weiterhin könnte man auch
eine *.exe machen, die man anklickt und dann Daten aus dem µC ausliest
und an eine Webseite weitergibt. Das wäre aber einseitig, den ich hätte
gerne von der Webseite auch Daten an den µC gesendet....
Was ich bräuchte wäre quasi sowas wie ein Browserplugin von dem aus man
auf die COM zugreifen kann, denn leider bietet Javascript (dank des
Sandkastenprinzips) keinen Zugriff auf die Hardware. Hat da irgend
jemand von euch Ahnung, wie man Daten von und zu der RS232 aus dem
Browser (wichtig, Clientseite) aus möglich machen kann.
Achja...ich hab auf den Rechnern Windoof, mit Linux kann ich leider
garnix anfangen :-(
Danke für eure Hilfe
Maddin
Maddin schrieb:
> Moin!>> Ich wollte einen µC über eine (echte oder USB) COM-Schnittstelle mit> einem Browser (Clientseitig) kommunizieren lassen. ...
Die Standardlösung ist ein http-Server, der auf dem µC läuft. Völlig
systemunabhängig. Entweder auf dem ohnehin vorhandenen µC, wenn dafür
TCP/IP-Stack usw. verfügbar ist, oder ein zusätzlicher µC der das kann.
Beispiel Lantronix XPORT: im Prinzip ein Ethernet/COM-Wandler, die
Konfiguration wird über einen eingebauten TCP/IP-Stack (der wird ja eh
gebraucht) und einige in der Firmware verankerte www-Seiten vorgenommen.
Alternativ kann man natürlich ein Windowsprogramm schreiben, das über
die COM-Schnittstelle mit dem µC kommuniziert, das ist dann aber nicht
mehr systemunabhängig. Noch alternativer kann man auch selbst ein
entsprechendes Browser-Plugin schreiben, aber konsequenterweise sollte
man das dann für Windows, Linux und Mac sowie für die verbreitetsten
Browser tun - ein praktisch unmöglicher Aufwand.
Gruss Reinhard
Ich hab mal einen Webserver geschrieben, der auf einem Mega32 laeuft und
eben systemabhaengig ist. Man will ja in Prozesse eingreifen koennen.
Prozessvariablen verstellen, usw. die Kommunikation war ueber die
serielle Schnittstelle. Aufm PC braucht man einen Proxy, der Anfragen an
den AVR Webserver ueber die serielle Schnittstelle leitet. Es ist
machbar.
Man könnte auf dem µC neben dem Webserver einen PPP-Server und
Modememulator implementieren, so daß sich das Teil an der seriellen
Schnittstelle verhält wie ein serielles Modem, das zur Einwahl ins
Internet genutzt wird.
Die Modememulation ist recht einfach, alle vom PC ans Modem gesendeten
Kommandos können mit OK beantwortet werden, das ATD (Wähl)-Kommando
leitet den Verbindungsaufbau ein, woraufhin nach einer gewissen
Verzögerungszeit "CONNECT" gesendet wird.
Danach kann der PPP-Server die Kontrolle übernehmen und nach
erfolgreichem Verbindungsaufbau die Daten an den Webserver weiterleiten.
Mit einem embedded Linux sollte das fast schon mit Bordmitteln gehen;
wenn ich mich recht erinnere, sollte mgetty die
PPP-Server-Funktionalität zur Verfügung stellen können.
Lediglich die "Emulation" eines üblichen Modems muss noch gebastelt
werden.
Vorteil: Abgesehen von der einzurichtenden "Internetwählverbindung" muss
auf dem angeschlossenen PC gar nichts installiert werden, alles kann
komplett auf der µC-Seite abgewickelt werden.
Dann braucht immer noch ein Serverplugin, das den Zugriff auf die
Hardware, resp andere Prozesse macht. Wie schon gesagt, es geht auch
ohne Linux aufm Controller.
> Dann braucht immer noch ein Serverplugin, das den Zugriff auf die> Hardware, resp andere Prozesse macht.
Das war doch klar, oder?
> Wie schon gesagt, es geht auch> ohne Linux aufm Controller.
Sicher, nur bringt das halt den erforderlichen IP-Stack und PPP-Server
schon mit. Die von Dir angedeutete "Proxy-Lösung" erfordert deutlich
mehr Einrichtungsaufwand auf der PC-Seite.
>> Dann braucht immer noch ein Serverplugin, das den Zugriff auf die>> Hardware, resp andere Prozesse macht.>>>Das war doch klar, oder?
Das ist klar bis man sowas selbst schreiben muss und dann die
benoetigten/greifbaren Unterlagen als eher mager empfindet.
Da kann es dann vorkommen, dass man das Verarbeiten eines "GET" als
einfacher empfindet. Das http ist nicht so schwer und dann muss noch
etwas script reinwerfen und gut ist.
hmm...naja, also ein TCP Stack fällt aus. Vielleicht könnte man einen
Zusatz-TCP/IP-Controller stricken, den man dann mit der UART des
eigentlichen Controllers verbinden kann, aber das ist auch nicht Sinn
der Sache.
Ich hab ja noch eine Idee, die ich noch nicht geschrieben hab, weil ich
es noch nicht getestet hab und es so viel zu einfach klingt :-D
Aber vorher....Gestern hab ich vergessen zu schreiben, dass ich einen
Webserver mit Datenbank hab, denn woher soll die Webseite überhaupt
kommen, wenn nicht vom Webserver oder aus einer Datei. ;-) Deswegen
hattet ihr auch mit dem Webserver bzw TCP/IP Stack schon recht....
Also meine noch verschwiegene Lösung....ich habe eine Konsolendatei
Namens "auslesen.exe" und eine Konsolendatei "neureinschreiben.exe".
Wenn ich nun auf einen Link oder Button klicke öffnet mir der Browser
die Datei "auslesen.exe". Die auslesen.exe holt sich alle benötigten
Daten aus dem µC raus und öffnet dann selbstständig eine neue Webseite,
mit den Messwerten in der URL. Die nun aufgerufene Webseite schlisst
sofort nach dem aufrufen wieder. Über die $_GET komme ich über PHP vom
Webserver wieder an die Messwerte rann, kann diese dann in die Datenbank
einpflegen lassen und mir die Werte auf der Webseite darstellen.
Um dann neue Werte in den Controller einzuspielen öffne ich über die
Webseite die Datei "neureinschreiben.exe" und übergebe ihr die zu
ändernden Werte ( main(int argc, char* argv[]) ) die sie an den µC
sendet.
Ja das war meine letztes Gehirngespenst wie ich aus einem Browser
vielleicht Daten an einen µC bekomme und Daten vom µC in den Browser.
Leider hab ich noch zuwenig mit C++ gespielt, um solche (bestimmt
einfach) *.exe zu schreiben....Deshalb nun die Frage...kann sowas
überhaupt gehen?
Autsch! Also die Idee vergiss mal lieber...
Beschreib einfach mal die Architektur, hat jeder PC so einen uC
dranhängen? Oder hängt der an einer zentralen stelle? Gff ließe sich das
ganze komfortabel über ein JavaPlugin oder einen Proxyserver lösen. Für
welche Betriebssysteme ist das ganze angedacht?
Wenns proprietär sein darf (Windoof ist ja schon gefallen) könnte man
auch über ein Active-X Plugin nachdenken (oder wie auch immer die Dinger
dieses Jahr heißen)
Besonders mit VB 6.0 konnte man solche Dinger ziemlich schnell
erstellen.
Wies mit C# aussieht weiß ich nicht und mein letztes C++-MFC Active X
ist schon Jahre her.
Mit ein wenig Glück findet sich auch ein UART Active-X welches man dann
von JavaScript ansprechen kann.
Allerdings ist man dann höchst wahrscheinlich auf den IE festgenagelt.
Edit:
Hier ist so ein Teil in C# beschrieben
http://dotnetslackers.com/articles/csharp/WritingAnActiveXControlInCSharp.aspx
GÄHN Frühschicht, Spätschicht, Nacht in einer Woche....da kommt der
Körper durcheinander....
ja vielleicht sollte ich es etwas genauer erklären. Also ich verwende
kleine Thermometer mit einer Seriellen Schnittstelle (USB und RS232,
aber beides als "COM-Port" von Windows aus gesehen. Die Thermometer
liegen quasi in der "Gegend" (Garten, Wohnung, ... bei mir und meiner
Verwandtschaft in ganz Deutschland) rum und messen Temperaturen. Da die
Thermometer regelmäßig ausgelesen werden müssen und das Ganze möglichst
einfach zu bedienen sein soll, dachte ich gleich an eine Webseite (kann
halt PHP, MySQL, ... aber sogut wie kein C++ mit GUI) Über die Webseite
(per Knopfdruck) sollten dann auf dem PC die Thermometer ausgelesen
werden und die Daten dann in die Datenbank eingespielt werden. Ggf muss
halt, wenn z.B. die interne Uhr falsch geht, diese korrigiert werden.
Natürlich sollte der Betrachter auch nur ein Programm/Webseite benutzen
müssen, sonst wird es zu schwierig für manche Mitwirkende.
Da ich schon sehr viel gegoogelt hab bin ich wohl oder übel auf diese
Seite gekommen (gibt noch etliche andere mit gleichem Inhalt)
http://joergnapp.de/programme-durch-den-browser-starten/ Daher dachte
ich es sollte kein Thema sein eine *exe aus dem Browser zu starten. Ich
hab dies nun schon testen können, der IE mit Vista macht es auch, aber
nur mit viel zusätzlichem geklicke. Der Chrome startet die *.exe
überhaupt nicht, sondern lädt sie nur runter....also ist das auch mal
hinfällig, da Opera auch keine *.exe mag.
Es gibt für den Fox auch ein Plugin um die RS232 anzusprechen, aber das
kostet viel Geld, .... also ist das auch gestorben, da die meisten eh
den IE nutzen und so viel Geld besitze ich auch ned um genug Lizenzen zu
kaufen.
über die Active-X Plugins bin ich auch schon gestolpert, aber noch ohne
viel Lesestoff zu finden. Das ist aber denke ich auch der Knackpunkt.
Vielleicht kennt sich damit noch jemand besser aus, für Input bin ich
immer offen :-D
Hallo Maddin,
ich würde es dann anders machen: Auf jedem der "Temperatur"PCs läuft im
Hintergrund ein Programm (Autostart oder Service) das kann z.B. in
Java/C,C++/... geschrieben werden.
Dieses liest alle X Minuten die Temperatur aus und versucht diese dann
an einen Internetserver zu senden (kann erstmal ein simpler GET Request
sein). Auf dem Internetserver läuft dann die Datenbank wo die Daten
dauerhaft hinterlegt werden können und bei Bedarf eingesehen werden.
So ist ein minimum an Benutzerinteraktion nötig und jeder kann seine
Daten sowie die Daten der anderen jederzeit über einen Standardbrowser
einsehen.
Also ein Proxy ist wirklich schnell geschrieben. So ein Proxy ist eine
Software, die oeffnet einen socket, zB 127.0.0.1, port 6667 und leitet
was da kommt auf die serielle schnittstelle um. Was retour kommt von der
seriellen Schnittstelle, wird an den socket geleitet, diesmal als
packet. Mit den modernen RAD Tools ist das eine schnelle Sache. Usy so
einen Proxy kann man als Dienst starten, dh er laeuft immer, unabhaengig
vom Benutzer. Allerdings wuerd ich ihm ein Window geben, sodass man
debuggen kann.
Warum nimmst du nicht den hier schon oft verwendeten Webserver auf Atmel
Basis. Er kann alles, ich mache das auch mit so einem Teil. Meine SQL
liegt im www und mein uC ruft alle 2 Minuten eine Seite im Inet auf und
übermittelt die werte.
Dazu brauchst du weder einen PC noch irgendeinen komplizierten Wandler.
Du brauchst lediglich wie für alle anderen Lösungen auch einen
Internetanschluß.
mfg
Dennis
Und mit dem NET-IO von Pollin bekommt man die Elektronik für 20,-. Jeder
Messtelle einen solchen kleinen WEB-Server spendiert und dein Problem
wäre gelößt.
Hallo,
an jedem Standort ein AVR-Webserver an den DSL-Router mit einem
RFM-Empföngsmodul.
Die Sensoren mit RFM02 in der Gegend verteilt, wenn nötig eben mit etwas
besseren Antennen verziert (großer Garten isw.).
Die Daten sammelt ein Server im I-Net von allen ein und aufgerufen
werden die Daten auch von dort.
Veränderungen an den Webserver schicken, der reicht sie entweder direkt
an Hardware weiter oder per Netzwerk weiter oder oer serieller zu einem
PC.
Das hängt dann wohl von den konkreten Absichten ab.
Mein (bisher nicht weiter gemachtes) Spielfeld:
http://www.avr.roehres-home.de/sensoren/index.html
was bei mir noch nicht läuft ist der Mini-FTP-Client auf dem
AVR-Webserver.
Die Sensordaten werden alle paar Minuten als CSV-Zeile in ein Flash am
AVR geschrieben. Der soll diese Daten mit Timestamp als Filenamen in
gewählten Zeitabständen (30min oder so) auf einen FTP-Server im I-Net
schieben.
Das läuft noch nicht so, wie es soll...
Gruß aus Berlin
Michael