検索
ホームページバックエンド開発PHPチュートリアルPHP はシリアル ポート経由でテキスト メッセージを送信します

PHP はシリアル ポートを介してテキスト メッセージを送信します

技術の進歩により、テキスト メッセージの送受信の分野では、ブロック モード、AT コマンドに基づくテキスト モード、および PDU モードの 3 つのモードが生み出されました。 ATコマンドに基づいて動作します。このうち、TEXT MODE は比較的シンプルで、多くの Nokia 携帯電話がこのモードをサポートしています。ほとんどの Siemens 携帯電話は PDU モードのみをサポートします。 PDU モードは、テキスト メッセージを送受信する方法であり、テキスト メッセージのテキストは 16 進数でエンコードされて送信されます。現在、PDU が BLOCK MODE に取って代わりました。

SMS は Etsi によって開発された仕様 (GSM 03.40 および GSM 03.38) です。 7 ビット エンコードを使用すると最大 160 文字を送信できますが、8 ビット エンコードでは最大 140 文字を送信できますが、16 ビット エンコードを使用すると最大 140 文字を送信できます。最大 70 文字。ほとんどの携帯電話で表示できる Unicode (UCS2) テキスト情報を表示するために使用されます。

今日説明するのは PDU MODE、UCS2 エンコーディングです。これは、英語、中国語に関係なく、最大 70 文字を送信できることを意味します。
「こんにちは」というメッセージを送信するとします。送信する前に、携帯電話の SIM カードが配置されている SMS センター番号を知っておく必要があります。たとえば、China Mobile の SMS センター番号:

受信した携帯電話番号: 13638197275
杭州 SMS センター番号: 13800571500
SMS の内容: こんにちは このテキスト メッセージを送信すると、エンコードが実行された後、携帯電話は実行されません。

08916831805F011000D916831872F50008F60597d 説明このコード文字列:
08
– SMS センター番号の長さを指します。つまり、(91) (683180501705F0) を 2 で割った長さ、つまり 08 = (2 14) )/ 2 91
– SMS センター番号のタイプを指します。 91 は、TON/NPI が International/E.164 標準に準拠していることを意味します。これは、数値の前に「 」記号を追加する必要があることを意味しますが、91 が最も一般的に使用されます。 683180501705F0
- SMS センター番号。位置に若干の処理が行われているため、実際の数値は 8613800571500 になります (文字 F は偶数の長さを補うために追加された文字です)。 11
- ファイルヘッダーバイト 00
- メッセージタイプ (TP-Message-Reference) 0D
- 着信番号の長さ 91
- 着信番号タイプ 実際、中国ではこれらのデータは変更されないため、実際の処理では通常 11000D91 をプログラムに書き込みます。

683136187972F5

- 着信番号はシフトされており、実際の番号は「8613638197275」です。 上記 (

00

) (0D) (91) (683136187972F5) は、テキスト メッセージ全体の 2 番目の部分を構成します。コピーの宛先アドレス (TP-Destination-Address)。 続行...

00
-プロトコル識別 TP-PID、ここでは通常 00 08
-データ エンコーディング スキーム TP- DCS (TP-Data-Coding-Scheme)、前述の USC2 (16 ビット) データ エンコーディングを使用 00
- 有効期間 TP-VP (TP-Valid-Period) 04
-Length TP-UDL (TP-User-Data-Length)、メッセージ長/2 の 16 進数 04 です。 4F60597D これがテキスト メッセージの内容です。実際の内容は次のとおりです: "Hello"
上記の状況に基づいて、SMS エンコード用のプログラム スクリプトを作成できます。

1. SMS センター番号の処理:

1. SMS センター番号「8613800571500」から番号を削除し、長さが偶数であるかどうかを確認します。そうでない場合は、F

=> を追加します。最後に「8613800571500F」
2. 奇数桁と偶数桁を入れ替えます。
=>「683108501705F0」
3. SMS センター番号の前に文字 91 を追加します。
=>「91683108501705F0」
4. 長さを計算し、結果を除算します。 2. 2 桁の 16 進数文字列、16 / 2 = 8 => “08″
=> “0891683108501705F0″

2. 携帯電話番号の処理:

1.携帯電話番号 8613638197275 から番号を削除し、長さが偶数であるかどうかを確認します。そうでない場合は、最後に F

=> "8613638197275F"
を追加します。携帯電話番号。
=>「683136187972F5」

3. ショートメッセージ処理:

1. 文字列を Unicode コードに変換します。

「Hello」の Unicode コードは 4F60597D
2. 分割します。長さを 2 倍し、2 桁の 16 進数を保持します。つまり、4F60597D = 8/ 2 => “04”、
=> “044F60597D”

