GSM MODULE 读取手机卡短信思路

AT+CPMS? 命令获取到的是当前手机卡储存的短信数量。正常情况下可以当作短信序列号去读取短信,但是如果在你读取短信后,传输到服务器途中,又收到了新短信就会出现问题:

假如你通过上面命令读出来手机卡储存两条短信,你通过 AT+CMGR=2读出位置为 2 的短信,然后发送到服务器中途,又收到一条短信,此时会被储存在位置 3,当你把目前这条短信发送到服务器上,然后通过 AT+CMGD=2 删除之后,

再次通过 AT+CPMS? 获取短信数量,结果还是2,但是实际短信储存的位置序列为 1 和 3。所以我们需要另一种读取短信的方式:

首先读取 手机卡储存的短信数量,当数量大于1条时,写一个循环来读取实际短信

// 伪代码

for(int i=1;i<=50;i++){
  printf("AT+CMGR=%d\r\n", i);
  if(read_success){
    // 记录当前 i
  }else{
    continue;
  }
}

总结就是当用 AT+CPMS? 发现手机上有短信时,就开启一个循环去读取短信,

当 AT+CPMS? 结果为 0 时,证明手机卡没有存储短信。完成已存短信的处理。

猜你喜欢

转载自www.cnblogs.com/1x11/p/12483828.html