英創公司的嵌入式工控主板均預裝WinCE5.0正版操作系統,在工業控制及終端檢測設備中,具有低成本、低功耗、小尺寸等優勢。在現在的工業應用中,利用GSM無線信道進行數據通訊的無人值守及無線數據傳輸的應用越來越廣泛,其中主要以GPRS數據通訊及SMS短信息方式為主。GPRS數據通訊是以TCP/IP方式進行通訊,GPRS模塊發送SMS短信,是通過串口發送AT指令來實現。
英創公司基于ARM9工控主板,完善了GPRS模塊發送短信息的應用方案。本文以EM9161+ETA300為例,說明SMS短信息的使用方法。
英創公司對短信收發的操作函數封裝為類SMS,該類是基于串口類CCESerial派生的新類,并在基類中定義了虛函數PackagePro(),在SMS中重新實現該函數來處理SMS短信收、發的相關AT指令,并對所使用到的變量進行操作,且用戶可以根據自己不同的需求,重新實現該函數。該函數是SMS短信收發過程中主要的功能函數。SMS類定義的主要成員及使用到的數據結構如下:
struct SMS_DATA
{
unsigned char PhoneNum[16]; // 對端電話號碼
struct Date d; // 日期:年月日
struct Time t; // 時間:時分秒
int DatLen; // 數據長度
unsigned char DBuf[168]; // 短信數據內容
};
// 基類的PackagePro()函數的重新實現
// 主要作用是處理短信收發相關的AT指令
int PackagePro( char* Buf, int len );
// GPRS模塊的SMS工作模式的初始化
// 主要是發送AT指令設置GPRS模塊工作參數
int InitSMSModem( );
// 通過GPRS模塊發送短信息
// return = 0: SMS-SUBMIT ok!
// < 0: SMS-SUBMIT is rejected
int SendMessage( struct SMS_DATA* pSMS );
對于用戶來說,使用SMS類來發送短信,僅執行幾個步驟即可。下面則按次序對使用該類SMS來發送短信息的方法進行說明。(例如:用戶程序中實例化了一個對像:class SMS MySMS; )
1、對GPRS模塊進行上電
EM9161管理GPRS模塊的電源,使用的是GPIO8和GPIO9兩條引腳,按照GPRS電源管理要求的時序進行IO操作,即可實現對GPRS模塊的電源進行控制。英創公司寫好了相關的操作函數GPRS_PM()在EM9161_ISA_DIO.h中,其描述如下:
// 功能描述:該函數通過對EM9161的GPRS_STB和GPRS_AUX兩個管腳信號的操作,實現對GPRS模塊
// (MC39i或兼容模塊)的電源管理。
//
// 輸入參數 OpMode: 電源管理功能索引號,有效索引號包括:
// OpMode = 1: 對GPRS模塊進行上電操作,并把執行該操作后電源狀態返回;
// OpMode = 2: 對GPRS模塊進行強制關電,并把執行該操作后電源狀態返回;
// OpMode = 3: 讀取GPRS模塊當前的電源狀態。
//
// 輸出參數 pResult: 用于存儲讀取的電源狀態信息。
// *pResult = 0: 表示GPRS模塊的電源已關閉;
// *pResult = 1: 表示GPRS模塊的電源已加載成功;
//
// 返回值 = FALSE:操作失敗。
// TRUE: 操作正確。
BOOL GPRS_PM( int OpMode, int* pResult );
調用GPRS_PM()函數對GPRS模塊進行上電。由于GPRS模塊上電后,還要檢測SIM卡是否在線及信號強度是否可用,所以會占用相當長的時間,建議在GPRS模塊上電成功后,延時10秒鐘時間再進行下面的操作。
2、打開GPRS模塊所占用的串口
MySMS.OpenPort( 2, 57600 , 'n' , 8 , 1 ); //在這里,直接調用SMS類繼承//過來的成員OpenPort()函數,其實,這里是調用的基類的成員函數,即CCESerial的OpenPort()。
3、初始化SMS短信模塊
MySMS.InitSMSModem();
4、填寫要發送的手機號及數據
如:要發送信息“英創嵌入式:WinCE!”到13800000000號碼
struct SMS_DATA SendData; // 定義一個發送數據的數據結構
SendData.PhoneNum=”13800000000”; // 填寫接收短信的手機號
SendData.DBuf=”英創嵌入式:WinCE!”; // 填寫要發送的數據。
5、啟動發送
MySMS.SendMessage( &SendData ); // 啟動短信發送
6、關閉GPRS模塊連接的串口
當不用GPRS發送短信時,需要關閉對應的串口。
MySMS.ClosePort(); // 關閉GPRS模塊所占用的串口
在SMS類直接支持中文短信的發送,所以短信發送的模式均采用PDU模式。對于中文字符,在短信發送時還需要轉換為unicode碼,程序代碼中已經實現了中文內碼到unicode 碼的自動轉換,客戶在測試該程序時,需要注意的是要將unicode 的相關的3個轉換文件復制到系統的/nandflash中。
gsm0338.bin
gb2312.bin
unicode.bin
本文所示的例程僅在英創公司的ARM系列嵌入式主板上可用,如需該方案的源碼,請與英創公司聯系。
-
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35296
發布評論請先 登錄
相關推薦
評論