SIM900A 发送中英文短信

一、模块连接方式

联通移动都可以的,不支持电信,联通2G不支持。此模块供电要求:5V
在这里插入图片描述

连接方式:
在这里插入图片描述

二、开机测试

先安照ttl连接方式连接到电脑,并插上 SIM 卡
打开串口,一定要勾选住“发送新行”,否则模块识别不出
在这里插入图片描述

能够正常使用模块的前提有:

  • 模块的串口通信正常
  • 可以检测到SIM卡
  • 信号强度足够(10以上)
  • 注册到网络
  • 附着到GPRS
    下面是开机测试的流程图,只有开机测试通过,才可以执行下一步的操作!!!
    模块开机后应该执行下面初始化流程:
AT         // 测试串口通讯是否正常
OK

AT+CPIN?   // 查询是否检测到SIM卡
+CPIN: READY

AT+CSQ   // 查询信号质量
+CSQ:18,0
OK

AT+CREG?   // 查询模块是否注册网络
+CREG: 0,1     
oK

以上全部正常再进行其它功能操作

三、SMS简介

SMS(Short Messaging Service)中文名称短信服务,它是在手机之间发送文字信息或从个人计算机或手持设备向手机发送信息的一种方式,其文本信息的最大发送量为160个字符(字母、数字或者拉丁字母中的字符),对于中文一般最大发送量为70个字符。
这里我想用SIM900A模块实现短信的收发。

四.短信的控制模式与编码

采用 Text Mode下使用GSM编码收发英文短信、使用UCS2编码收发中文短信
对于短信的控制一共有三种模式:Block Mode、基于AT指令的Text Mode、基于AT指令的PDU Mode 。目前手机中默认使用PDU Mode,通过PDU编码的短信可以是文字、声音或者图像。Text Mode只能用于发送ANSI范围的字符,发送方式比较简单。
SIM900A模块只提供Text Mode 和PDU Mode。
中文短信中,所有汉字和字符都是采用UNICODE编码。

4.1 Text Mode

Text Mode下,发送及接收到的数据均以ASCII码的显示来表示,可以发送指令"AT+CMGF=1",将GSM短信发送方式更改为文本模式。文本模式下接收的数据会自动解码,比如你收到一条短信息,GSM会返回:
+CMGR: “REC UNREAD”,"+8613806XXXXXX",“11/10/21,13:22:13+32”
hello (短信内容会自动换行)
不需要自己解码,便可得到短信的发送者、发送时间和短信内容,比较容易操作。
理论上Text Mode下,是只能够收发英文短信,但是SIM900A模块可以在Text Mode下使用UCS2编码,从而可以发送接收中文短信。

4.2 PDU Mode

PDU相当于一个数据包,它由SMS的信息组成,作为一种数据单元,必须包含源地址、目的地址、有效时间、数据格式、协议类型、正文、正文长度(可达140字节),这些信息都以十六进制表示。
PUD Mode被所有手机支持,可以使用任何字符集,其编码方式分为:7bit、8bit、UCS2。
7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。在这三种编码方式下,PDU串的用户信息(TP-UD)段最大容量(可以发送的短消息的最大字符数)分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
理论上发送中文短信需要使用PDU Mode的UCS2编码,上面也说了,SIM900A模块可以使用Text Mode发送UCS2编码,而且PDU Mode比Text Mode更加复杂,所以我采用了Text Mode收发中英文短信。
PDU Mode的详细讲解可以借鉴此博客:点击链接跳转

4.3 GSM编码

在GSM编码模式下,收发消息的内容和电话号码,都是以ASCII字符的形式显示的,发送英文短信时使用十分方便。
所以我使用GSM编码来收发英文短信。

4.4 UCS2编码

谈到UCS2编码就不得不说UNICODE,UNICODE又叫统一码、万国码,是计算机科学领域里的一项行业标准,包括字符集、编码方案等。UNICODE 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。简单来说,UNICODE编码可以表示世界上任意一种语言(有点夸张),自然也可以表示中文。
而UCS2编码是UNICODE的一种,UCS2中每个字符都占俩个字节。
使用UCS2编码后,发送短信的手机号码、短信内容都要经过UCS2编码转换才可以,但UCS2编码发送的消息在手机上可以直接显示为中文。
所以,需要UCS2与中文的转换软件,如下,可以实现中文和UCS2的双向转换
在这里插入图片描述

五、收发英文短信

