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.
Der Stromverbrauch einer Ethernetloesung ist um einiges hoeher wie der einer Seriellen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.