web-dev-qa-db-ja.com

JavaScriptからシリアルポートデータを読み取る方法

USBを使用してArduinoをラップトップに接続し、Processingを使用してシリアルデータを読み取ることができます。

このデータをリアルタイムでローカルのWebブラウザーに取り込む方法はありますか?たとえば、シリアルポートからの値を表示するテキストフィールドですか?インターネットに接続する必要はありません。

JavaScriptバージョンのProcessingは、理想的なソリューションである次のコードをサポートしていません。

処理コードは次のとおりです。

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

Webブラウザからローカルマシンに直接アクセスする方法はありません。セキュリティ上の理由から、ブラウザはマシンリソースへのアクセスが非常に制限されています。

これを行うには、選択したブラウザの拡張機能を作成する方法があります。拡張機能にもさまざまな制限があります。

オプション2は、ローカルサーバーを使用して必要な機能を提供することです。個人的には、node.jsを使用することをお勧めします(軽量で、高速で、実装が簡単です)。 https://github.com/rwaldron/johnny-five (@kmasの提案どおり)または https://github.com/voodootikigod/nodeを使用してシリアルデータを読み書きできます。 -serialport および http://socket.io/ を使用して簡単なサービスを作成し、ブラウザ経由でそれに接続します。 Socket.ioは、最新のブラウザーでWebSocketを使用しており、リアルタイム接続に非常に適しています。

12
Tsanyo Tsanev

解決すべき同様の問題がありました。 My Data Acquisition System(DAQ)(arduinoなど)は、シリアル、HTTP、TCP、FTPでデータを中継します。私はそれをサーバーでキャプチャし、それをリアルタイムで自分のWebページに送信する必要がありました。

私が書いたハックでは、サーバーでnodejsを使用し、TCPソケットを使用してnodejsの「net」モジュールを使用し、socket.ioを使用してサーバーをHTMLページに接続しています。

コードとコンテキストは、「 nodejsでTCP/IPを介してセンサーデータを取得する方法 」にあります。

TCPを使用するのは、長距離でデータを送信したかったためです。ソケットプロトコルをシリアルに変更する必要があります。

シリアルからTCPへのリダイレクトの場合、WindowsではsensorMonkeyからのbloom、または* nix/Mac OSでは 処理スケッチ を使用できます。

1
Chintan Pathak