Forum: Mikrocontroller und Digitale Elektronik plattformunabhängige Bedienoberfläche/Visualisierung für USB-Gerät


von Erik (Gast)


Lesenswert?

Hallo,


ich suche für ein USB-Gerät nach einer möglichst plattformunabhängigen 
Möglichkeit eine einigermaßen hübsche Bedienoberfläche und 
Visualisierung zu realisieren. Am liebsten wäre es mir wenn man das mit 
dem vorhandenen Default-Browser erledigen könnte. Das USB-Gerät sollte 
also vom System als eine Art TCP-Connection erkannt werden an deren 
anderen Ende (im USB-µC) ein simpler Web-Server die Bedienoberfläche 
ausliefert (ob das per Dynamic-HTML oder AJAX oder gar als Java-Applet 
o.ä. realisiert wird ist dann die Entscheidung des 
USB-Geräte-Entwicklers und hängt sicher auch von den Möglichkeiten 
(ROM-Kapazität) des µC im USB-Gerät ab).

Gibt es da irgendeine Möglichkeit sowas in der Art zu realisieren?
Von den vorhandenen Standard-USB-Device-Klassen habe ich keine gefunden 
die sowas ermöglichen würde.

Habt ihr Vorschläge wie man sowas angehen könnte?

Ich möchte eigentlich nur das sich die Bedienoberfläche direkt nach dem 
Einstöpseln von alleine öffnet und keinerlei Software auf dem PC 
installiert werden muss und dass das natürlich unter jedem OS läuft.


Grüße
Erik

von Peter II (Gast)


Lesenswert?

Erik schrieb:
> Habt ihr Vorschläge wie man sowas angehen könnte?

es müsste sich einfach als Netzwerkkarte anmelden. Und wenn es dann noch 
UpNP bereitstellt sollte es automatisch unter Windows bei Geräten 
auftauchen. Dort kann man dann den Browser starten. (so wie bei den 
Fritzboxen)

von Stefanus (Gast)


Lesenswert?

> Ich möchte eigentlich nur das sich die Bedienoberfläche direkt nach
> dem Einstöpseln von alleine öffnet

Den Autostart hat Microsoft gotttseidank abgeschafft. Zu viele USB 
Geräte hatten auf diese Art Schadcode eingeschleust.

von uiii. (Gast)


Lesenswert?

Die mehr oder weniger einzige sinnvolle USB Anbindung fuer Controller is 
die USB to Serial. Denn die wird bleiben. Plus die Massenspeicher 
Schnittstelle, aber um die geht es hier nicht. Irgendwelche anderen USB 
Device werden's schwer haben. Bei der N+1-ten neuen Windows Version geht 
der mitgelieferte Treiber dann ploetzlich nicht mehr. Der Hersteller kam 
zwischenzeitlich leider nicht auf die Stueckzahlen und mag keine neuen 
Zeilen Code zu diesem Projekt mehr schreiben.
Wenn man nun die windows seite und die controller Seite selbst 
gestallten kann, ist das obige Konzept fast machbar.
Der controller muss natuerlich den webserver spielen. Und auf der PC 
Seite muss ein Demon, (Prozess) die serialports kontrollieren, abfragen 
und falls erkannt das Serialport auf einen Socket umleiten, sodass ein 
Browser ein Netzwerkdervice sieht. Das automatische Oeffnen des Browsers 
halt ich fuer nicht gut, sollte aber machbar sein.

Alles machbar, aber viel Arbeit...

von Erik (Gast)


Lesenswert?

Peter II schrieb:
> es müsste sich einfach als Netzwerkkarte anmelden.
> Und wenn es dann noch UpNP bereitstellt
Das bedeutet das der µC Ethernet, IP, TCP und dann auch noch UPnP (mit 
UDP) bieten muss und das dürfte den Rahmen eines µC selbst mit 256kB 
Flash deutlich sprengen.
Eine TCP-Verbindung ist im wesentlichen eine bidirektionale 
Byte-Strom-Schnittstelle mit guter Zuverlässigkeit (also eine perfekte 
RS232-Verbindung) und das sollte erstmal keinen µC vor echte Probleme 
stellen, die Zuverlässigkeit von TCP kann man sicher auch auf Basis von 
USB abbilden (und sowas wie Staukontrolle oder Slow-Start ist bei USB 
wohl eher nicht erforderlich). Es bliebe für den µC ein Web-Server mit 
einer persistenten Verbindung zum Client (Browser), damit ließen sich 
zwar nicht mehrere Dateien parallel (in unterschiedlichen 
Geschwindigkeiten) übertragen aber für eine halbwegs hübsche 
Bedienoberfläche in einem Browser sollte es IMHO schon reichen und auch 
in 128kB Flash passen (wenn man auf Bilder gut verzichten kann).

