使用SIM7670G调制解调器连接Azure IoT Hub时MQTT启动失败求助
使用LilyGo T-SIM7670G S3模组,通过AT命令连接Azure IoT Hub时,已完成PDP激活、系统时间同步、获取IP地址,SSL连接提示成功,但AT+CMQTTSTART执行失败,后续AT+CMQTTCONNECT返回错误码12。
完整AT命令日志如下:
Manufacturer: SIMCOM INCORPORATED Model: SIM7670G-MNGV Revision: V1.9.01 OK ATI Manufacturer: SIMCOM INCORPORATED Model: SIM7670G-MNGV Revision: V1.9.01 IMEI: XXXXXXXXXXXXXXX IMSI: AT+CIMI AT+CIMI XXXXXXXXXXXXXXX OK AT+CPIN? +CPIN: READY OK AT+CREG? +CREG: 0,5 OK AT+CEREG? +CEREG: 0,5 OK AT+CPSI? +CPSI: LTE,Online,238-01,0xD48,5314856,394,EUTRAN-BAND7,2850,5,5,-11,-109,-97,14 OK AT+CGDCONT=1,"IP","TM" OK AT+CGACT=1,1 OK AT+CGACT? +CGACT: 1,1 OK AT+CTZU=1 OK AT+CNTP="time.nist.gov",32 OK AT+CCLK? +CCLK: "24/08/16,12:04:25+08" OK AT+CREG? +CREG: 0,5 OK Registration status: Network registration successful, currently in roaming mode AT+CGPADDR=1 +CGPADDR: 1,10.59.245.255 OK AT+CDNSCFG="8.8.8.8","8.8.4.4" OK Modem initialized System time set to: Fri Aug 16 12:04:30 2024 Connecting to Azure Uploading DigiCert Global Root G2 AT+CCERTDOWN=cacert.pem,1295 >-----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 ... 8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- OK AT+CTCPKA=1,2,5,1 OK AT+CCHSTART ERROR AT+CCHADDR +CCHADDR: 10.59.245.255 OK AT+CSSLCFG="ignorelocaltime",0,1 OK AT+CSSLCFG="negotiatetime",0,25 OK AT+CSSLCFG="sslversion",0,4 OK AT+CSSLCFG="authmode",0,1 OK AT+CSSLCFG="cacert",0,"cacert.pem" OK AT+CCHSET=1,1 ERROR AT+CCHSSLCFG=0,0 OK AT+CCHOPEN=0,"IOTHUB.azure-devices.net",8883,2 +CCHOPEN: 0,1 OK AT+CCHSET? +CCHSET: 1,1 OK AT+CMQTTSTART ERROR AT+CMQTTACCQ=0,"DEVICE",1 ERROR AT+CMQTTSSLCFG=0,0 OK AT+CMQTTCONNECT=0,"ssl://IOTHUB.azure-devices.net:8883",60,1,"IOTHUB.azure-devices.net/DEVICE/?api-version=2018-06-30","SharedAccessSignature sr=IOTHUB.azure-devices.net%2Fdevices%2FDEVICE&sig=rc3c2K%2BHF0l%2Bu16lv0DEi6lXqgSqIqouVgRwkr2tKKU%3D&se=1723810204" +CMQTTCONNECT: 0,12 ERROR
1. 补全MQTT上下文创建步骤
SIMCOM模组的MQTT操作必须遵循创建上下文 → 启动MQTT服务 → 连接的顺序,你跳过了创建上下文的关键步骤直接执行AT+CMQTTSTART,导致命令失败。
先执行创建上下文命令(CLIENT_ID替换为你的Azure设备ID):AT+CMQTTACCQ=0,"DEVICE",1
确认返回OK后,再执行AT+CMQTTSTART。
2. 修复TCP上下文初始化异常
AT+CCHSTART返回ERROR说明TCP服务初始化失败,后续的AT+CCHOPEN可能是虚假成功。按以下步骤重置:
- 执行
AT+CFUN=1,1重启模组 - 重新完成PDP激活、时间同步流程
- 确保
AT+CCHSTART返回OK后,再进行SSL和MQTT配置
3. 调整SSL配置参数
- 将TLS版本改为TLS 1.2(Azure IoT Hub对TLS 1.3支持存在兼容性问题):
AT+CSSLCFG="sslversion",0,3 - 关闭时间忽略(SSL握手依赖正确系统时间,你已同步时间无需忽略):
AT+CSSLCFG="ignorelocaltime",0,0
4. 修正MQTT连接参数
AT+CMQTTCONNECT存在3处错误:
- 移除
ssl://前缀(已通过SSL上下文配置加密,直接填主机端口即可) - 用户名去掉
?符号,格式改为IOTHUB.azure-devices.net/DEVICE/api-version=2018-06-30 - 检查SAS令牌的
se参数,确保令牌未过期
修正后的连接命令示例:AT+CMQTTCONNECT=0,"IOTHUB.azure-devices.net:8883",60,1,"IOTHUB.azure-devices.net/DEVICE/api-version=2018-06-30","SharedAccessSignature sr=IOTHUB.azure-devices.net%2Fdevices%2FDEVICE&sig=rc3c2K%2BHF0l%2Bu16lv0DEi6lXqgSqIqouVgRwkr2tKKU%3D&se=1723810204"
5. 验证证书完整性
确认上传的DigiCert Global Root G2证书是完整的PEM格式,日志中出现的...可能是证书被截断,不完整的证书会导致SSL握手失败,间接引发MQTT启动错误。
内容的提问来源于stack exchange,提问作者Anes

