私は、SIM5320を使用してMQTTプロトコルに取り組んでいます。私はATコマンドのドキュメントに精通しており、Arduinoを使用した実装が機能しています。
まず、AT + NETOPENでネットワークソケットを開き、次にAT + CIPOPEN = 0、 "TCP"、 "ip address"、portでTCP接続を開きます。次に、AT + CIPSENDを使用してMQTTプロトコルのデータを送信します。これは正常に実行されます。MQTTを介してSIMモジュールにデータを送信すると、データも受信され、メッセージが検出されます。
MQTTでは、キープアライブ間隔があり、サーバーが通信間で接続を開いたままにしておく時間、基本的にクライアントがサーバーから強制的に切断されるまでにアイドル状態でいられる時間を指定します。ただし、この値を最大18時間に設定しました。これは、15分の切断よりはるかに長い時間です。
15分後にサーバーにコマンドを送信しようとすると問題が発生し、応答がありません。SIMは「+ IPCLOSE:0,4」を発行していません。これは通常、サーバーがクライアントまたはその他の種類のインジケーターを強制的に切断したときに発生します。
さらに、「AT + CIPOPEN?」で示されるように、データを送信することができ、CIP接続がまだ開いているようです。「AT + CIPCLOSE = 0」で接続を閉じようとすると、「+ CIPCLOSE:0,4」と「ERROR」が表示されます。ドキュメントでは「+ CIPCLOSE:0,4」の意味については言及されていませんが、接続を開いたり使用したりできないため、接続を閉じているようには見えません。
接続を確立してからデータを送信するまでの、この15分間に何が起こっているのかを知りたいのですが、データの再送信を試みます。警告や問題の兆候がないので、私はひどく混乱しています。
私は最初に電気工学スタック交換でこの質問をしましたが、ここでも質問するようにアドバイスされました。
ここで書いたコードは、見てみたい人のために添付しました。実行する必要のあるライブラリはありません。