A7 GSM/GPRS/GPS 模块的命令 AT+CIPSTART 有问题
Problem with the command AT+CIPSTART for A7 GSM/GPRS/GPS MOdules
我有两块电路板 AiThinker A7 和 A9G GSM/GPRS/GPS 模块。我在两块板上使用相同的 SIM 卡将数据发送到 TCP 服务器。它适用于 A7 模块,但在 A9G 模块上出错。
日志如下:
适用于 AiThinker A7 主板
AT
OK
AT+GPS=1
OK
AT+COPS=0
OK
AT+CGATT=1
+CTZV:21/02/11,03:10:47,+01
OK
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",16939
CONNECT OK
OK
AT+CIPSEND=138,"{ scooterId: 'C45ZA1', pm25: 234, pm10: 110 }"
OK
+CIPRCV:160,127.0.0.1:49915 said { scooterId: 'C45ZA1', pm25: 234, pm10: 110 }
对于A9G板
AT+GPS=1
OK
AT+COPS=0
OK
AT+CREG?
+CREG: 1,5
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGATT=1
+CGATT:1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",16939
+CME ERROR: 50
+CME ERROR: 50
表示 EXE_FAIL。请帮帮我。我想不通。我试了很多。
这是发送的另一组命令以了解发生了什么。
对于 A7(工作):
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGACT?
+CGACT: 0,0
AT+CGDCONT?
+CGDCONT:1,,"pinternet.interkom.de",,0,0
OK
对于 A9G(不工作):
AT+CGATT=1
+CGATT:1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1,1
OK
AT+CGACT?
+CGACT: 1,1
OK
AT+CGDCONT?
+CGDCONT:1,,,"10.163.72.91",0,0
OK
AT+CGDCONT=1,"","pinternet.interkom.de","",0,0
+CME ERROR: 3
(错误 3 => OPERATION_NOT_ALLOWED)
TL;DR
您需要使用命令正确设置APN名称
AT+CGDCONT=1,"IP","pinternet.interkom.de"
说明
为了到达分组网络,蜂窝设备需要启用 PDP 上下文,并且连接到由特定 APN(接入点名称)标识的接入点。
在您后面的比较测试中,可以清楚地看到工作模块中的 APN 是如何正确设置为 "pinternet.interkom.de"
,而在 A9G 设备中似乎已设置到私有 IP 地址。如果没有有效的 APN,设备将无法访问网络。
您稍后尝试使用 +CGDCONT
命令设置它,但您使用了错误的语法。如 the specification 中所述,正确的语法是
AT+CGDCONT=[<cid>[,<PDP_type>[,<APN>[,<PDP_addr>[,<d_comp>[,<h_comp>[,<IPv4AddrAlloc>,<request_type>[,<PCSCF_discovery>[,<IM_CN_Signalling_Flag_Ind>[,<NSLPI>[,<securePCO>]]]]]]]]]]]]
您不需要大部分可选参数。你只需要
AT+CGDCONT=<cid>,<PDP_type>,<APN>
所以基本上你错过了 <PDP_type>
参数。它可以设置为 "IP"
、"IPV6"
、IPV4V6
等值,具体取决于您所在网络的功能。根据您的需要,您需要设置它至 "IP"
.
https://docs.ai-thinker.com/en/gprs/examples 帮了我大忙。确切的工作顺序是:
Init...
+CIEV: "Charging",100%
+CREG: 2
^STN: 37
+CTZV:21/02/13,02:51:53,+01
+CREG: 1
A9/A9G
V02.02.20190915R
Ai_Thinker_Co._Ltd.
READY
+CIEV: "Complete the Charge",100%
AT
OK
AT+CGATT=1
+CGATT:1
OK
AT+CGDCONT=1,"IP","pinternet.interkom.de"
OK
AT+CGACT=1,1
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",12279
CONNECT OK
OK
+CIPRCV,39:SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u6
CLOSED
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",12973
CONNECT OK
OK
AT+CIPSEND=138,"{ scooterId: 'C45ZA1', pm25: 234, pm10: 110 }"
OK
在向 TCP 发送数据时省略以下命令,有效。序列中的排除命令是:
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK
我有两块电路板 AiThinker A7 和 A9G GSM/GPRS/GPS 模块。我在两块板上使用相同的 SIM 卡将数据发送到 TCP 服务器。它适用于 A7 模块,但在 A9G 模块上出错。 日志如下:
适用于 AiThinker A7 主板
AT
OK
AT+GPS=1
OK
AT+COPS=0
OK
AT+CGATT=1
+CTZV:21/02/11,03:10:47,+01
OK
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",16939
CONNECT OK
OK
AT+CIPSEND=138,"{ scooterId: 'C45ZA1', pm25: 234, pm10: 110 }"
OK
+CIPRCV:160,127.0.0.1:49915 said { scooterId: 'C45ZA1', pm25: 234, pm10: 110 }
对于A9G板
AT+GPS=1
OK
AT+COPS=0
OK
AT+CREG?
+CREG: 1,5
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGATT=1
+CGATT:1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",16939
+CME ERROR: 50
+CME ERROR: 50
表示 EXE_FAIL。请帮帮我。我想不通。我试了很多。
这是发送的另一组命令以了解发生了什么。
对于 A7(工作):
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGACT?
+CGACT: 0,0
AT+CGDCONT?
+CGDCONT:1,,"pinternet.interkom.de",,0,0
OK
对于 A9G(不工作):
AT+CGATT=1
+CGATT:1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1
OK
AT+CGACT?
+CGACT: 0,0
OK
AT+CGACT=1,1
OK
AT+CGACT?
+CGACT: 1,1
OK
AT+CGDCONT?
+CGDCONT:1,,,"10.163.72.91",0,0
OK
AT+CGDCONT=1,"","pinternet.interkom.de","",0,0
+CME ERROR: 3
(错误 3 => OPERATION_NOT_ALLOWED)
TL;DR
您需要使用命令正确设置APN名称
AT+CGDCONT=1,"IP","pinternet.interkom.de"
说明
为了到达分组网络,蜂窝设备需要启用 PDP 上下文,并且连接到由特定 APN(接入点名称)标识的接入点。
在您后面的比较测试中,可以清楚地看到工作模块中的 APN 是如何正确设置为 "pinternet.interkom.de"
,而在 A9G 设备中似乎已设置到私有 IP 地址。如果没有有效的 APN,设备将无法访问网络。
您稍后尝试使用 +CGDCONT
命令设置它,但您使用了错误的语法。如 the specification 中所述,正确的语法是
AT+CGDCONT=[<cid>[,<PDP_type>[,<APN>[,<PDP_addr>[,<d_comp>[,<h_comp>[,<IPv4AddrAlloc>,<request_type>[,<PCSCF_discovery>[,<IM_CN_Signalling_Flag_Ind>[,<NSLPI>[,<securePCO>]]]]]]]]]]]]
您不需要大部分可选参数。你只需要
AT+CGDCONT=<cid>,<PDP_type>,<APN>
所以基本上你错过了 <PDP_type>
参数。它可以设置为 "IP"
、"IPV6"
、IPV4V6
等值,具体取决于您所在网络的功能。根据您的需要,您需要设置它至 "IP"
.
https://docs.ai-thinker.com/en/gprs/examples 帮了我大忙。确切的工作顺序是:
Init...
+CIEV: "Charging",100%
+CREG: 2
^STN: 37
+CTZV:21/02/13,02:51:53,+01
+CREG: 1
A9/A9G
V02.02.20190915R
Ai_Thinker_Co._Ltd.
READY
+CIEV: "Complete the Charge",100%
AT
OK
AT+CGATT=1
+CGATT:1
OK
AT+CGDCONT=1,"IP","pinternet.interkom.de"
OK
AT+CGACT=1,1
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",12279
CONNECT OK
OK
+CIPRCV,39:SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u6
CLOSED
OK
AT+CIPSTART="TCP","0.tcp.ngrok.io",12973
CONNECT OK
OK
AT+CIPSEND=138,"{ scooterId: 'C45ZA1', pm25: 234, pm10: 110 }"
OK
在向 TCP 发送数据时省略以下命令,有效。序列中的排除命令是:
AT+CSTT="pinternet.interkom.de","",""
OK
AT+CIICR
OK