虽然模块的官方会提供文档说明 HTTP 命令的使用流程,如下图:
但是我们一般不会一上电就直接这么使用,简单来说就是首先你得确保模块通讯正常并且正常附着网络,那么我们正常的使用中都会有一个 模块初始化流程(虽然模块一切正常的情况下,会自动联网)。
我们需要经过一些上电后的 AT 指令交互,确保模块联网正常,然后才能开始按照上面手册的流程走下去。
步骤 | 指令 | 说明 |
---|---|---|
1 | AT | 串口通讯基本测试 |
OK | 返回“OK”表示与模块通讯正常 | |
2 | AT+CPIN? | 检查 SIM 卡是否插入 |
+CPIN: READY OK | 返回“READY”表明读卡成功 | |
3 | AT+CSQ | 查询信号质量 |
+CSQ: 23,99 OK | 参数1:信号质量(0~ 31),一般打鱼8 小于31就行 参数2:忽略 | |
4 | AT+CEREG? | 查询网络注册状态 |
+CEREG: 0,1 OK | 参数2:1表示注册成功 | |
5 | AT+CGATT? | 查询网络附着状态 |
+CGATT: 1 OK | 1表示成功,0表示失败 |
上面的这些可作为模块上电的检查手段,完成上面的步骤,才可以开始进行后面的操作。 在程序中,我们可以把这些操作当做 模块的初始化。
上面的指令结尾都需要回车换行,在程序中定义字符串的时候末尾记得要加上
测试代码如下:
void ec800\_init()
{
u16 cat1_timeout = 0;
while(Iot\_SendCmd(AT,"OK", 200)){
HAL\_Delay(1);
cat1_timeout ++;
if(cat1_timeout >= 2000){
printf(" uart false\r\n");
return;
}
}
cat1_timeout = 0;
printf("uart ok\r\n");
while(Iot\_SendCmd(CPIN,"READY", 200)){
HAL\_Delay(1);
cat1_timeout ++;
if(cat1_timeout >= 2000){
return;
}
}
cat1_timeout = 0;
printf("simcard ok\r\n");
while(Iot\_SendCmd(RSSI,"+CSQ", 200)){
HAL\_Delay(1);
cat1_timeout ++;
if(cat1_timeout >= 2000){
return;
}
}
cat1_timeout = 0;
while(Iot\_SendCmd(CEREG,"0,1", 200)){
HAL\_Delay(1);
cat1_timeout ++;
if(cat1_timeout >= 2000){
return;
}
}
printf("网络注册 ok\r\n");
cat1_timeout = 0;
while(Iot\_SendCmd(CGATT,"+CGATT: 1", 200)){
HAL\_Delay(1);
cat1_timeout ++;
if(cat1_timeout >= 2000){
return;
}
}
printf(" 网络附着 ok\r\n");
}
2.3 PDP 上下文
我们在看文档的时候,会有一个 PDP 上下文的概念,这里我们需要对这个概念说明一下。
PDP,Packet Data Protocol,分组数据规程,移动通信用户在发送和接收分组数据时应用的协议,应用于 GPRS以及 WCDMA 等分组网络。
.
PDP context 即 PDP 上下文,保存用户面进行隧道转发的所有信息,包括 RNC / GGSN 的用户面 IP 地址、隧道标识和 QoS 等。
实际上如果对网络不了解的看完了上面的基本概念,应该还是不理解,所以我这里用白话文简单解释一下:
就是说我们需要用 PDP(Packet Data Protocol )传输数据,那么就必须给他建立一个背景,就是所谓的上下文,你得告诉 SGSN 和 GGSN (什么是 SGSN 和 GGSN ,往下面看,就类似于中转站&#x