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 ℃

在这里插入图片描述

信息交互

从某种意义上来说,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的产品。电源连接如下:
在这里插入图片描述

电源连接到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));
  }
  
}

程序编制就完成了。

总结

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

在这里插入图片描述
在这里我们发送了一个AT命令,SIM800C返回一个Ok。再发送一个AT+GSV,返回:
13:33:20.943 -> SIMCOM_Ltd
13:33:20.943 -> SIMCOM_SIM800C
13:33:20.979 -> Revision:1418B06SIM800C24

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

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你可以使用ArduinoSIM800C模块来发送短信和打电话。首先,确保你已经正确连接了SIM800C模块到Arduino,并且在Arduino IDE中安装了相应的库。 下面是一个简单的代码示例,可以帮助你开始使用SIM800C模块发送短信和打电话: ```cpp #include <SoftwareSerial.h> SoftwareSerial sim800c(10, 11); // 使用软串口连接SIM800C模块,将RX引脚连接到Arduino的10号引脚,TX引脚连接到11号引脚 void setup() { Serial.begin(9600); // 初始化串口通信 sim800c.begin(9600); // 初始化SIM800C模块的软串口通信 delay(1000); // 等待SIM800C模块启动 } void loop() { if (sim800c.available()) { Serial.write(sim800c.read()); // 将从SIM800C模块接收到的数据打印到串口终端 } if (Serial.available()) { sim800c.write(Serial.read()); // 将从串口终端接收到的数据发送到SIM800C模块 } } ``` 在这个示例中,我们使用了SoftwareSerial库来创建一个软串口对象sim800c,并将其与SIM800C模块的RX和TX引脚连接起来。我们在setup函数中初始化串口通信,并等待SIM800C模块启动。在loop函数中,我们通过串口终端与SIM800C模块进行通信。 你可以通过串口终端向SIM800C模块发送AT指令来实现发送短信和打电话的功能。例如,你可以使用以下代码来发送短信: ```cpp sim800c.println("AT+CMGF=1"); // 设置短信模式为文本模式 delay(1000); sim800c.println("AT+CMGS=\"+1234567890\""); // 替换为你想要发送短信的手机号码 delay(1000); sim800c.println("Hello, this is a test message!"); // 替换为你想要发送的短信内容 delay(1000); sim800c.write(0x1A); // 发送Ctrl+Z字符,表示发送短信 ``` 要打电话,你可以使用以下代码: ```cpp sim800c.println("ATD+1234567890;"); // 替换为你想要拨打的手机号码 ``` 请注意,以上示例中的手机号码和短信内容需要根据你自己的实际情况进行替换。 希望这个简单的示例能帮助你开始使用ArduinoSIM800C模块发送短信和打电话!如果你有任何问题,可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值