2013-12-12 100 views
9

Ho collegato un Arduino al mio laptop tramite USB, e posso leggere i dati seriali usando Processing.Come leggere i dati della porta seriale da JavaScript

C'è un modo per ottenere questi dati in tempo reale in un browser web locale? Ad esempio, un campo di testo che mostra il valore dalla porta seriale? Non deve essere connesso a Internet.

La versione JavaScript di Processing non supporta il codice seguente, che sarebbe stata la soluzione ideale.

codice del trattamento è:

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

Si dovrebbe guardare questo: https://github.com/rwaldron/johnny-five. Forse può aiutarti. – kmas

risposta

10

Non v'è alcun modo per accedere direttamente alla macchina locale dal browser web. Per motivi di sicurezza, i browser hanno un accesso molto limitato alle risorse della macchina.

Per fare ciò un'opzione potrebbe essere quella di scrivere un'estensione per il browser di propria scelta. Anche se le estensioni hanno anche una varietà di limitazioni.

L'opzione due sarebbe utilizzare il server locale per fornire la funzionalità necessaria. Personalmente raccomando di usare node.js (è leggero, veloce e facile da implementare). È possibile leggere/scrivere dati seriali utilizzando https://github.com/rwaldron/johnny-five (come suggerito da @kmas) o https://github.com/voodootikigod/node-serialport e quindi è possibile utilizzare http://socket.io/ per creare un servizio semplice e collegarsi ad esso tramite il browser. Socket.io utilizza WebSockets nei browser moderni e funziona eccezionalmente bene per le connessioni in tempo reale.

+0

Grazie! Ho già provato a utilizzare un'estensione del browser (Seriality) ma funziona solo su Safari su OS X. Sembra che non riesca più ad evitare di guardare in Node.js! – Kokodoko

+0

... Sebbene i requisiti mi confondano un po '. XCode? Strumenti da linea di comando? Pitone? (ma non l'ultimo?) ... sembra abbastanza da capire, per una domanda così semplice. – Kokodoko

+1

Esistono altre opzioni rispetto a node.js. Penso che node.js sarebbe molto utile, dal momento che il modulo socket.io fa la maggior parte del lavoro pesante nel browser per te. Se decidi di utilizzare Python, PHP, Ruby, ecc., Dovrai installare e configurare un server web e scrivere la tua implementazione WebSocket e non avrai fallimenti. –

1

Ho avuto un problema simile da risolvere. Il mio sistema di acquisizione dati (DAQ) (come il tuo arduino) trasmette i dati in HTTP, TCP, FTP, oltre che in serie. Ho dovuto catturarlo sul server e poi inviarlo alla mia pagina web in tempo reale.

L'hack che ho scritto utilizza nodejs sul server e collega DAQ al server utilizzando i socket TCP utilizzando il modulo "net" di nodejs e collega il server alla pagina HTML tramite socket.io.

Il codice e il contesto sono disponibili in "How to get sensor data over TCP/IP in nodejs?".

Uso TCP come volevo trasmettere i dati su una lunga distanza. È necessario modificare il protocollo socket in seriale.

Per il reindirizzamento da seriale a TCP, è possibile utilizzare bloom da sensorMonkey per Windows o il loro processing sketch per * nix/Mac OS.

+0

L'ho esaminato ma comporta molti passaggi e dipende in gran parte dall'internet dei servizi esterni. Utilizzando un'estensione di Chrome, in pratica posso essere offline e accedere comunque alla porta seriale. – Kokodoko