Ein weiteres Problem mit nacktem Ethernet ist die Vergabe der 
IP-Adressen, ein normaler PC wird wohl kaum auf DHCP-Anfragen in der 
Rolle als Server antworten, wenn dann eher umgekehrt und in einem 
USB-Gerät das nichts über die sonstige Netzwerkkonfiguration des PC weiß 
würde ich keinen DHCP-Server packen wollen, schon wegen dem Potential 
auf IP-Adressraum-Kollisionen usw., selbst mit IPv6 ist das IMHO nicht 
so ganz einfach. Nebst dessen das man dann eigentlich auch immer 2 
gültige (also einmalige) MAC-Adressen benötigt was die Kosten wieder 
unnötig erhöht (echte MAC-Adressen kosten Geld und gefackte könnten bei 
mehreren gleichartigen USB-Geräten eventuell kollidieren).

> sollte es automatisch unter Windows bei Geräten auftauchen.
Da sind genau zwei Worte die mir nicht so gut gefallen, Du ahnst sicher 
schon, "sollte" und "Windows".
Ich suche etwas das halbwegs zuverlässig Autostart hinbekommt und das 
unter möglichst jedem OS, wobei die zweite Anforderung definitiv die 
wichtigere ist. Autostart kann man eventuell mit einer kleinen 
gedruckten Anleitung für den User umgehen.

> Dort kann man dann den Browser starten. (so wie bei den Fritzboxen)
Aha, ich hab zwar weder eine Fritzbox noch Windows (kann also nicht 
nachvollziehen was Du genau meinst) aber das klingt zumindest halbwegs 
nach dem was ich mir wünsche, wenn ich auch den nötigen Aufwand (wegen 
Ethernet/IP/TCP) für zu hoch halte.

Danke für Deine Idee.


Noch andere Vorschläge?


Grüße
Erik

von Erik (Gast)


Lesenswert?

uiii. schrieb:
> Die mehr oder weniger einzige sinnvolle USB Anbindung fuer Controller is
> die USB to Serial. Denn die wird bleiben.
Daran hatte ich auch schon gedacht aber das erfordert in jedem Fall ein 
bereits installiertes Programm auf dem PC und genau das will ich in 
jedem Fall vermeiden.

> Plus die Massenspeicher Schnittstelle, aber um die geht es hier nicht.
Diese Schnittstelle bietet zumindest theoretisch Autostart (ja ich weiß 
das wurde alles wieder abgeschalten) aber dafür keine 
Echtzeit-Kommunikation zwischen dem PC und dem "Speichergerät" (schon 
wegen dem Datei-Cache den alle modernen OSe haben).

> Der controller muss natuerlich den webserver spielen.
Den Webserver ansich sehe ich gar nicht mal als so großes Problem, man 
muss ja nich gleich einen Apache nehmen, es gibt in der Embedded-Szene 
durchaus einige kleine Webserver die auch anhand von Vorlagen Messwerte 
usw. in einen HTML-Seite zur Laufzeit einpflegen können. Das wäre so 
ungefähr die Größenordnung die ich mir wünschen würde. Nur 
Ethernet/IP/TCP halte ich für zu aufwändig und für zu problemlastig 
(IP-Adressen festlegen usw.)

> Und auf der PC Seite muss ein Demon, (Prozess) die serialports
> kontrollieren, abfragen und falls erkannt das Serialport auf einen
> Socket umleiten, sodass ein Browser ein Netzwerkdervice sieht.
Ansich eine wirklich interessante Idee die auch mit vertretbaren 
Aufwand, selbst für mehrere OSe, machbar sein sollte. Es bleibt nur der 
Hacken das der User vor der ersten Benutzung ein Programm installieren 
muss das er erstmal bekommen muss, es wäre schön wenn es ohne dem ginge.

> Das automatische Oeffnen des Browsers halt ich fuer nicht gut
Die Bedenken kann ich natürlich gut nachvollziehen. Der KDE fragt mich 
immer was er mit neuen USB-Geräten (die einer bekannten Device-Klasse 
entsprechen, also eigentlich nur Massenspeicher und Kameras) passieren 
soll. Ich denke ein oder zwei Mausklicks sind jedem User zuzumuten damit 
ein neu eingestöpseltes USB-Gerät seinen Dienst aufnimmt.


