Forum: PC-Programmierung µC aus Browser (Clientseite) steuern


von Maddin (Gast)


Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Zipp (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Zipp (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Zipp (Gast)


Lesenswert?

>> 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.

von Maddin (Gast)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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

von Maddin (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Der Oschi (Gast)


Lesenswert?

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.

von Dennis U. (atmegadennis)


Lesenswert?

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

von Besucher (Gast)


Lesenswert?

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.

von Der Oschi (Gast)


Lesenswert?

Der Stromverbrauch einer Ethernetloesung ist um einiges hoeher wie der 
einer Seriellen.

von Michael U. (amiga)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.