2

Objective : 通过 SoftwareSerial/Arduino 向 Quectel M95 (GSM2 Click http://www.mikroe.com/click/gsm2/ ) 提交 AT 命令并解析响应;没有 Arduino GSM 库。

当前条件:能够通过终端以各种波特率(9600 - 115200)与 M95 完全通信。可以提交 AT 命令并显示所需的结果代码。我尝试过使用不同的调制解调器(DroneCell),结果相同。所有接线已检查 10 次并验证正确。如果我通过 SoftwareSerial 提交 AT 命令,我知道调制解调器正在接收数据,因为我可以发送 SMS、启动 GPRS 等;只是无法得到有效的回应。

问题:Arduino 无法使用以下代码读取 GSM 模块响应。结果是乱码文本/字符 - 可变且不可预测。提交 AT 命令“AT”时的预期响应是“OK”。

图片

通过终端成功:

在此处输入图像描述

阿杜诺回应:

在此处输入图像描述

#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11

SoftwareSerial mySerial(rxPin,txPin); // RX, TX

void setup(){

  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  Serial.begin(9600);
  Serial.println("Arduino serial initialized!");
  delay(10);

  mySerial.begin(9600);
  Serial.println("Software serial initialized!");
  delay(10);
}

void loop(){
  issueCommand("AT");
  readSerial();
  delay(500);


  while(true){
    readSerial();
  }
}

void issueCommand(char* msg){
  mySerial.println(msg);
  Serial.print(msg);
  delay(10);
}

void readSerial(){
  while (mySerial.available()){
    Serial.write(mySerial.read());
    delay(10);
  }
}
4

2 回答 2

1

解决方案:实际上没有启用自动波特率;我将内部 M95 波特率设置为 115200,我的 Arduino 解决方案也设置为 115200 波特。然而,SoftwareSerial 似乎在超过 9600-ish 的速率上失败了。一旦我将 M95 内部速率重置为自动波特率并将我的 Arduino 代码更改为 9600 个字符,就会按预期通过。

感谢您的反馈,它促使我自己找到解决方案。

谢谢!

于 2013-11-04T21:01:01.063 回答
0

将写入更改为打印:

   void readSerial(){
     while (mySerial.available() > 0){
        Serial.print(mySerial.read()); // or println
     delay(10);
   }
于 2013-11-01T18:45:12.937 回答