2016-05-26 5 views
2

Teensyボードに接続されているTelit LE910 4G LTEモジュールがあります(Arduinoが行います)。私は、HTTPリクエストを使用して(POSTとGET)私のPHPサーバーにデータを送信することができていますが、サーバーが戻って応答するために、私が原因必要な遅延に連続したデータを送信することはできませんよ。4Gモジュールからサーバーに連続データを送信

[...] 
    // SOCKET DIAL 
    LTESerial.print("AT#SD=1,0,80,\"SERVER IP\"\r\n"); 
    delay(5000); 

    // POST 
    LTESerial.print("POST /server/index.php?data="); 
    LTESerial.print(random(1000)); 
    LTESerial.print(" HTTP/1.1\r\n"); 
    LTESerial.print("Host: SERVER IP\r\n\r\n"); 
    delay(5000); 
    while (getResponse() > 0); 

は、これは単に例(ここに書かれています)が、私は何をしているかを幾分示しています。上記のコードは、whileループの中に置かれるはずです。その結果、データがサーバーの.txtファイルにアップロードされると、モジュールはサーバーに再接続し、別のデータポイントをPOSTします。

明らかに、これらの遅延を避け、できるだけ早く(データが利用可能になるとすぐに)サーバーにデータを解析したいと思います。これが私が4G LTEバージョンを選択した理由です。

遅れを調整すると余分な秒が得られるかもしれませんが、私のプロジェクトでは多くのデータポイントを「リアルタイム」にプロットすることが含まれているため、非常に時間が掛かります。

4Gでサーバーに連続データストリームを送信する方法については何か考えてください。私はいくつかのデータポイントをバッファリングすることを考えており、FTPを使ってデータをアップロードしていますが、サーバーにファイルをアップロードすることは今よりも時間がかかるかもしれません。

ご協力いただきありがとうございます。

答えて

0

あなたのユースケースは、HTTPのような、より多くのクライアントサーバー接続指向のプロトコルではなく、特別なIoT(インターネットのもの)プロトコルに適しているようです。

ありのIoTの世界で使用されているいくつかのプロトコルがありますが、最も一般的なのいくつかは、次のとおりです。

これらをレイテンシ問題に対処するだけでなく、データオーバーヘッドや処理/バッテリの使用も最小限に抑えるように設計されています。あなたはこれらものためのPHPの例を見つけることができるはずです

- MQTTための一例のために:

+0

制限のため、HTTPを使い続けたいと思います。いずれにしても、私はWAMPのプライベートサーバに完全にアクセスできます。つまり、「ソケットリスナ」を開始し、4Gモジュールをこのリスナに向かわせ、無限にデータをストリーミングすることができるはずです。私はPHPを使ってこれを試しましたが、私はまだこれらの遅延を経験しています。ソケットダイヤルを有効にしてPOSTリクエストを送信し続ける方法はありますか? – Rex

0

私はややそれが上記の既存のコードの一部を使用して動作するようになったが、それはまだ最適ではありません。これは他の人には役に立ちます。

1)Iポストセクションが無限ループ内で実行されている)

2)初期化中に(一度だけダイヤルソケット:

これは私がしたものです。 5秒の遅延は、現在200ミリ秒に減少し、私はそうのように、いくつかのヘッダを追加されます。

//unsigned long data = random(1000000000000000, 9999999999999999); 
    LTESerial.print("POST /index.php?data="); 
    LTESerial.print(data); 
    LTESerial.print(" HTTP/1.1\r\n"); 
    LTESerial.print("Host: ADDRESS\r\n"); 
    LTESerial.print("Connection: keep-alive\r\n\r\n"); 
    delay(200); 
    while (getResponse() > 0); 

3)私のWAMPサーバ(PHP)が最大HTTPリクエスト、タイムアウトとの観点でデフォルトとして制限がありましたが判明します好き。私はphp.iniの中でこれらの数字を増やす必要がありました(無制限に変更しました)。

しかし、サーバーにデータを「継続的に」送信することはできますが、200ミリ秒の遅延がまだあります。可能であれば、シリアル通信に近いものを見たいと思います。シリアルモニターを見たときに

はまた、私が手:

[...] 
408295030 
4238727231 
3091191349 
2815507344 

----------->(THEN SUDDENLY)<------------ 

HTTP/1.1 200 OK 
Date: Thu, 02 Jun 2 

2900442411 

016 19:29:41 GMT 
Server: Apache/2.4.17 (Win32) PHP/5.6.15 
X-P16 

3817418772 

Keep-Alive: timeout=5 
Connection: Keep-Alive 
Content-Type: te 

86026031 

HTTP/1.1 200 OK 
Date: Thu, 02 Jun 2016 19:29:4 

3139838298 
75272508 
[...] 

----------->(After 330 iterations/POSTs, I get)<------------ 

NO CARRIER 
NO CARRIER 
NO CARRIER 
NO CARRIER 

だから私の質問は次のとおりです。 1)どのように私は200ミリ秒が同様に遅延排除していますか?

2)データポイントのサイズが異なる場合、遅延も同様に変更する必要があります。どのように動的にこれを行うには?

3)なぜ330回の繰り返しで停止するのですか?これは、データが4桁しかない場合には発生しません。

4)突然サーバーから応答が届くのはなぜですか?

誰かが自分のプロジェクトでこれを使用できることを願っていますが、これでは十分ではありません。何か案は?

関連する問題