以下是我用來輪詢通過串行端口連接到筆記本電腦的GSM調制解調器接收到的新消息的函數。我已經創建了一個串行對象「手機」,用於讀取和寫入數據。使用正則表達式解析字符串通過python連接到筆記本電腦的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
爲什麼打印「您已收到一條新消息!「很多次?
特別是當我還沒有收到新消息!
請幫忙。
謝謝@Martijn Pieters – Anon