2

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

  [...]
  // 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);

これは単なる例 (ここに書かれています) ですが、私が何をしているかをある程度示しています。上記のコードは、データがサーバー上の .txt ファイルにアップロードされると、モジュールがサーバーに再接続し、別のデータ ポイントを POST するように、while ループ内に配置されることになっています。

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

遅延を微調整すると、1 秒ほど余分にかかる可能性がありますが、私のプロジェクトには「リアルタイム」で多くのデータ ポイントをプロットすることが含まれているため、非常に時間に敏感です。

4G でサーバーに継続的なデータ ストリームを送信する方法について何か考えはありますか? 一部のデータ ポイントをバッファリングし、FTP を使用してデータをアップロードすることを考えていますが、サーバーへのファイルのアップロードには今よりも時間がかかると思います。

どんな助けでも大歓迎です!

4

2 に答える 2

0

上記の既存のコードのいくつかを使用して動作するようになりましたが、まだ最適ではありません。これは他の人にとって役立つかもしれません。

これは私がしたことです:

1) I ソケット ダイヤルは 1 回だけ (初期化中)

2) POST セクションがループ内で無限に実行されています。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) サーバーから突然応答が返ってくるのはなぜですか?

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

于 2016-06-02T19:57:46.963 に答える
0

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

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

これらは、遅延の問題に対処するだけでなく、通常、データのオーバーヘッドと処理/バッテリーの使用も最小限に抑えるように設計されています.

これらの PHP の例も見つけることができるはずです。たとえば、MQTT の例です。

于 2016-05-30T15:51:31.897 に答える