3

シリアル ポート (シリアル = USB。USB を XBEE デバイスに接続しているため、イーサネット シールドは使用したくない) を使用して、web 経由で arduino からデータを制御および受信しようとしています。

調査した結果、最善のアプローチは JavaScript であると考えているようです (PHP は、arduino からシリアル経由でデータを読み取る際に問題があるようです)。

現在、Processing を使用して arduino とやり取りしようとしています。

私は、処理 (Java) から実行されたときに正常に動作する arduino からセンサー データを読み取る簡単なスクリプトから始めました。Web ブラウザーを介して (処理中に JavaScript を使用して) エクスポートして表示しようとすると、センサー データ自体を除くすべてがブラウザーに表示されます。

私の理解 (推測のようなもの) は、何らかの理由で、Web ブラウザーから呼び出されたときに COM ポートが開かないということです (おそらくセキュリティ上の問題?)。PC(WIN7)でもMAC(OSX)でも同じ現象が発生します。

助けていただければ幸いです。

コードは次のとおりです:(コメントは削除されました)

import processing.serial.*;
Serial myPort;      
int xPos = 1;      

void setup () {

size(400, 300);        

println(Serial.list());

myPort = new Serial(this, Serial.list()[0], 9600);

myPort.bufferUntil('\n');

background(0);
}
void draw () {

}

void serialEvent (Serial myPort) {

String inString = myPort.readStringUntil('\n');

if (inString != null) {

inString = trim(inString);

float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);


stroke(127,34,255);
line(xPos, height, xPos, height - inByte);


if (xPos >= width) {
xPos = 0;
background(0);
}
else {

xPos++;
}
}
}
4

3 に答える 3

1

これは問題を回避している可能性がありますが、デバイスと HTTP サービスの間に分離レイヤーを実装する必要があるようです。

node.js を使用して基本的な HTTP サービスを作成するか、PC に常駐し、データの要求を調停して、要求がブラウザーからデバイスに直接送信されないようにすることができます。

ブラウザがハードウェア インターフェイスへのクライアント側 JS アクセスを厳密に制御することは理にかなっています。

于 2013-03-22T18:38:20.393 に答える
1

Drew R が指摘しているように、シリアル経由で Arduino データを読み取り、必要なものに HTTP 経由でブロードキャストする簡単な「サーバー」アプリケーションを作成できます。

cosmも参照することをお勧めします。cosmは、その作業の一部を行い、ビルドする Arduino デバイスにフィード オフするための優れた js API を提供します。彼らのも見てください。

于 2013-03-23T17:06:26.400 に答える
1

ser2netWindows Serial Proxyなどの使用を検討しましたか? これをマシン上で実行して、シリアル ポートを TCP ポートにプロキシし、Javascript で WebSockets を使用して通信します。

ある種のサーバー レイヤーが最適なソリューションかもしれませんが、すべてを JS で行うつもりなら、これが最適な方法だと思います。

于 2013-03-25T05:18:59.363 に答える