目标:通过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"是"好的。"
图片:
通过终端取得成功:
Arduino回应:
#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);
}
}
答案 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);
}