He estado trabajando en un protocolo MQTT usando el SIM5320. Estoy familiarizado con la documentación del comando AT y tengo una implementación funcional con un Arduino.
Primero, abro un socket de red con AT + NETOPEN, luego abro una conexión TCP con AT + CIPOPEN = 0, "TCP", "dirección IP", puerto. Luego transmito datos para el protocolo MQTT usando AT + CIPSEND, que se ejecuta con éxito. Si envío datos al módulo SIM a través de MQTT, también se reciben y se detecta el mensaje.
Con MQTT, hay un intervalo Keep-Alive que especifica cuánto tiempo el servidor mantendrá una conexión abierta entre comunicaciones, básicamente cuánto tiempo puede estar inactivo el cliente antes de ser desconectado por la fuerza del servidor. Sin embargo, he establecido este valor en el máximo de 18 horas, que es mucho más largo que las desconexiones de ~ 15 minutos.
Mi problema surge después de ~ 15 minutos, cuando intento enviar un comando al servidor, y no recibo respuesta. La SIM no ha emitido un "+ IPCLOSE: 0,4", que generalmente ocurre cuando el servidor desconecta por la fuerza al cliente o cualquier otro tipo de indicador.
Además, todavía puedo enviar datos y parece que la conexión CIP todavía está abierta, como lo indica "AT + CIPOPEN?". Cuando intento cerrar la conexión con "AT + CIPCLOSE = 0", recibo "+ CIPCLOSE: 0,4" y "ERROR". No se menciona lo que significa "+ CIPCLOSE: 0,4" en la documentación, sin embargo, no parece cerrar la conexión, ya que no se puede abrir ni utilizar.
Realmente me encantaría saber qué está sucediendo en estos 15 minutos, entre establecer una conexión y enviar datos, hasta intentar enviarlos nuevamente. No hay ninguna alerta o indicación de que algo salga mal, así que estoy seriamente confundido.
Inicialmente hice esta pregunta sobre el intercambio de pila de Ingeniería Eléctrica, pero me aconsejaron que también la hiciera aquí.
He adjuntado el código que escribí aquí para cualquiera que quiera echar un vistazo, y no hay ninguna biblioteca que necesite para ejecutarlo.