Grüße
Erik

von Peter II (Gast)


Lesenswert?

Erik schrieb:
> Ein weiteres Problem mit nacktem Ethernet ist die Vergabe der
> IP-Adressen

ist nicht wirklich ein Problem. Es gibt 
http://en.wikipedia.org/wiki/Zero-configuration_networking

> > sollte es automatisch unter Windows bei Geräten auftauchen.
> Da sind genau zwei Worte die mir nicht so gut gefallen, Du ahnst sicher
> schon, "sollte" und "Windows".

naja Linux war noch nie Benuzterfreundlich, dort wirst du so etwas nicht 
finden, aber diese Leute kommen auch mit eine Anleitung und ein paar 
scripten zurecht.

Erik schrieb:
>> Dort kann man dann den Browser starten. (so wie bei den Fritzboxen)
> Aha, ich hab zwar weder eine Fritzbox noch Windows (kann also nicht
> nachvollziehen was Du genau meinst) aber das klingt zumindest halbwegs
> nach dem was ich mir wünsche,

Windows stellt UPNP Geräte die es finden gleich in einer Liste darf, 
dort kann man einfach mit Doppelklick die Webseite des Geräte öffnen.

Erik schrieb:
> Noch andere Vorschläge?

dann wirst du wohl einen Webserver selber schreiben müssen, in Java 
sollte er unter Windows und Linux laufen - aber nur wenn die Leute noch 
Java haben. Dann müsste dein USB-Gerät ein Massenspeicher bereitstellen 
wo der Webserver drauf ist. Eine Andere Möglichkeit sehe ich nicht.

von greg (Gast)


Lesenswert?

Das wird definitiv schwer. Am weitesten kommst du wahrscheinlich mit der 
CDC-ACM-Klasse, die ist weit unterstützt, und ein kleines 
Terminalprogramm ist sowieso vorhanden oder einfach nachinstalliert.

uiii. schrieb:
> Die mehr oder weniger einzige sinnvolle USB Anbindung fuer
> Controller is
> die USB to Serial. Denn die wird bleiben.

HID lässt sich auch sehr sinnvoll einsetzen, auch für 
Nicht-Eingabe-Geräte. In diesem Fall aber eher nicht.

von gerd (Gast)


Lesenswert?

Hatte sowas mal als MSD gemacht.
War im Prinzip ein PIC18 mit nem 1MBit SO8-Flash. Meldete sich wie ein 
USB Stick.
Darauf war die Oberfläche als HTML Datei. Diese hat ein Javascript 
eingebunden, das per speziellem Ajax mit dem Filesystem, also dem PIC18 
kommunizierte. Über eine RS232 konnte dann mit anderen Microcontrollern 
kommunizieren.

Hat unter Win, Linux, Solaris, BSD, OSX funktioniert. Da es aber ein 
"Hack" war gabs immer wieder mal Probleme, dass die neueste Firefox 
Version wieder mal spezielle Zugriffe geschützt (verboten) hatte. Zum 
Beispiel per Javascript auf ein weiteres Script zugreifen, das in einem 
parallel-Ordner lag. Das Projekt wurde deshalb uninteressant.

gerd

von Frank K. (fchk)


Lesenswert?

Du bräuchtest ein Composite Device, das aus folgenden Geräten besteht:

1. Mass Storage, das ein USB CD-Laufwerk mit einem ISO bereitstellt. 
Darüber gibts die Software, Dokumentation etc. Viele UMTS-Sticks machen 
das so, aber auch mein Brother 2430PC Labelprinter.

2. RNDIS: eine standardisierte Ethernet-Schnittstelle, über die die 
Kommunikation anschließend geht. Alternativ wäre auch eine USB CDC 
Schnittstelle (also eine virtuelle serielle Schnittstelle) denkbar. 
Windows braucht dafür ein .INF, das auf dem eingebauten ISO-Image 
mitgeliefert wird.

USB-technisch ist das ganze nicht trivial, aber andere machen es ja 
auch.

fchk

von Erik (Gast)


Lesenswert?

