コード: - - - - - - - - - - - - - - - - - - - - - - - - --------------------------------
現在、携帯電話のショートメッセージの応用がますます普及しており、インターネット上でショートメッセージを送信できるサイトは増えていますが、サービスが満足できるものではなく、送信されたショートメッセージが海に流れてしまうことがよくあります。最も確実な送信方法は、もちろん携帯電話を使用することです。ステータスレポートを設定しておけば、相手がメッセージを受信したかどうかを確実に知ることができます。携帯電話による送信は比較的確実ですが、入力が面倒で効率が悪いという問題もあります。この記事では、携帯電話をコンピュータに接続できれば (赤外線ポートまたは携帯電話データ ケーブルを使用したシリアル ポート経由で、携帯電話が GSM AT コマンド セットをサポートしている場合)、次のことを実現できます。自作のショート メッセージ送信ソフトウェア send によるショート メッセージの送信。
現在市場にあるほとんどの携帯電話は、モデム制御と同様の GSM AT コマンド セットをサポートしています。このコマンド セットは、Nokia、Ericsson、Motorola、HP などのメーカーが GSM システム用に共同開発したもので、SMS (ショート メッセージ サービス) のサポートが含まれています。 )。 )コントロール。
GSM AT 関連コマンドの概要
SMS に関連する GSM AT コマンドを表 1 に示します。
表 1 関連する GSM AT コマンド
SMS を制御するには 3 つの方法があります。
ATコマンドに基づくPDUモード。
テキスト モードは比較的シンプルで、多くの Nokia 携帯電話がこのモードをサポートしています。ほとんどの Siemens 携帯電話は PDU モードのみをサポートしています。PDU モードは、携帯電話で SMS メッセージを送受信する方法であり、ショート メッセージのテキストは 16 進数でエンコードされて送信されます。現在、ブロック モードは PDU に置き換えられているため、この記事では主に PDU モードの送信について説明します。
コンピュータと携帯電話間の通信
この記事では、Siemens S3568iを例としてショートメッセージの送信方法を紹介します。
データケーブル接続
まず、S35/25データケーブルを介して携帯電話をコンピュータのシリアルポートに接続します。次に、ハイパーターミナルを開き、直接シリアル ポート接続を選択し、ポート パラメータを速度 19200、パリティなし、8 データ ビット、および 1 ストップ ビットに設定します。
赤外線接続
赤外線ポートを備えたコンピューターを使用している場合は、携帯電話とのワイヤレス接続をセットアップできます。まず、コンピュータの赤外線ポートがオンになっていることを確認し、携帯電話の赤外線およびファックス/データ受信機能をオンにして、赤外線ポートに接続します。赤外線デバイス Siemens S35 がコンピュータのシステム トレイに表示されます。赤外線モニターが設置されていない場合は表示されません)。次に、ハイパーターミナルを開き、IrDa のシリアル ポートを選択します。
接続テスト
ハイパーターミナルツールバーの通話ボタンをクリックし、「AT」と入力してEnterを押します。画面に「OK」が表示されたら、コンピュータと携帯電話間の接続が成功したことを意味します。この時点で、さまざまなGSM ATを入力できます。コマンド。
例: 携帯電話のメーカーに問い合わせるには、「AT+CGMI=
通常は、テスト コマンド AT+CMGS=?
PDU モード (+CMGF=0)+CMGS=
ショート メッセージ フォーマット コマンドの場合AT+CMGF は 0 を返します。その後、SMS 形式は PDU モードになります。AT+CMGS= コマンドを実行すると、電話機は「>」記号を返し、PDU データの入力を待ちます。 ^Z または Esc キー。
メッセージが正常に送信された場合、OK が返され、メッセージ番号が表示されます:
+CMGS:
メッセージの送信に失敗した場合、次の情報が返されます:
+CMS ERROR:
以下は、PDUデータ形式の分析を通して、携帯電話に保存されている送信メッセージを分析して、SMS PDUのデータ形式を紹介します。まず、携帯電話を使用して短いメッセージを作成し、携帯電話番号 13605696031 を送信します。メッセージの内容は「Hello World!」です。この情報はAT+CMGL=2を実行することで読み出すことができます。
操作プロセスは次のとおりです(斜体は応答メッセージ、{}はコメント):
AT
OK
AT+CMGL=2 {未送信のテキストメッセージを読み取る}
+CMGL: 1,2,,24 {1はメッセージを表しますメッセージの数、2 は未送信のメッセージを示し、24 は合計メッセージ容量を示します}
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619
OK
このメッセージを分析してみましょう。
08: 短いメッセージ センター アドレスの長さ。
91: SMS センター番号タイプ、91 は TON/NPI です。 TON/NPI は International/E.164 標準に準拠しています。つまり、数値の前に「+」記号を追加する必要があります。他の値も使用できますが、91 が最も一般的に使用されます。
683108501505F0: SMS 番号。使用されるサービス センターのアドレスです。位置がわずかに処理されるため、実際の番号は 8613805515500 (文字 F は長さから 1 を引いたものを意味します) になります。これは、作成者がいる GSM ショート メッセージ センターの番号です。
11: ファイルヘッダーバイト (ビットマスクであるヘッダーバイト)。ここで 11 は、ショート メッセージを通常どおりに送信することを指します。
00: 情報タイプ。
0B: 着信番号の長さ。
81: 着信番号のタイプ。
3106656930F1: 着信番号もシフトされており、実際の番号は 13605696031 です。
0000A7: SMS エンコーディング タイプ GSM デフォルトのアルファベット、中国語の場合は 000010 です。
0B: メッセージの長さが短い。
E8329BFD06DDDF723619: SMS コンテンツ「Hello World!」。
ショートメッセージのエンコード方法とプログラミング実装
以下に、純粋な英語と純粋な中国語の情報エンコード方法を紹介します。テストを通じて、送信された各テキスト メッセージの先頭部分は同じで、着信番号とテキスト メッセージの内容のみが変更されたことがわかりました。
1. 英語エンコード
テキスト メッセージの内容が「Hello World!」であると仮定して、表 2 を参照してください。デフォルトの GSM 文字セットは 7 ビット コードであり、単純に ASCII コードとして理解できます (ASCII 値は 80Hex 未満であるため、Bit8 は無視されます)。次の 7 ビット コードの最後の数ビットは に移動されます。表 2 の矢印を参照してください。なお、9行目ではシフト数が7ビットになったため、このコードの先頭に直接0が追加されています。 GSM は、すべての ASCII 文字の表示をサポートしているわけではありません。
表 2 英語エンコードの実装プロセス
以下は、英語エンコードを実装する Delphi 5 コードの一部です。
//英語形式のエンコード、s は String
function Encode1(var s:String):String; ,j, len:Integer;
t:String;
len:=Length(s);
i:=1; j:= 0;
while ibegin
if i
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7 -j)) と $ff)
else
cur:=(ord(s[i]) shr j) と
FmtStr(t,'%2.2X',[cur]); :=Result+t ;
inc(i);
//シフト数が 7 ビットに達した場合の特別な処理
j:=(j+1) mod 7;if j=0 then inc(i); end;
2. 中国語のエンコーディング
テキスト メッセージの内容が「中国語のテキスト メッセージ」であると仮定して、表 3 を参照してください。中国語のショート メッセージの実装は、?????? の中国語エンコーディングを CP936 のコード ページを使用して Unicode エンコーディングに変換するだけで済みます。
表 3 中国語エンコーディングの実装プロセス
Delphi の WideString 型変換を通じて、?????? から Unicode へのエンコーディング変換を巧みに実現できます (コード ページがオペレーティング システムに関連付けられていることに注意してください)。以下は中国語エンコードを実装する Delphi 5 コードの一部です:
// 中国語形式のエンコード、s は Unicode String
function Encode2(var s:wideString):String;
var
i,len:Integer; ;
t :String
Result:='';
len:=Length(s);
while i<=len
cur:=ord(s[i]) ;
/ /BCD 変換
FmtStr(t,'%4.4X',[cur]);
end
end; PDU形式で。英語情報の長さは 140 文字を超えないようにし、中国語情報の長さは 54 文字を超えないようにすることをお勧めします。テキストモードをサポートする携帯電話を使用して送信すると、実装が簡単になります。 「Hello World!」を送信するには、次の AT コマンドを使用します:
AT+CGMF=1
>Hello World!<^Z>