GSM Communication on EBox4300--(1)主要是关于EBox4300上实现GSM通信的框架;GSM Communication on EBox4300--(2)陈述了硬件的制作;这次就讲讲EBox4300和TC35i的通信吧。
根据TC35i的“TC35i_ATC_V01.03”文档,我们可以使用AT指令来控制它的行为。由于之前的硬件设计中,没有加入耳机和麦克风,所以诸如打电话之类的语音试验这里就不能进行了,发短信是最简单直接的一个试验。短信有关的AT指令如下:
AT CMGC:发出一条短消息
AT CMGD:删除SIM卡内存的短消息
AT CMGF:选择短消息信息格式:0-PDU;1-文本
AT CMGL:列出SIM卡中的短消息PDU/text: 0/"REC UNREAD"-未读,1/"REC READ"-已读,2/"STO UNSENT"-待发,3/"STO SENT"-已发,
4/"ALL"-全部的
AT CMGR:读短消息
AT CMGS:发送短消息
AT CMGW :向SIM内存中写入待发的短消息
AT CMSS:从SIM卡内存中发送短消息
AT CNMI:显示新收到的短消息
AT CPMS:选择短消息内存
AT CSCA:短消息中心地址
AT CSCB :选择蜂窝广播消息
AT CSMP:设置短消息文本模式参数
AT CSMS:选择短消息服务
上述AT指令是通过串口来交互的,根据我之前写的文章Serial Port Debug on EBox4300,就在EBox4300上可以通过串口来和TC35i通信了。
对串口的操作可以用托管代码来实现,即使用System.IO.Ports中的SerialPort,主要就是Open,Close,Read和Write功能。设计一个简单的界面来显示正在进行的串口操作,如下图1所示:
图1:一个简单的UI调试界面
上图中,1和2是ZigBee(EBox4300的串口1)信号发送和接收的显示窗口;3和4是GSM短信息发送和接收的显示窗口;5是目标用户的手机号码输入框;6是进行简单操作的按钮,包括串口打开、关闭,TC35i模块的初始化,发送、接收显示区的清空等等。
EBox4300给TC35i发送指令,其实就是往串口2写字符,串口2输出可以用:m_serialPort2.Write();
例如,初始化短信模式设置的时候,可以使用:
//set AT CMGF=1 回车换行
m_serialPort2.Write(new char[] { 'A', 'T', ' ', 'C', 'M', 'G', 'F', '=', '1' }, 0, 9);
m_serialPort2.Write(new byte[] { 0x0D }, 0, 1);
m_serialPort2.Write(new byte[] { 0x0A }, 0, 1);
特别需要注意的是:短信内容发送完毕必须以十六进制数0x1A结束,例如,发送短信时,先发送对方号码,然后发送数据:
//发送text中输入的对方手机号码
stATCommand = "AT CMGS= 86" textBoxPhoneNumber.Text;
btATCommand = stATCommand.ToCharArray();
m_serialPort2.Write(btATCommand, 0, 22);
m_serialPort2.Write(new byte[] { 0x0D }, 0, 1);
m_serialPort2.Write(new byte[] { 0x0A }, 0, 1);
Thread.Sleep(15);
m_serialPort2.Write(new char[] { 'H', 'e', 'l', 'l', 'o'}, 0, 5);
//set SMS end symbol
m_serialPort2.Write(new byte[] { 0x1A }, 0, 1);
至此,在EBox4300上实现GSM网络联网,发送短信的部分已经完成,希望对大家有用,谢谢关注!
项目的演示,可以观看Youtube上的视频,链接地址:http://www.youtube.com/watch?v=EOiiRbr0q5I。
Enjoy!