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);

这只是一个例子(写在这里),但它在一定程度上说明了我在做什么。上面的代码应该放在一个 while 循环中,这样一旦数据上传到服务器上的 .txt 文件,模块就会重新连接到服务器并 POST 另一个数据点。

显然,我想避免这些延迟并尽可能快地将数据解析到服务器(只要数据可用)。这就是我选择 4G LTE 版本的原因。

调整延迟可能会给我额外的一秒左右,但我的项目包括“实时”绘制大量数据点,所以它对时间非常敏感。

关于如何在 4G 上向服务器发送连续数据流的任何想法?我正在考虑缓冲一些数据点并使用 FTP 上传数据,但我认为将文件上传到服务器甚至可能需要比现在更多的时间。

任何帮助深表感谢!

4

2 回答 2

0

我使用上面的一些现有代码在某种程度上让它工作了,但它仍然不是最优的。这可能对其他人有用。

这就是我所做的:

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

听起来您的用例可能更适合特殊的 IoT(物联网)协议,而不是更面向客户端服务器连接的协议,例如 HTTP。

物联网世界中使用了多种协议,但其中一些最常见的是:

这些不仅应该解决您的延迟问题,而且通常还旨在最大限度地减少数据开销和处理/电池使用。

您也应该能够找到这些的 PHP 示例 - 例如 MQTT 的示例:

于 2016-05-30T15:51:31.897 回答