Tôi đã làm việc trên một giao thức MQTT bằng SIM5320. Tôi quen thuộc với tài liệu lệnh AT và có một triển khai làm việc với Arduino.
Đầu tiên, tôi mở một ổ cắm mạng bằng AT + NETOPEN, sau đó mở kết nối TCP với AT + CIPOPEN = 0, "TCP", "địa chỉ ip", cổng. Sau đó tôi truyền dữ liệu cho giao thức MQTT bằng AT + CIPSEND, thực thi thành công. Nếu tôi gửi dữ liệu đến mô-đun SIM thông qua MQTT, nó cũng được nhận và tin nhắn được phát hiện.
Với MQTT, có một khoảng Keep-Alive xác định thời gian máy chủ sẽ giữ kết nối mở giữa các lần giao tiếp, về cơ bản là máy khách có thể nhàn rỗi bao lâu trước khi bị ngắt kết nối khỏi máy chủ. Tuy nhiên, tôi đã đặt giá trị này tối đa là 18 giờ, lâu hơn nhiều so với ngắt kết nối ~ 15 phút.
Vấn đề của tôi phát sinh sau ~ 15 phút, khi tôi cố gắng gửi lệnh đến máy chủ và không có phản hồi nào được đưa ra. SIM chưa phát hành "+ IPCLOSE: 0,4", thường xảy ra khi máy chủ buộc ngắt kết nối máy khách hoặc bất kỳ loại chỉ báo nào khác.
Ngoài ra, tôi vẫn có thể gửi dữ liệu và có vẻ như kết nối CIP vẫn mở, như được chỉ ra bởi "AT + CIPOPEN?". Khi tôi thử và đóng kết nối với "AT + CIPCLOSE = 0", tôi nhận được "+ CIPCLOSE: 0,4" và "ERROR". Không có đề cập đến ý nghĩa của "+ CIPCLOSE: 0,4" trong tài liệu, tuy nhiên dường như nó không đóng kết nối, vì nó không thể được mở hoặc sử dụng.
Tôi thực sự rất muốn biết những gì đang xảy ra trong 15 phút này, giữa việc thiết lập kết nối và gửi dữ liệu, để cố gắng gửi lại dữ liệu. Không có cảnh báo hoặc bất kỳ dấu hiệu cho thấy bất cứ điều gì sai, vì vậy tôi rất bối rối.
Ban đầu tôi đã hỏi câu hỏi này về trao đổi ngăn xếp Kỹ thuật điện, nhưng cũng được khuyên nên hỏi nó ở đây.
Tôi đã đính kèm mã tôi đã viết ở đây cho bất kỳ ai muốn xem và không có thư viện nào bạn cần để chạy nó.