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秒左右延迟,对于我这种嵌入式啥都没学的,能发已经是万幸了。

标签: none

评论已关闭