2013-12-12 7 views
9

Ich habe ein Arduino mit meinem Laptop über USB verbunden, und ich kann die seriellen Daten mit Processing lesen.So lesen Sie serielle Daten von JavaScript

Gibt es eine Möglichkeit, diese Daten in Echtzeit in einen lokalen Webbrowser zu bekommen? Zum Beispiel, ein Textfeld, das den Wert von der seriellen Schnittstelle zeigt? Es muss nicht mit dem Internet verbunden sein.

Die JavaScript-Version von Processing unterstützt den folgenden Code nicht, der die ideale Lösung gewesen wäre.

Der Verarbeitungscode lautet:

myPort = new Serial(this, Serial.list()[0], 9600); 
// read a byte from the serial port 
int inByte = myPort.read(); 
// print it 
println(inByte); 
// now send this value somewhere...? 
// ehm... 
+1

Sie sollten sich das ansehen: https://github.com/rwaldron/johnny-five. Vielleicht kann es dir helfen. – kmas

Antwort

10

Es gibt keine Möglichkeit, direkt auf die lokale Maschine aus dem Web-Browser zugreifen. Aus Sicherheitsgründen haben Browser nur sehr eingeschränkten Zugriff auf die Maschinenressourcen.

Um dies zu tun, wäre eine Option, eine Erweiterung für den Browser Ihrer Wahl zu schreiben. Obwohl Erweiterungen auch eine Vielzahl von Einschränkungen haben.

Option zwei wäre, lokalen Server zu verwenden, um die Funktionalität bereitzustellen, die Sie benötigen. Persönlich empfehle ich die Verwendung von node.js (es ist leicht, schnell und einfach zu implementieren). Sie können serielle Daten lesen/schreiben mit https://github.com/rwaldron/johnny-five (wie @kmas vorgeschlagen) oder https://github.com/voodootikigod/node-serialport und dann können Sie http://socket.io/ verwenden, um einen einfachen Dienst zu erstellen und eine Verbindung über den Browser herzustellen. Socket.io verwendet WebSockets in modernen Browsern und funktioniert besonders gut für Echtzeitverbindungen.

+0

Danke! Ich habe bereits versucht, eine Browser-Erweiterung (Seriality) zu verwenden, aber es funktioniert nur in Safari unter OS X. Es scheint, dass ich nicht länger vermeiden kann, in Node.js zu schauen! – Kokodoko

+0

... Obwohl mich die Anforderungen etwas verblüffen. XCode? Kommandozeilen-Tools? Python? (aber nicht das neueste?) ... es scheint ziemlich viel zu sein, um eine so einfache Frage zu lösen. – Kokodoko

+1

Es gibt andere Optionen als node.js. Ich denke nur, dass node.js am nützlichsten ist, da das socket.io-Modul den größten Teil des Browsers für Sie übernimmt. Wenn Sie sich für Python, PHP, Ruby usw. entscheiden, müssen Sie einen Webserver installieren und konfigurieren und Ihre eigene WebSocket-Implementierung schreiben, und Sie werden keine Rückfälle haben. –

1

Ich hatte ein ähnliches Problem zu lösen. Mein Datenerfassungssystem (DAQ) (wie Ihr Arduino) überträgt Daten in HTTP, TCP, FTP sowie seriell. Ich musste es auf dem Server erfassen und dann in Echtzeit an meine Webseite senden.

Der Hack, den ich geschrieben habe, verwendet nodejs auf dem Server und verbindet DAQ mit dem Server über TCP-Sockets unter Verwendung des "net" -Moduls von nodejs und verbindet den Server mit der HTML-Seite unter Verwendung von socket.io.

Der Code und Kontext finden Sie in "How to get sensor data over TCP/IP in nodejs?".

Ich benutze TCP, um Daten über eine lange Distanz zu übertragen. Sie müssen das Socket-Protokoll seriell ändern.

Für Serial-to-TCP-Umleitung können Sie Bloom von SensorMonkey für Windows oder processing sketch für * nix/Mac OS verwenden.

+0

Ich schaute auf das, aber es beinhaltet eine Menge Schritte und verlässt sich stark auf externe Dienste, die online sind. Mit einer Chrome-Erweiterung kann ich grundsätzlich offline sein und trotzdem auf die serielle Schnittstelle zugreifen. – Kokodoko