Отправить непрерывные данные из модуля 4G на сервер

У меня есть модуль Telit LE910 4G LTE, подключенный к плате Teensy (подойдет Arduino). Хотя я могу отправлять данные на мой сервер PHP с помощью HTTP-запросов (POST и GET), я не могу отправлять непрерывные данные из-за необходимых задержек для ответа сервера:

  [...]
// 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 для загрузки данных, но я предполагаю, что загрузка файлов на сервер может даже занять больше времени, чем сейчас.

Любая помощь высоко ценится!

2

Решение

Похоже, ваш вариант использования лучше подходит для специального протокола IoT (Интернет вещей), а не для протокола, более ориентированного на соединение клиент-сервер, такого как HTTP.

В мире IoT используется несколько протоколов, но некоторые из наиболее распространенных:

Они должны не только решать ваши проблемы с задержкой, но и, как правило, также предназначены для минимизации накладных расходов на данные, а также на использование / использование батареи.

Вы должны быть в состоянии найти примеры PHP для них также — например, один для MQTT:

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) Почему я вдруг получаю ответы от сервера?

Я надеюсь, что кто-то может использовать это для своего собственного проекта, однако этого не достаточно для моего. Есть идеи?

0

По вопросам рекламы [email protected]