これは、シリアル ポート経由でラップトップに接続された GSM モデムが受信した新しいメッセージをポーリングするために使用している関数です。データの読み取りと書き込みに使用しているシリアルオブジェクト「電話」を作成しました。
'phone' はデータをリスト x に読み込みます。
新しいメッセージを受け取ったときの応答は次の形式です。
+CMTI: "SM",0
ここで、0 はインデックスであり、メッセージが SIM に保存されるインデックス位置を示します。次のコードは、シリアル ポートから読み書きしているデータを含むリスト x をポーリングするために使用されます。正規表現を使用して、文字列 myRegexableString に変換された x を解析し、通知を受け取ったかどうかを確認しています。
def poll(x):
myRegexableString = "".join(x)
print "Printing myRegexableString"
pprint(myRegexableString)
regex = re.compile(r'\+CMTI: "SM",(\d+)')
lst = []
for l in myRegexableString:
for m in [regex.search(l)]:
if myRegexableString:
lst.append(m)
print "You have received a new message!"
ネットワーク登録を確認する AT コマンドに上記のコードを使用したいと考えています。他のコマンド、またはそのためのコマンドを実行しているときに、新しいメッセージをポーリングする必要がありますが、この質問のために、ネットワーク登録の例を取り上げます。ポーリング機能を使用しない場合の通常の実行方法を次に示します。
AT+CREG? #command
+CREG: 0,1 #response
OK #status
これがそのコードです。
def register():
print "Checking for network registration"
phone.write(b'AT+CREG?\r')
sleep()
x=phone.read(50)
sleep()
print x
ここでポーリングを含めると、コードは次のように変わります
def register():
print "Checking for network registeration"
phone.write(b'AT+CREG?\r')
sleep()
x=phone.read(50)
poll(x)
sleep()
print x
変更されたコードから得られる出力は
Checking for network registeration
Printing myRegexableString
'AT+CREG?\r\r\n+CREG: 0,1\r\n\r\nOK\r\n'
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
AT+CREG?
+CREG: 0,1
OK
「新しいメッセージを受け取りました!」と表示されるのはなぜですか? 何度も?
特に新しいメッセージを受け取っていないとき!
助けてください。