Peter II schrieb:
> ist nicht wirklich ein Problem. Es gibt
> http://en.wikipedia.org/wiki/Zero-configuration_networking
und wenn das lokale Netz des PCs bereits mit diesem IP-Adressraum 
arbeitet, oder gar mehrere dieser USB-Geräte angestöpselt werden sollen?
Ich denke einem Gerät IP aufzupfropfen das eigentlich gar kein IP 
braucht ist viel zu problemanfällig.

> naja Linux war noch nie Benuzterfreundlich,
Sory, aber mein Linux ist Benuzterfreundlich!

> Windows stellt UPNP Geräte die es finden gleich in einer Liste darf,
> dort kann man einfach mit Doppelklick die Webseite des Geräte öffnen.
Solange diese Liste nicht zu arg versteckt ist ist das sicher eine 
interessante Variante aber UPnP gibt es soweit ich weiß nur unter 
Windows halbwegs brauchbar, MAC OS und Linux setzen wohl eher auf 
Bonjour / Zero-Conf (das kann mehr als nur IP-Adressen vergeben), hab 
ich selber schon für andere Projekte eingesetzt.

> Dann müsste dein USB-Gerät ein Massenspeicher bereitstellen wo
> der Webserver drauf ist. Eine Andere Möglichkeit sehe ich nicht.
Aber per Massenspeicher kann man nicht wirklich mit dem USB-Gerät 
kommunizieren, man kann das OS auch nicht dazu bringen auf bestimmte 
Sektoren o.ä. zuzugreifen.


greg schrieb:
> Am weitesten kommst du wahrscheinlich mit der CDC-ACM-Klasse,
die finde ich nicht, meinst Du CDC-ATM (CDC Subclass for Asynchronous 
Transfer Mode Devices)?


Grüße
Erik

von Peter II (Gast)


Lesenswert?

Erik schrieb:
> Aber per Massenspeicher kann man nicht wirklich mit dem USB-Gerät
> kommunizieren, man kann das OS auch nicht dazu bringen auf bestimmte
> Sektoren o.ä. zuzugreifen.

ein USB-Gerät kann mehr Sachen gleichzeitig bereitstellen.

von Erik (Gast)


Lesenswert?

gerd schrieb:
> Darauf war die Oberfläche als HTML Datei. Diese hat ein Javascript
> eingebunden, das per speziellem Ajax mit dem Filesystem, also dem PIC18
> kommunizierte.
ich kann mir ehrlich nicht vorstellen wie das zuverlässig funktionieren 
sollte, jede Datei die der Browser per Script liest landet im Cache des 
OS und wird damit nie wieder gelesen (ist also eine einmalige 
Kommunikation und das auch nur in eine Richtung), es sei denn der 
Massenspeicher ist deutlich größer als der RAM und hat genug Dateien.

> Da es aber ein "Hack" war gabs immer wieder mal Probleme, ...
Das kann ich mir lebhaft vorstellen.


Grüße
Erik

von Erik (Gast)


Lesenswert?

Peter II schrieb:
> ein USB-Gerät kann mehr Sachen gleichzeitig bereitstellen.
Okay, nehmen wir einen Massenspeicher auf dem ein platformunabhängiges 
Programm (z.B. in Java) liegt und eine virtuelle serielle Schnittstelle 
o.ä., dann bleibt das Problem wie das Programm diese Schnittstelle 
findet (selbst wenn mehrere ähnliche USB-Geräte angeschlossen sind) und 
benutzen kann.
Kann Java mit seriellen Schnittstellen umgehen?
Kann ein Java-Programm herausfinden zu welchem USB-Gerät eine serielle 
Schnittstelle gehört bzw. von welchem USB-Gerät es selber stammt?


Grüße
Erik

von gerd (Gast)


Lesenswert?

Ja. Im Prinzip war nur der 1MBit Speicher reel. Ich hab aber einfach 
einen Stick mit fast unendlicher Größe vorgegaugelt. Und die Daten waren 
jedesmal in einer anderen "virtuellen Datei" verpackt.

von Peter II (Gast)


Lesenswert?

Erik schrieb:
> Kann Java mit seriellen Schnittstellen umgehen?
ja

> Kann ein Java-Programm herausfinden zu welchem USB-Gerät eine serielle
> Schnittstelle gehört bzw. von welchem USB-Gerät es selber stammt?
irgendwie bestimmt. Denn es ist ja EIN USB gerät, bei Linux müsste es 
ich halt im /proc/usb und unter Windows gibt es auch Möglichkeiten. Man 
müsste also den Zusammenhang zwischen Laufwerk und COM-Port herstellen.

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.