赞
踩
联通移动都可以的,不支持电信,联通2G不支持。此模块供电要求:5V
连接方式:
先安照ttl连接方式连接到电脑,并插上 SIM 卡
打开串口,一定要勾选住“发送新行”,否则模块识别不出
能够正常使用模块的前提有:
AT // 测试串口通讯是否正常
OK
AT+CPIN? // 查询是否检测到SIM卡
+CPIN: READY
AT+CSQ // 查询信号质量
+CSQ:18,0
OK
AT+CREG? // 查询模块是否注册网络
+CREG: 0,1
oK
以上全部正常再进行其它功能操作
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编码。
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编码,从而可以发送接收中文短信。
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的详细讲解可以借鉴此博客:点击链接跳转
在GSM编码模式下,收发消息的内容和电话号码,都是以ASCII字符的形式显示的,发送英文短信时使用十分方便。
所以我使用GSM编码来收发英文短信。
谈到UCS2编码就不得不说UNICODE,UNICODE又叫统一码、万国码,是计算机科学领域里的一项行业标准,包括字符集、编码方案等。UNICODE 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。简单来说,UNICODE编码可以表示世界上任意一种语言(有点夸张),自然也可以表示中文。
而UCS2编码是UNICODE的一种,UCS2中每个字符都占俩个字节。
使用UCS2编码后,发送短信的手机号码、短信内容都要经过UCS2编码转换才可以,但UCS2编码发送的消息在手机上可以直接显示为中文。
所以,需要UCS2与中文的转换软件,如下,可以实现中文和UCS2的双向转换
采用Text Mode 的GSM编码。首先,模块要通过一系列开机测试指令(详情见 二、开机测试),才可以收发短信。这里介绍一下常用的对短信操作的一些AT指令:
AT+CPMS? 查询SIM卡内短消息使用状态
+CPMS: "SM",0,50,"SM",0,50,"SM",0,50
OK
需要定期查询SIM卡中短信息存储量,一旦SIM卡中短消息存满,将无法继续接收外部发过来的短信。
AT+CMGF=1 文本模式
AT+CSCS="GSM"
使用Text Mode的GSM编码时,短信文本模式设置为:
AT+CSMP=17,167,0,240(消息显示在终端)
AT+CSMP=17,167,0,241(消息存储在SIM卡中)
AT+CMGS="xxx"
使用Text Mode的GSM编码时,直接AT+CMGS="手机号"即可,然后,在>后输入要发送的内容(不要勾选发送新行),最后发送HEX(十六进制)的:1A 即可。
使用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 的短信信息,显示到终端
未完待续
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。