c++ - 通过 Arduino 上的 gprs shield 接收短信

标签 c++ arduino gprs

我一直在网上搜索,试图找到一些示例代码来了解如何收听和阅读短信。我是 at 命令的新手,所以我想看一些例子。我的意图是收听短信并阅读内容。如果消息包含“转发”这个词,我希望它运行某个功能。我在我的 arduino uno 上使用了 seeedstudio GPRS v1.4 shield。

我找到了一个库,但我对 readSMS() 函数感到困惑。图书馆位于此处:https://github.com/Seeed-Studio/Seeeduino_GPRS .

我有当前代码:

GPRS gprsTest(8,7,9,9600,"1818XXXXXXXXX");//TX,RX,PWR,BaudRate,PhoneNumber

void setup() {
  Serial.begin(9600);
  gprsTest.preInit();
  delay(1000);
  while(0 != gprsTest.init()) {
      delay(1000);
      Serial.print("init error\r\n");
  }  
}

void loop() {
  //nothing to do
  gprsTest.readSMS();
}

我的问题是我不确定在 readSMS 函数的参数中放入什么。

根据 api,该函数接受一个 int、string 和另一个 int。

int readSMS(int messageIndex, char *message, int length);

有什么想法吗?没有任何关于接收短信的文档

最佳答案

我对 Seeed-studio 不熟悉(头文件中的注释也维护得不是很好,给你一些帮助)但这里是基本的想法:
收到的短信存储在所选消息存储器(SIM 卡或电话,在您的情况下将是调制解调器)上的独立索引中。新消息通常采用最小的未使用索引(索引从 1 开始)。

有两种检测新短信的方法
1) 调制解调器在输出端口发送一个字符串以指示新的 SMS(如中断)
2)你必须自己读取未读消息的数量(轮询)

这些方法需要了解硬件相关的 AT 命令。如果您想了解/了解发生了什么,请阅读 AT 命令 CMGRCMGF

也就是说,您明确要求的信息可以在gprs.cpp 的函数readSMS 中找到。
messageIndex 是存储消息的选定内存的索引。
*message 是消息将被读入的缓冲区。
length为要读取的字节长度。
返回状态始终为 0(不是一个好的策略)。

我建议使用自定义代码区分已读和未读消息。这取决于您的应用

关于c++ - 通过 Arduino 上的 gprs shield 接收短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21845627/

相关文章:

c++ - 如何在不使用命名空间 std 的情况下从文件中读取

sockets - 作为 UDP 客户端的 Netcat 不接收来自 Arduino Wifi Shield 的响应数据包。简单的 C UDP 客户端。为什么?

arduino - 使用Arduino GSM库打开IComSat GSM板

c++ - 在 C++ 中通过多个函数嵌套按值返回 vector

c++在if ... else中为const QList赋值

c++ - C++内部的继承

c++ - Arduino 上的位移位错误

c++ - 使用 sprintf 时定义缓冲区的正确方法

c++ - 如何检查 SIM800L 上的 Arduino 通话是否活跃?

Arduino GSM Shield 网络客户端 302