arduino软串口与GA6-B通信之小白解法
arduino买的淘宝寨版,烧的时候一个劲出错,问了问卖家,说稳定性本来就比官方差点,能烧进去就是正常...不过幸好板子没啥大问题...
买了个GA6-B这个GRPS模块(便宜啊),给的arduino例子烧进去,发现有点大。
另外附上成功发短信的代码
一整块板子的空间不可能只留给一个模块啊,于是看了看给的视频,本质还是用的软串口。
对于我这种纯小白、能保证卡注册成功、只要发条短信就行的家伙,引用模块给的arduino库确实有点多余了。
下面给个发送AT指令的例子。
#include <SoftwareSerial.h>
SoftwareSerial gsm(8, 9);
void setup()
{
Serial.begin(57600);
while (!Serial) {
}
gsm.begin(115200);// 坑1
}
void loop()
{
gsm.listen();
gsm.println("AT");
gsm.println('\r'); // 坑2
while (gsm.available() > 0) {
char inByte = gsm.read();
Serial.write(inByte);
}
delay(1000);
}
有两个坑,坑了两天硬是一点东西都没进展。
坑1:模块的默认的波特率是115200,给的例子当中是57600,怪不得官方例子没搞成功...
坑2:自己用软串口搞吧,就要自己用AT指令,说明手册上说,末尾都是\r。最初的最初,我幼稚的以为:
AT\r
可以解决问题。结果没一点反应。
想了又想,哟,我靠,\r应该是一个字符,不是字符串啊!于是又单独println了一个,完美输出OK。不过看其他人,用的是write而不是println,不知道为啥。反正,能用就行。
只是发AT指令看他ok不ok不能解决任何的问题,发短信才是王道。
#include <SoftwareSerial.h>
SoftwareSerial gsm(8, 9);
void setup()
{
Serial.begin(57600);
while (!Serial) {
}//看别人有,我也搞了一波
gsm.begin(115200);
}
void loop()
{
sendsos();
delay(200);
}
void sendsos()
{
gsm.println("AT+CPMS=\"SM\",\"ME\",\"SM\"");
delay(1000);
gsm.println("AT+CMGF=1");
delay(1000);
gsm.println("AT+CSCS=\"GSM\"");
delay(1000);
gsm.println("AT+CNMI=2,1");
delay(1000);
gsm.println("AT+CMGS=\"18888888888\"");
delay(1000);
gsm.print("SOS!");
delay(1000);
gsm.write(0x1A);// 注意write
delay(500);
}
上边的这些发送的AT指令,是我在它arduino库里找到的。最后的0x1A,是必须的!参考了一下另一个兄弟操作sim900a的文章,拿过来根据GA6-B改了一下,完美。
不过注意到这里并没有使用任何的\r,却也可以,不知道为啥,还是那句话,能用就行。
p.s. 发短信会有10秒左右延迟,对于我这种嵌入式啥都没学的,能发已经是万幸了。
评论已关闭