Arduino从Quectel M95 GSM模块读取AT命令

时间:2013-11-01 15:04:40

标签: terminal serial-port arduino gsm

目标:通过SoftwareSerial / Arduino将命令提交给Quectel M95(GSM2点击http://www.mikroe.com/click/gsm2/)并解析响应;没有Arduino GSM库。

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

问题:Arduino无法使用以下代码阅读GSM模块响应。结果是乱码文本/字符 - 变量和不可预测。提交AT Command" AT"是"好的。"

图片

通过终端取得成功:

enter image description here

Arduino回应:

enter image description here

#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);
  }
}

2 个答案:

答案 0 :(得分:1)

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

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

谢谢!

答案 1 :(得分:0)

将写入改为打印:

   void readSerial(){
     while (mySerial.available() > 0){
        Serial.print(mySerial.read()); // or println
     delay(10);
   }