serial-port - 当我从西门子 TC35 GSM 模块和 Arduino 读取短信时,短信被截断

标签 serial-port sms arduino gsm at-command

我正在使用 Arduino+Siemens TC35 GSM 模块进行一些实验,我希望能够读取发送到此设备的短信。

我或多或少地按照这个方案组装了我的设备:

enter image description here

不同之处在于我不使用蜂鸣器或继电器,只使用液晶显示器。您可以在此处查看完整图片:

enter image description here

该方案应该可行,因为例如我已经能够从 Arduino 向我的手机发送短信,但在解析发送到 Arduino 的短信时遇到一些问题。

(注意:我将隐藏我的号码,用***替换一些号码)

我像这样初始化 GSM 模块:

mySerial.print("AT+CMGF=1\r\n");

我尝试像这样阅读我的短信:

void readSMS()
{
  mySerial.print("AT+CMGR=6\r\n");
  delay(1000);

  char c;

  while (mySerial.available()>0){
     c = (char)mySerial.read(); 
     Serial.print(c);
  }
}

但我总是收到一条被截断的短信。这是我在串行监视器中看到的内容:

AT+CMGF=1
OK
AT+CMGR=6
+CMGR: "REC READ","AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6
+CMGR: "REC READ","+4475********",,"14/04/25,21:08:AT+CMGR=6

我的代码有什么问题吗?

非常感谢您的帮助。

p.s:其他应该有效的命令(例如删除所有短信的命令:AT+CMGD=1,4​​)根本不起作用,给我错误

p.p.s:我希望我可以使用可用于 Arduino 的 GSM.h 库,但我猜它只与原始的 Arduino GSM Shield 兼容。

最佳答案

我在任何方面都不是 Arduino 专家,因此在 API 中可能有更好的方法来做到这一点,但我会尝试这样的方法(延迟可能会降低)

void readSMS()
{
  mySerial.print("AT+CMGR=6\r\n");     // Send request

  int count = 5;                       // Number of 100ms intervals before 
                                       // assuming there is no more data
  while(count-- != 0) {                // Loop until count = 0

    delay(100);                        // Delay 100ms

    while (mySerial.available() > 0){  // If there is data, read it and reset
       c = (char)mySerial.read();      // the counter, otherwise go try again
       Serial.print(c);
       count = 5;        
    }
  }
}

另一个 - 可能更好 - 的选择是不延迟地循环,直到得到完整的答案。当然,假设您知道要寻找什么(<cr><lf>OK<cr><lf> 似乎就是这种情况,但我对 Hayes 规范太弱,无法确定)

关于serial-port - 当我从西门子 TC35 GSM 模块和 Arduino 读取短信时,短信被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23310121/

相关文章:

android - 如何在打开默认消息应用程序之前显示确认消息?

php - 如何在 PHP 中通过 GET 方法向另一个网站发送 HTTP 请求

Android ADK 蓝牙设备兼容性

c# - 串行端口 Port.Write() 命令

linux - Linux 中单声道的 SerialPort 不响应 DataReceived 事件

matlab - 使用 MATLAB 与外部设备的 GPIB 连接

android - 如何根据各种设备获取短信列表

字符数组不使用 strcpy 复制

python - 从电脑读取wav文件到arduino mega

java - CommPortIdentifier.getPortIdentifiers() RXTX 未列出所有端口