Чтоб соединение не отлетало, нужно пинговать брокер (C0, 00) и контролироать соединение по ответам. Cоответствующие пакеты тоже подробно описаны в солюшне
2019-12-05 18:16:58: Log cleared by user
2019-12-05 18:17:08: New connection from 176.59.100.9 on port 11481.
2019-12-05 18:18:38: Client <unknown> has exceeded timeout, disconnecting.
и чудненько!!!
В каком смысле?
в том смысле, что повезло вашему мужу...понадобился к примеру ему MQTT и, тут как в известной песне...
"мне теперь не надо гладить брюки,
помощь мне прислуги не нужна, у меня для этой самой штуки,
есть своя законная жена ..."
2019-12-05 18:16:58: Log cleared by user
2019-12-05 18:17:08: New connection from 176.59.100.9 on port 11481.
2019-12-05 18:18:38: Client <unknown> has exceeded timeout, disconnecting.
и чудненько!!!
В каком смысле?
В прямом, сервер подождал 30 секунд данные и отключился. Я ж выше давал ссылку на описание и пример команд и там чёрным по русски было написано что в пакете connect указывать время соединения, будьте добры или данные отправлять каждые 20 секунд или переподключаться.
const word MQTT_Keep_Alive= 600;//10 минут
byte hiKA = highByte(MQTT_Keep_Alive); // старший байт
byte lowKA = lowByte(MQTT_Keep_Alive); // младший байт
SIM800.write(hiKA);//Keep Alive LSB
SIM800.write(lowKA);//Keep Alive LSB
Mqtt подразумевает работу в "интернет устройствах" соответственно отправил, принял, отсоеденился, где то я читал что рекомендуется делать короткий connect пакет, и отправлять пакеты ping каждые x секунд, контролировать ответ и если корректного ответа нет - переподключаться
я делал таймаут 20 минут. Посылал данные на брокер раз в 10 минут. и все равно с брокера выкидывало. Сделал отсылку данных на брокер раз в 2 минуты , проблема пропала.
Подскажите а как обрабатывать ответы от брокера. В монитор порта приходит символ квадратика и перекодировать не могу. Уже вычитал что командой AT+CIPHEAD=1 можно подставить заголовок +IPD, но и тут засада, не хочет записываться в переменную. Вернее в командном режиме все что приходит не от Sim 800, просто игнорируется. Разъясните плиз.
Потому что это байты меньше 0x20 или больше 0x7f, а обрабатывать согласно протокола mqtt, там все написано.
Тут тема есть
Снова MQTT
В ней много интересного
Чтоб соединение не отлетало, нужно пинговать брокер (C0, 00) и контролироать соединение по ответам. Cоответствующие пакеты тоже подробно описаны в солюшне
#define DEF_TIMEOUT 1000 uint32_t tsend = 0; uint32_t tresp = 0; bool sendstart() { bool _ret = false; modem.setTimeout(200); modem.println(F("AT+CIPSEND")); _ret = modem.find("> "); modem.setTimeout(DEF_TIMEOUT); return _ret; } bool sendfin() { bool _ret = false; modem.setTimeout(200); modem.write(0x1A); _ret = modem.find("DATA ACCEPT:"); if (_ret) tsend = millis(); modem.setTimeout(DEF_TIMEOUT); return _ret; } void ping() { if (sendstart()) modem.write(0xC0), modem.write(byte(0x00)), sendfin(); } void modemshut() { modem.println(F("AT")); if (!modem.find("OK\r\n")) modem.write(0x1A), modem.find("\r\n"); modem.println(F("AT+CIPHEAD=1;+CIPQSEND=1;+CIPSHUT")); tsend = millis(); tresp = millis(); } void setup() { SoftwareSerial modem(SIM800TX_PIN, SIM800RX_PIN); //.. } void loop() { if ((millis() - tsend) > 20333ul) tsend = millis(), ping(); if ((millis() - tresp) > 60000ul) modemshut(); //.. }А чуть позже на сервере
и чудненько!!!
В каком смысле?
в том смысле, что повезло вашему мужу...понадобился к примеру ему MQTT и, тут как в известной песне...
"мне теперь не надо гладить брюки,
помощь мне прислуги не нужна,
у меня для этой самой штуки,
есть своя законная жена ..."
;-)))
А чуть позже на сервере
и чудненько!!!
В каком смысле?
Правильно ставлю время 10 минут?
Mqtt подразумевает работу в "интернет устройствах" соответственно отправил, принял, отсоеденился, где то я читал что рекомендуется делать короткий connect пакет, и отправлять пакеты ping каждые x секунд, контролировать ответ и если корректного ответа нет - переподключаться
я делал таймаут 20 минут. Посылал данные на брокер раз в 10 минут. и все равно с брокера выкидывало. Сделал отсылку данных на брокер раз в 2 минуты , проблема пропала.
а как же эксперименты?
Подскажите а как обрабатывать ответы от брокера. В монитор порта приходит символ квадратика и перекодировать не могу. Уже вычитал что командой AT+CIPHEAD=1 можно подставить заголовок +IPD, но и тут засада, не хочет записываться в переменную. Вернее в командном режиме все что приходит не от Sim 800, просто игнорируется. Разъясните плиз.
Потому что это байты меньше 0x20 или больше 0x7f, а обрабатывать согласно протокола mqtt, там все написано.
Тут тема есть
Снова MQTT
В ней много интересного