8

コンピューターにGSMモデムを接続していますが、作成したPythonプログラムを使用して送信されたテキストメッセージを受信したいのですが、データをポーリングするための最良の手法は何でしょうか。

着信SMSを継続的にチェックする無限ループを持つプログラムを作成する必要があります。つまり、ループ内でプログラムはATコマンドを送信し、入力データを読み取ります。または、モデムには、着信データ(sms)のアプリケーションに信号を送る方法がありますか。

携帯電話が単なるGSMモデムであり、SMSが受信されると、電話がイベントを警告するか、電話ソフトウェアに着信データをポーリングする無限ループがあると想像しようとしています。

4

2 に答える 2

3

以前にも似たようなことを書いたことがあります。AT コマンドを使用して、SMS を受信するたびにモデムに通知する方法があります。

参考までに、組み込みアプリケーションでMaestro 100 GSM モデムを使用していました。

まず、モデムを適切に初期化する必要があります。私は SMS にテキスト モードを使用していましたが、別のものを使用している可能性があります。これらからあなたが望むものを選んでください。AT+CNMI が最も重要です。

AT&F0 # Restore factory defaults
ATE0  # Disable command echo
AT+CMGF=1 # Set message format to text mode
AT+CNMI=1,1,0,1,0 # Set new message indicator
AT+CPMS="SM","SM","SM" # Set preferred message storage to SIM

次に、次のようなメッセージ通知を待ちます。(通知ごとに異なる可能性があるため、インデックス番号を一致させないでください)

+CMTI: "SM",0 # Message notification with index

その通知を受け取ったら、未読の SMS を取得します。

AT+CMGL="REC UNREAD"  # Retrieve unread messages

通知を見逃す場合に備えて、おそらく 5 分ごとに投票を追加することをお勧めします。シリアル通信では、確信が持てません!

于 2009-09-14T19:14:09.457 に答える
0

SMS に関連する AT コマンド セットの多くを覚えていないことがわかりました。アンドレ・ミラーの答えは、いくつかの鐘を鳴らしているようです。とにかく、ドキュメントを非常に注意深く読む必要があります。いくつかの落とし穴があったと確信しています。

ポーリングに対する私の推奨事項は、少なくとも 5 秒ごとです。これは、切断に直面した場合の堅牢性と応答性のためです。

ステート マシンを使用して、初期化、メッセージの読み取り、および削除の間を移動しました。

于 2009-09-14T22:39:19.013 に答える