4. 組み合わせ
1. 携帯電話番号の前に文字列 11000D91 を追加します (1100: 固定、0D: 携帯電話番号の長さ (+ 記号を除く、16 進数で表現)、91: 携帯電話への送信値は 91、PHS への送信値は 81)、
つまり 11000D91 683136187972F5
=> 11000D91683136187972F5
2. 携帯電話番号の後に 000800 と内容を追加します。先ほどのテキスト メッセージを書き留めてください。 000800
つまり、11000D91683136187972F5 000800 044F60597D
=> >3. メッセージ全体の長さを 2 で割って、2 桁の 10 の基数にフォーマットします。
は 11000D91683136187972F5000800044F60597D =>38 ビット/2 => 19

5 ですので、送信される内容は

AT CMGF=0 です。モード PDU

OK
AT CMGS=19 "番号を入力する必要があります)、

ここで、xxx は市内電話の市外局番です。

--- 電話の市外局番が 3 桁の地域の場合:

xxx を電話の市外局番に置き換えてください。
例: 深センの電話市外局番は 755、
    <?php      // Requirement dio, use cmd install: pecl install dio      set_time_limit(0);            // Windows use COM1:      $fd=dio_open('/dev/ttyS0', O_RDWR);      if(!$fd)      {          die("打开串口ttyS0失败");      }            // dio_tcsetattr() only Linux       // Windows 使用 exec('mode COM1: baud=9600 data=8 stop=1 parity=n xon=on');      dio_tcsetattr($fd, array(        'baud' => 9600,        'bits' => 8,        'stop'  => 1,        'parity' => 0      ));            //$ff=dio_stat($fd);      //print_r($ff);      //echo "GSM AT is start on ttyS0\n";            //短信中心号码      $smsc = "8613800571500";      $invert_smsc = invertNumbers($smsc); // 转换短信中心号码      $inter = chr(13); // 回车字符            $ctrlz = chr(26); // ctrl+z            // 发送信息      $text          = '你好';      $send_to = '8613638197275';      $pdu_phone  = hex2str(utf82unicode($text));      $pdu_phone  = sprintf("%02X", strlen($pdu_phone)/2) . $pdu_phone;      $pdu_phone  = '11000D91' . invertNumbers($send_to) . '000800' . $pdu_phone;      $atcmd      = 'AT+CMGF=0' . $inter;      @dio_write($fd, $atcmd);      $atcmd      = 'AT+CMGS=' . sprintf("%d", strlen($pdu_phone)/2) . $inter;      @dio_write($fd, $atcmd);      $pdu_addr   = '0891' . invertNumbers($smsc);      $pdu_all    = $pdu_addr . $pdu_phone . $ctrlz . $inter;      @dio_write($fd, $pdu_all);      dio_close($fd);            // 我的是utf-8编码       function utf82unicode($str)        {          return iconv("utf-8", "UCS-2BE", $str);      }             function hex2str($hexstring)        {          $str = '';          for($i = 0, $len = strlen($hexstring); $i < $len; $i++)          {              $str .= sprintf("%02X", ord(substr($hexstring, $i, 1)));          }          return $str;      }             function invertNumbers($msisdn)        {          $len = strlen($msisdn);          if ( 0 != fmod($len, 2) )           {              $msisdn .= "F";              $len = $len + 1;          }                 for ($i=0; $i<$len; $i+=2)           {              $t = $msisdn[$i];              $msisdn[$i] = $msisdn[$i+1];              $msisdn[$i+1] = $t;          }          return $msisdn;      }             ?>  
チャイナ モバイルの SMS センター番号は 8613800755500

--- 電話の市外局番が 2 桁の地域:

xxxを3桁に置き換える場合は、市外局番の後に「0」を付けてください。

例: 北京の電話市外局番は 10、チャイナ モバイルのショート メッセージ センター番号は 8613800100500

現在、チャイナ ユニコム 165 ネットワークは全国で運用を開始しています。

SMS サービスを使用する前に、SMS センターのサービス番号を設定する必要があります:

北京 8613010112500

上海 8613010314500

深セン 8613010888500

山東省 8613010171500

江蘇省 8613010341500

浙江省 8613010360500

福建省 8613010380500

四川省 8613010811500

重慶 8613010831500

海南省 8613010501500

黒龍江省 8613010980500

吉林省 8613010911500

天津 8613010130500

河北省 86 13010180500

内モンゴル自治区 8613010950500

山西省8613010701500

安徽省 8613010305500

0796500

貴州省 8613010788500