采用Text Mode 的GSM编码。首先,模块要通过一系列开机测试指令(详情见 二、开机测试),才可以收发短信。这里介绍一下常用的对短信操作的一些AT指令:

5.1 AT+CPMS查询短信数量

AT+CPMS?   查询SIM卡内短消息使用状态
+CPMS: "SM",0,50,"SM",0,50,"SM",0,50
OK

需要定期查询SIM卡中短信息存储量,一旦SIM卡中短消息存满,将无法继续接收外部发过来的短信。

5.2 AT+CNMI设置新消息提示类型

在这里插入图片描述

5.3 AT+CMGF选择短信模式

AT+CMGF=1    文本模式

在这里插入图片描述

5.4 AT+CSCS设置编码

AT+CSCS="GSM"   

在这里插入图片描述

5.5 AT+CSMP设置短信文本模式

使用Text Mode的GSM编码时,短信文本模式设置为:

AT+CSMP=17,167,0,240(消息显示在终端)
AT+CSMP=17,167,0,241(消息存储在SIM卡中)

在这里插入图片描述

5.6 AT+CMGS发送消息到指定手机号

AT+CMGS="xxx"

使用Text Mode的GSM编码时,直接AT+CMGS="手机号"即可,然后,在>后输入要发送的内容(不要勾选发送新行),最后发送HEX(十六进制)的:1A 即可。

5.7 实践操作

使用SIM900A向其他手机号发送一条英文短信的完整步骤如下:

AT
OK

AT+CPIN?
+CPIN: READY
OK

AT+CREG?
+CREG: 0,1
OK

AT+CGATT?
+CGATT: 1
OK

AT+CMGF=1      设置为文本模式
OK

AT+CSCS="GSM"   设置编码
OK

AT+CSMP=17,167,0,241(消息存储在SIM卡中,发送给其他手机号时选这个,否则会报错)
OK

AT+CMGS="1395566xxxx"  手机号
>Hello World!
(再发送16进制的 1A,先勾选16进制发送,再输入1A )
+CMGS: 10
OK

1A的发送:
在这里插入图片描述

发送成功后截图如下:
在这里插入图片描述

我的手机号成功收到了信息
在这里插入图片描述

六.收发中文短信

收发中文短信利用的是Text Mode下的UCS2编码。相比于收发英文短信,收发中文短信需要修改的地方有:
修改编码:AT+CSCS=“UCS2”
手机号码要用UNICODE码
发送的消息要用UNICODE码(有专门的转换软件)
实践操作:
我向我另外一张手机卡发送信息:天气真不错;并且收到后回复消息:是的呢。用软件将UNICODE码转换为中文,串口操作界面如示:

AT+CMGF=1  文本模式
OK

AT+CSCS="UCS2"   编码设置
OK

AT+CSMP=17,167,0,241(消息存储在SIM卡中)
OK

AT+CMGS="00310033003900350035003600360037003800300032"  (手机号,要用 对应的UNICODE码,中间不能留空格)
>59296C14771F4E0D9519  ("天气真不错"的对应的UNICODE码)
+CMGS: 16
OK

再收到信息
+CMTI: "SM",3   信息提示
AT+CMGR=3      查询短信
+CMGR: "REC UNREAD","002B0038003600310033003900350035003600360037003800300032","","21/03/03,17:19:28+32"
662F76845462
OK

发消息如示:
在这里插入图片描述

收消息如示:
在这里插入图片描述

七、基础指令

AT+CGATT?   查询GPRS网络附着状态,返回1表示已附着
AT+CMGR=x   查询排序为 x 的短信信息,显示到终端

未完待续

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: 要使用Arduino和SIM900A发送短信,需要先连接SIM900A模块到Arduino板上。然后,使用AT指令来控制SIM900A模块发送短信。以下是一个示例代码: ``` #include <SoftwareSerial.h> SoftwareSerial SIM900A(7, 8); // RX, TX pins void setup() { SIM900A.begin(960); // 初始化串口通信 delay(100); SIM900A.println("AT+CMGF=1"); // 设置短信格式为文本模式 delay(100); } void loop() { SIM900A.println("AT+CMGS=\"+86138xxxxxxxx\""); // 设置短信接收者的电话号码 delay(100); SIM900A.print("Hello, this is a test message."); // 设置短信内容 delay(100); SIM900A.write(x1A); // 发送短信 delay(100); } ``` 在代码中,首先使用SoftwareSerial库初始化串口通信,并设置SIM900A模块的短信格式为文本模式。然后,在循环中,使用AT指令设置短信接收者的电话号码和短信内容,并发送短信。注意,在发送短信时,需要使用x1A字符表示发送结束。 ### 回答2: Arduino作为一种易于使用的开源平台,常被用来搭建各种小型电子项目。其中,利用Arduino和Sim900A模块发送短信则是一个非常有趣实用的应用。在这个项目中,我们可以实现通过Arduino和Sim900A模块向指定的手机号码发送短信。 在开始这个项目之前,我们需要准备好以下的材料: 1、Arduino开发板 2、Sim900A GSM模块 3、SIM卡 4、Jumper线 5、USB电缆和计算机连接 接下来,我们需要进行如下步骤: 1、将Sim900A模块连接到Arduino开发板上。连接方式如下: GSM模块 RXD ----------- Arduino TX (Digital Pin 1) GSM模块 TXD ----------- Arduino RX (Digital Pin 0) GSM模块 GND ----------- Arduino GND GSM模块 VCC ----------- Arduino 5V 2、将Sim卡插入Sim900A模块。 3、将Arduino开发板通过USB电缆连接到计算机中。 4、在Arduino开发环境中,打开源代码编辑器。我们将在这里编写代码,让Sim900A模块发送短信。 5、创建一个新的源代码文件,并将以下代码复制并粘贴进去: #include <SoftwareSerial.h> SoftwareSerial mySerial(1, 0); // RX, TX void setup() { Serial.begin(9600); mySerial.begin(9600); // SIM900A模块通过软串口(Software Serial)与Arduino通讯 delay(5000); // 为了等待SIM900A模块完成启动,我们需要先延时几秒钟。 mySerial.println("AT+CMGF=1\r"); // 将SIM900A设为文本模式 delay(1000); // 以下是设置短信参数 mySerial.println("AT+CMGS=\"+xxxxxxxxxx\"\r"); // xxxxxxxxxx表示接收者的手机号码 delay(1000); // 输入短信内容,并发送 mySerial.println("Hello! This is a test message from Sim900A via Arduino."); delay(1000); mySerial.println((char)26); // 按Star键输出,发送短信 delay(1000); mySerial.println(); } void loop() { if(mySerial.available()) Serial.write(mySerial.read()); if(Serial.available()) mySerial.write(Serial.read()); } 6、在代码中设置了接收者的手机号码并输入了短信内容。在这个例子中,短信内容是“Hello! This is a test message from Sim900A via Arduino.”。你可以修改这些信息,根据自己的需要设计不同的发送短信内容。 7、在Arduino的菜单中选择文件 -> “上传”(或者Cmd + U),将代码上传到开发板上。 8、如果一切正常,Sim900A模块就会向绑定的手机号码发送以前设定的短信内容。如果有任何问题,你可以检查连接,查看串口调试工具等等,确定问题所在。 通过上述步骤,我们可以完成在Sim900A与Arduino开发板之间通过软串口发送短信的过程,达到向指定手机号码发送指定内容短信的目的。 ### 回答3: Arduino是一款广泛应用于物联网领域的开发板,可以通过各种传感器和模块来实现各种功能。SIM900A是一款基于GSM/GPRS技术,适用于全球各地的无线通信模块。Arduino和SIM900A的结合可以实现利用SIM900A发送短信的功能。下面,我将详细介绍如何利用Arduino和SIM900A发送短信。 准备工作: 1. Arduino板一个 2. SIM900A模块一个 3. 其他相关电子元件:连接线、电容、电阻等 4. 一张SIM卡 步骤: 1. 连接SIM900A模块和Arduino板,具体连接方案可以上网搜索。 2. 添加对应的库,保证程序能顺利运行。 3. 在Arduino IDE编写程序,将SIM900A的AT指令封装成Arduino函数,从而简化控制SIM900A的过程。 4. 打开串口监视器,并通过AT指令控制SIM900A进行初始化。 5. 通过AT指令设置短信中心号码、发送短信。 6. 关闭串口监视器。 通过以上步骤,即可实现利用Arduino和SIM900A发送短信的功能。如果你已经掌握了Arduino基础,那么学习使用SIM900A发送短信的过程也不会太过困难。在实际应用中,需要注意安全和保密性问题,比如将SIM卡锁定、设置短信加密等。 类似于这样的控制器是物联网建设的重要组成部分,也是未来发展的重要方向,对于Arduino和物联网开发感兴趣的小伙伴们,不妨跟着这个教程深入理解一下利用Arduino实现SIM900A短信功能的具体过程。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪天鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值