电路研究9.3.1合宙Air780EP中的AT开发指南TCP-使用-SSL-示例
电路研究9.3.1——合宙Air780EP中的AT开发指南:TCP 使用 SSL 示例
之前的是TCP 示例,这里再继续是 TCP
使用
SSL
示例,下面的开机等之前多次介绍,这里因为用到,所以就再次贴出来。
开机: 这个之前也讲过怎么开机,这里再列出来:通过拉低 powerkey2 秒进行开机,开机以后通过串口循环发送 AT 直到收到 OK,如果 90 秒没有收到 OK 请拉低 RESET_IN_N 引脚 150ms 以上。
查询卡状态
**AT+CPIN?**查询卡状态,直到收到
+CPIN: READY
,如果
10s
内没有收到建议重启模块。
查询网络注册情况:
**AT+CGATT?**查询是否注册网络收到
+CGATT: 1
值是
1
即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。这个就是还是附着分离的情况了,也就不在贴出来,毕竟实际上也没太大难度,就是知道代码就好了。
配置连接:
AT+CIPMUX=0
设置为单链接模式 ;
AT+CIPQSEND=1
设置为快发
注意:这两条一定要在启用网络之前配置,不然会失败。
12.1
启动多
IP
连接:
AT+CIPMUX
之前在嵌入式TCPIP中也研究过了,这里再贴出一下,便于应用到实际中去。
这个看起来还是比较重要呢,毕竟 TCP例子里面没强调这个呢。
激活网络 :
AT+CSTT
配置网络,非私有
APN
以外
Cat1
的固件支持根据卡自动配置
APN
,直接输入 AT+CSTT 即可,模块会按照自动获取的
APN
设置
CSTT
的
APN
。
AT+CIICR
激活网络,在
IP START
的状态使用
AT+CIICR
激活网络,激活以后通过
AT+CIFSR 查询是否获取 IP
,如果成功就可以开始配置
TCP
连接了,如果不成功使用
AT+CIPSHUT
关闭移动网络,从 AT+CSTT
重新进行。
配置连接:
AT+CIPSSL=1
开启
SSL
功能开关为开
AT+FSCREATE=”server.crt” 创建
CA
证书文件
**AT+FSCREATE=”client.crt”**创建客户端证书文件
**AT+FSCREATE=”client.key”**创建客户端密钥文件
AT+FSWRITE=”server.crt”,0,2080,15 文件长度
2080
只是举例,要根据实际填写。下同。
AT+FSWRITE=”client.crt”, 0,128,10 输入客户端证书文件
AT+FSWRITE=”client.key”,0,188,10 输入客户端密钥文件
**AT+SSLCFG=”cacert”,0, ”server.crt”**设置服务器
CA
证书
SSL
上下文
id
,在单链接的情况 下缺省为 0
**AT+SSLCFG=”clientcert”,0, ”client.crt”**设置客户端证书
**AT+SSLCFG=”clientkey”, 0,”client.key”**设置客户端
KEY
AT+SSLCFG=”seclevel”,0,2 设置安全等级
AT+SSLCFG=”ciphersuite”,0,0X0035 设置加密套件
AT+SSLCFG=”clientrandom”,0,101B12C3141516171F19202122232425262728293031
323334353637
设置随机数
这个之前的TCP例子里面确实没有,不过这里却加上了,这就是区别吧。
连接服务器
AT+CIPSTART=TCP,
tcplab.openluat.com
,57513
连接服务器,请使用自己服务器测试
AT+CIPSEND=10 发送数据(确定长度)
AT+CIPSHUT 关闭连接
AT+CIPSSL=0 关闭
SSL
这里也是需要连接服务器了,可能以后用到的应该是这种模式了。
举例说明:
指令报错的异常处理及示例说明(这些直接贴的例子呢,我还没模块,也没研究透,就是作为一个参考)
^MODE: 17,17
+E_UTRAN Service
+CGEV: ME PDN ACT 1
+NITZ: 22/10/26,07:37:55+32,0
//
以上是模块开机后主动上报的数据
[16:25:26.408]
发
→
◇
AT
[16:25:26.410]
收
←
◆
AT
OK
[16:25:29.710]
发
→
◇
ATI
[16:25:29.715]
收
←
◆
ATI
AirM2M_780E_V1021_LTE_AT
OK
[16:25:30.205]
发
→
◇
AT+CPIN?
[16:25:31.205]
收
←
◆
AT+CPIN?
+CME ERROR: 10 //
未检测到
SIM
卡,重新安装
sim
卡后,需要给模块复位重启才能识别到
卡
[16:25:33.202]
发
→
◇
AT+CPIN?
[16:25:33.205]
收
←
◆
AT+CPIN?
+CPIN: READY
OK
[16:25:35.646]
发
→
◇
AT+CSQ
[16:25:35.650]
收
←
◆
AT+CSQ
+CSQ: 23,0
OK
[16:25:38.032]
发
→
◇
AT+CGATT?
[16:25:38.034]
收
←
◆
AT+CGATT?
+CGATT: 1
OK
[16:25:39.490]
发
→
◇
AT+CEREG?
[16:25:39.492]
收
←
◆
AT+CEREG?
+CEREG: 0,1
OK
//
以上为主动查询模块的联网情况, 模块已经附着网络成功
[16:25:55.169]
发
→
◇
AT+CIPMODE=0
[16:25:55.176]
收
←
◆
AT+CIPMODE=0
OK //
设置
TCPIP
应用模式为非透明传输模式
[16:25:55.908]
发
→
◇
AT+CIPMUX=0
[16:25:55.911]
收
←
◆
AT+CIPMUX=0
OK //
设置为单链接模式
(
默认是单路链接
)
[16:25:56.610]
发
→
◇
AT+CIPQSEND=1
[16:25:56.612]
收
←
◆
AT+CIPQSEND=1
OK //
设置非透传数据为快发送模式
[16:26:00.198]
发
→
◇
AT+CSTT
[16:26:00.201]
收
←
◆
AT+CSTT
OK //
启动任务并设置接入点
APN
、用户名、密码
(cat1
模块内部有写
APN
,可以不需要设置,
默认为空,专网卡、定向卡除外
)
[16:26:04.469]
发
→
◇
AT+CSTT
[16:26:04.472]
收
←
◆
AT+CSTT
+CME ERROR: 3 //
提示操作错误,相同的指令连续输入
2
次,会报这个错误,可以通过发
AT+CIPSHUT
关闭移动场景后,在输入此命令
[16:26:04.479]
发
→
◇
AT+CIICRR
[16:26:04.621]
收
←
◆
AT+CIICRR
ERROR //
激活移动场景 (出现这个指令错误,一般都是模块内部没有写这条指令或者指令
输入错误)
[17:27:53.099]
发
→
◇
AT+CIICR
[17:27:53.100]
收
←
◆
AT+CIICR
+PDP: DEACT
+CME ERROR: 65535 //
查询本地
IP
地址 (在模块附着网络失败后会出现此错误,可以通
过
AT+CGATT?
来查询,可以走断网异常流程来处理
[16:26:07.030]
发
→
◇
AT+CIFSR
[16:26:07.034]
收
←
◆
AT+CIFSR
10.17.70.180
[16:26:08.509]
发
→
◇
AT+CIPSTART=1,“TCP”,”112.125.89.8“,37076
[16:26:08.516]
收
←
◆
AT+CIPSTART=1,“TCP”,”112.125.89.8“,37076
+CME ERROR: 3 //
在单路链接的情况下,使用多路链接的指令会出现此错误
[16:26:30.509]
发
→
◇
AT+CIPSTART=“TCP”,”112.125.89.8“,37076
[16:26:30.516]
收
←
◆
AT+CIPSTART=“TCP”,”112.125.89.8“,37076
OK
STATE: IP STATUS
CONNECT FAIL //
在联网正常的情况下,一直无法链接服务器,可以检查一下指令的符号是
否有输入错误,使用中文的符号会导致异常
[16:41:31.516]
发
→
◇
AT+CIPSTART=“TCP”,“112.125.89.8”,37076
[16:26:31.980]
收
←
◆
AT+CIPSTART=“TCP”,“112.125.89.8”,37076
OK
[18:00:01.142]
收
←
◆
CONNECT OK //
链接成功
[16:26:38.667]
发
→
◇
AT+CIPSEND
[16:26:38.675]
收
←
◆
AT+CIPSEND
//
出现此符号后才能发送数据,没有出现时发送数据会异常
[16:26:43.648]
发
→
◇
666888
[16:26:43.651]
收
←
◆
666888
[16:26:46.292]
发
→
◇
□ //HEX
格式的大写
1A
[16:26:46.306]
收
←
◆
DATA ACCEPT:8
[16:26:48.597]
发
→
◇
AT+CIPSTATUS
[16:26:48.604]
收
←
◆
AT+CIPSTATUS
OK
STATE: CONNECT OK //
查询链路状态
[18:07:05.517]
发
→
◇
AT+CIPSHUT
[18:07:05.521]
收
←
◆
AT+CIPSHUT
[18:07:07.521]
收
←
◆
SHUT OK //
关闭移动场景
常见问题
(1) 连接服务器失败
服务器必须是公网地址
使用
PC
上的
TCP UDP
测试工具客户端、或者
mqtt.fx
,连接服务器确认一下是否可以连接成功,排除服务器故障
- 检查下模块信号、网络注册、网络附着、
PDP
激活状态
- 检查下
SIM
卡是否欠费【
4G
模块有一种欠费表现:无法注册
4G
网络,可以注册 2G
网络】
(2) 最多同时支持多少个连接
AT 版本最多
8
个连接
(3) 关于
“TCP
单
/
多链接时,刚开始发送数据成功,服务器能收到
,
间隔十几分钟,模
块端
AT+CIPSTATUS
查询链接存在,
AT+CIPSEND
数据发送成功,但服务器却没
收到数据
"
问题
用
保活探针(CIPTKA)的方法或者
心跳包(HEARTCONFIG)来解决,我直接把链接那面的文章贴过来了,就不给网址了。
①、问题点
在测试合宙CAT1模块AT版本固件的时候,经常会遇到这样的问题: CIPSTART,命令建立了TCP单链接或多链接了, 开始发送数据正常,十几分钟不发任何数据,再发数据的时候提示SEND OK,但是服务器侧未收到任何数据.
② 、问题原因
cat1模块不是直接跟服务器连接的,而是通过NAT(即网络地址转换)与服务器连接,NAT就是网络地址转换。NAT会维护一个映射表,这个映射表会定时检查,如果10分钟内这路socket跟服务器没任何数据往来,就会回收这路的地址,10分钟后应用上再发数据就找不到路由地址了;如果10分钟内有数据更新,计时器会重新置为10分钟。
如果10分钟内这路socket跟服务器没任何数据往来,就会回收这路的地址,10分钟后应用上再发数据就找不到路由地址了—— 这个就是发送数据提示SEND OK,服务器却收不到任何数据的原因。
③ 、解决之道
a、 用保活探针(CIPTKA)的方法来解决
以多链接示例如下:
AT+CIPTKA=1,180,75,6
// 打开保活探针,时间间隔为180秒
OK
AT+CIPMUX=1
OK
AT+CIPSTART=1,TCP,domain.aaa.bbb,12345
OK
1, CONNECT OK
AT+CIPSTART=5,TCP,domain.aaa.bbb,12345
OK
5, CONNECT OK
[13:55:49.974]发→◇AT+CIPSEND=1,10
[13:55:49.983]收←◆
[13:55:53.599]发→◇0123456789
[13:55:53.604]收←◆
1, SEND OK // 此时服务器收到数据
[13:56:22.742]发→◇AT+CIPSEND=5,10
[13:56:22.748]收←◆
[13:56:24.646]发→◇9876543210
[13:56:24.653]收←◆
5, SEND OK // 此时服务器收到数据
[14:17:59.969]发→◇AT+CIPSEND=1,10 // 1,5 这两个链接时隔21分钟再次发送数据,仍然能收到数据.
[14:17:59.975]收←◆
[14:18:01.410]发→◇0123456789
[14:18:01.416]收←◆
1, SEND OK // 此时服务器收到数据
[14:18:08.897]发→◇AT+CIPSEND=5,10
[14:18:08.903]收←◆
[14:18:11.138]发→◇9876543210
[14:18:11.146]收←◆
5, SEND OK // 此时服务器收到数据
注:保活探针在模块休眠(AT+CSCLK=2)情况下同样有效
b、 用心跳包( HEARTCONFIG )来解决
[15:30:02.477]发→◇AT^HEARTCONFIG=1,0,180
[15:30:02.484]收←◆
OK
[15:30:26.720]发→◇AT^HEARTBEAT=0,tcp—test
[15:30:26.727]收←◆
OK
[15:30:45.196]发→◇AT+CIPMUX=1
[15:30:45.201]收←◆
OK
[15:30:52.571]发→◇AT+CIPSTART=0,TCP, domain.aaa.bbb,12345
//此服务器是个回环服务器,收到数据原样回送到对端
[15:30:52.579]收←◆
OK
[15:30:52.735]收←◆
0, CONNECT OK
[15:33:02.643]收←◆ //3分钟后收到数据,说明服务器收到了模块发的心跳数据
+RECEIVE,0,10:
(4) 780E
模块
tcp
联网成功 每次开机都需要重新下发
AT
指令连接吗?
是的,模块不保存已输入 AT
指令
(5) 模块上报
PDP: DEACT
, 这个要怎么处理
4G 模块会产生一个
+PDP: DEACT
的
URC
提示,出现此提示说明已经激活的
PDP
承 载被网络端去激活了,此时仍然需要向4G
模块发送
AT+CIPSHUT
命令主动关闭
PDP
,然后再重新激活,再重新连接 TCP
服务器。
(6) 重试多次
PDP
一直激活失败
如果重试多次,PDP
一直激活失败,则尝试使用如下手段恢复:
1、使用
RESET
引脚复位模块
2、极端情况下,直接给模块断电,再上电,
POWER KEY
引脚拉低开机
(7) 如何发送心跳包
cat1 模块如何发送心跳包
cat1
模块如何发送心跳包
(8) 由数据透传状态转向命令状态,发
+++
切换不了
发送时不要勾选回车换行
(9) TCP
调试网址
(10) 当我连续发送几百个字节的数据的时候,在里面会夹杂
0x0a0x0d
这种,如何
避免这个呢
通过 AT+CIPRXF
设置接收的数据末尾是否自动添加回车换行(网络连接前设置)
12.12
设置接收的数据末尾是否自动添加回车换行:
AT+CIPRXF
这个根据需要设置,如果防止会出现这种数据可以考虑选择1不添加这个后缀。当然根据需求来看,开始可以尝试添加,测试时候遇到问题再去掉防止使用之中出现丢失数据的意外。当然因为是收到的数据,可以考虑加CRC等校验,进而去掉回车换行,这个需要正式使用过程的问题。
(11) 支持什么加密证书
支持证书配置,支持单向认证和双向认证
支持如下六种加密套件:
0X0035 TLS_RSA_WITH_AES_256_CBC_SHA
0X002F TLS_RSA_WITH_AES_128_CBC_SHA
0X0005 TLS_RSA_WITH_RC4_128_SHA
0X0004 TLS_RSA_WITH_RC4_128_MD5
0X000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
0X003D TLS_RSA_WITH_AES_256_CBC_SHA256
(12)
数据发送接收缓存问题
使用 CIPSTART 建立的
socket
连接,接收数据没有缓存机制,收到数据后,立即通过AT 口输出,每包最多
1460
字节;例如服务器下发一个
70KB
的文件,模块会连续收到多个包,通过 AT
口连续多次输出,发送每包最多也为
1460
字节。
补:现在找到工作了,之前的清闲也就没了,加上最近工作有些忙,有时候晚上加班,不过还好可以调休,所以只有在空闲时间继续研究呢。