雲南省 8613010868500

湖南省 8613010731500

湖北省 8613010710500

広東省 8613010200500

広西チワン族自治区 86130105915 00

河南省 8613010761500

江西省 8613010720500

遼寧省 8613010240500

付録 2

: 一般的に使用される AT コマンド:

AT CSMS ショート メッセージ サービスの選択

AT CPMS SMS メモリの選択

AT CMGF SMS フォーマットの選択

AT CSCA SMS センター アドレス

AT CNMI 新しく受信した SMS を表示

AT CMGR SMS メッセージの読み取り

AT CMGS SMS メッセージの送信

AT CMGL SIM カード内の SMS メッセージをリストします

AT CMSS SIM メモリから SMS メッセージを送信します

AT CMGW 送信ショート メッセージを SIM メモリに書き込みます

AT CMGD ショート メッセージを削除しますSIM メモリ内のメッセージ

AT CSCB が携帯ブロードキャスト メッセージを選択します

付録 3: ショート メッセージの受信

ショート メッセージの受信メッセージは基本的に SIM またはキャッシュから情報を読み取ります。これは主に、AT CMGR と AT CMG

L の 2 つの命令を使用して行われます。無線モジュールのメーカーが異なると、AT コマンド セット

の解釈コードと応答メッセージが異なるため、最初に次のようにする必要があります。モデムとの通信が確立できるかどうかを確認します。通常は AT コマンドを使用してこの確認を完了し、正しい応答を受け取った後、AT CM

GF コマンドを使用します。モデムは、AT コマンドを使用して読み取り機能を完了します。

通常、AT CMGL は、MODEM の RING データを受信するときに、リアルタイム情報を読み取るために使用されます。以下は、H6221-W を使用した SMS 受信の例であり、PDU モードの適用を示しています。

操作手順は以下の通りです({ }はコメント):

送信:AT

応答:OK {接続確立}

送信:AT CMGF =0 {PDU 形式を選択}

回答: OK {PDU 形式の選択を許可}

送信: AT CMGL=2 {既存のテキスト メッセージをリストする}

回答: CMGL: 1、2、、24 {1 はメッセージ数を表し、2 は未送信メッセージを表し、24 は合計メッセージ容量を表します}

0D71683108370105F004000D81683179133208F10000026080410033802632184C

F682D95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608

OK

上記の PDU 形式の 16 進文字列のセットには、ショート メッセージの内容だけでなく、送信者の番号とショート メッセージ センターも含まれています

番号、SMS送信時間など。

メッセージの内容は以下で分析されます:

0D: 短いメッセージ センター アドレス (番号) 長さ。

91: SMS センター番号タイプ、91 は TON/NPI です。 TON/NPI は International/E.164 標準に準拠しています。

は、数値の前に「 」記号を追加する必要があることを意味します。さらに、他の値も使用できますが、91 が最も一般的に使用されます。

683108370105F0: SMSC テキスト メッセージに使用されるサービス センターの番号は 13807310500 です。 16 を通過します

上位ニブルと下位ニブルはバイト単位で転置され、数値は奇数に F を加えたものとなり、16 進バイトを形成します。

04: PDU タイプ、ファイルヘッダーバイト。

0B: 発信番号の長さ。

81: 発信番号の種類。

3179133208F1:0A 発信者番号も処理されており、実際の番号は 13973123801 です。

00: PID、プロトコル識別子。

00: DCS ショート メッセージのエンコード タイプは GSM デフォルト アルファベットで、8 ビット

16 進コード (オクテット) を形成するためにシフトされる 7 ビット ASCII コードで構成されます。表 2 に示します。

1 進数 B0 A6 A5 A4 A3 A2 A1 A0

2 進数 C1 C0 B6 B5 B4 B3 B2 B1

3 進数 D2 D1 D0 C6 C5 C4 C3 C2

4 進数 E3 E2 E1 E0 D6 D5 D4 D3

5 進数 F4 F3 F2 F1 F0 E6 E5 E4

6 進数 G5 G4 G3 G2 G1 G0 F6 F5

6 進数 H6 H5 H4 H3 H2 H1 H0 G6

02608041003380: SCTS SMS 送信時刻、02/06/08/14:00:33.08。

26: UDL は 8 ビット コード (オクテット) の短いメッセージ バイト長を処理しました。これはメッセージの ASCII コード長よりも小さいです。

32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A0245106

8B1983492608: UD エンコードされた PDU データ、SMS コンテンツ "2002/06/08/ 13:48ID102OKID103

OK ID201FAIL」。

1FCraftsman_Gao
無料テキストメッセージ?
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン