天天看点

Arduino Nano与SIM800C通讯简单就是硬道理SIM800C GSM/GPRS通讯卡MCU设备 Arduino Nano设备连接软件编制总结

用Arduino Nano 与 SIM800C 通讯

  • 简单就是硬道理
  • SIM800C GSM/GPRS通讯卡
    • GPRS上网卡简介
    • 信息交互
  • MCU设备 Arduino Nano
  • 设备连接
    • Arduino Nano接线
    • SIM800C 接线
  • 软件编制
  • 总结

简单就是硬道理

用简单的设备完成复杂的事情是我们的追求。SIM800C是GSM/GPRS等数据通讯的选择,在中国价格很低,大众化的产品,实现上网服务。根据任务选择一款适合自己应用的MCU也是对一个项目或者产品成败的关键。在这里我们需要一个MCU完成上网通讯等服务,比如是完成一个考勤机的服务,我们选择一个Arduino Nano产品来实现。下面介绍实现SIM800C通讯的硬件连接和软件编程。

SIM800C GSM/GPRS通讯卡

GPRS上网卡简介

SIM800C是一个四频GSM/GPRS模块,主要技术参数和技术特点如下:

  • 四频 850/900/1800/1900 MHz
  • GPRS multi-slot class 12/10
  • 满足GSM 2/2+ 标准

    – Class 4 (2 W @850/900 MHz)

    – Class 1 (1 W @1800/1900MHz)

  • 尺寸: 17.615.72.3mm
  • 重量: 1.3g
  • 通过AT命令控制(3GPP TS 27.007, 27.005和SIMCOM 增强AT命令集)
  • 电压范围: 3.4 ~4.4V
  • 操作温度范围: -40 ~+85 ℃
Arduino Nano与SIM800C通讯简单就是硬道理SIM800C GSM/GPRS通讯卡MCU设备 Arduino Nano设备连接软件编制总结

信息交互

从某种意义上来说,SIM800C卡是一个服务器,MCU像一个客户机,发送AT命令给SIM800C,SIM800C回复信息给MCU。关于AT命令的详细情况这里就不一一赘述,先知道2个重要的命令:

  1. AT 这个作为打招呼的命令
  2. AT+GSV 这个作为获取产品厂家信息的命令

MCU设备 Arduino Nano

Arduino Nano产品在前面介绍了很多了,不在这里介绍了,前面的博客文章介绍的比较详细了。

设备连接

设备连接包括2个部分:

  • Arduino Nano接线
  • SIM800C接线

Arduino Nano接线

SIM800C可以与5V的单片机连接也可以和3.3V的单片机连接,我们选择的Arduino产品是一个5V的产品。电源连接如下:

Arduino Nano与SIM800C通讯简单就是硬道理SIM800C GSM/GPRS通讯卡MCU设备 Arduino Nano设备连接软件编制总结

电源连接到5V和GNG。通讯线可以看到D10和D11作为Rx和Tx的线用来连接SIM800C。

SIM800C 接线

如果是使用的5V的MCU,可以用MCU的电源为SIM800C供电。但这里要注意的是SIM800C的电源是有要求的。一般的是要求在5V电源情况下能够达到500 mA,甚至有时会超过500 mA。用一般的USB 5V供电不能保证电源是否满足要求。接线端子

5V:外接5V电源

V_TTL: MCU电源

GND: 接地

TXD: 连接MCU的接收端,SIM800C串行通讯的发射端,在这里是连接MCU的端子10,是MCU的Rx。

RXD: 连接MCU的发射端,SIM800C串行通讯的接收端,在这里是连接MCU的端子11,MCU的Tx。

这里要注意的是与MCU的端口要互换,TXD <-> Rx, RXD <-> Tx.

软件编制

软件采用Arduino IDE 编程软件。像前面说的,这个软件有2种形式:

  • 网上在线形式的IDE
  • 现在安装的IDE

这两种形式的IDE都可以,保持经常更新。这个生态系统还是非常强大的,但中国的弟兄们没有在网上,主要是英文的,汉化不行,不然会更强大。

现在来实现我们的软件:

#include <SoftwareSerial.h>		// 采用软件的串口

SoftwareSerial SIM800C(10, 11);     // Serial RX, TX
boolean bState, bOldState;
int incomingByte = 0;               // for incoming serial data

void setup() {
  // put your setup code here, to run once:
  // Open serial communications and wait for port to open
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  while (!Serial) {
    ;   // wait for serial port to connect. Needed for native USB port only
  } 

  Serial.println("Good Morning, my old friend!");
  
  SIM800C.begin(9600);
  SIM800C.println("AT+CMGF=1");
  
}

void loop() {
  // put your main code here, to run repeatedly:
  if (SIM800C.available()) {
    Serial.write(SIM800C.read());
    digitalWrite(13, HIGH);
  }
  if (Serial.available()) {
    SIM800C.write(Serial.read());
//    incomingByte = Serial.read();
//    Serial.print("I received: ");
//    Serial.println(incomingByte, DEC);
//    digitalWrite(13, !digitalRead(13));
  }
  
}

           

程序编制就完成了。

总结

现在来看一下我们的成果。

Arduino Nano与SIM800C通讯简单就是硬道理SIM800C GSM/GPRS通讯卡MCU设备 Arduino Nano设备连接软件编制总结

在这里我们发送了一个AT命令,SIM800C返回一个Ok。再发送一个AT+GSV,返回:

13:33:20.943 -> SIMCOM_Ltd

13:33:20.943 -> SIMCOM_SIM800C

13:33:20.979 -> Revision:1418B06SIM800C24

通讯成功。任务初步完成。