Python通过AT命令读取短信

3

我已经完成了99%的脚本,但遇到了一个问题。

我正在尝试在Python中显示从GSM调制解调器接收到的文本消息。

到目前为止,我可以读取到一条短信已经到来,但无法显示消息内容。

我知道self.ser.readlines()会返回一个列表。

import serial
import time
class TextMessage:
    def connectPhone(self):
        self.ser = serial.Serial('COM14', 460800, timeout=5) #for mine this was ttyUSB0 but could be ttyUSB1 etc. good idea to runs ls usb and find out that way
        time.sleep(1)

    def read(self):
        self.ser.write('ATZ\r')
        time.sleep(1)
        self.ser.write('AT+CMGF=1\r')# put in textmode
        time.sleep(1)
        self.ser.write('''AT+CMGL="ALL"''' + '''\r''') #fetch all sms's
        read = self.ser.readlines()
        for msg in read:
         if "+CMGL" in msg: #+CMGL looks for all SMS messages
          print msg 

    def disconnectPhone(self):
        self.ser.close()

sms = TextMessage()
sms.connectPhone()
sms.read()
sms.disconnectPhone()
raw_input("Press anykey to exit")

这里是输出

AT+CMGL="ALL"
+CMGL: 0,"REC READ","+61xxxxxxxxx",,"16/04/30,19:53:38+38"

+CMGL: 1,"REC READ","+61xxxxxxxxx",,"16/05/02,14:47:53+38"

+CMGL: 2,"REC READ","+61xxxxxxxxx",,"16/05/02,21:27:58+38"

My desired output would be

+CMGL: 0,"REC READ","+61xxxxxxxxx",,"16/04/30,19:53:38+38"

Test back

+CMGL: 1,"REC READ","+61xxxxxxxxx",,"16/05/02,14:47:53+38"

Im a message

+CMGL: 2,"REC READ","+61xxxxxxxxx",,"16/05/02,21:27:58+38"

TEST TEST TEST

有人可以帮忙吗?

去掉if后的输出结果:

ATZ

OK

AT+CMGF=1

Ok


AT+GCML="ALL"

+CMGL: 0,"REC READ","+61xxxxxxxxx",,"16/04/30,19:53:38+38" 
Test back
+CMGL: 1,"REC READ","+61xxxxxxxxx",,"16/05/02,14:47:53+38" 
Im a message 
+CMGL: 2,"REC READ","+61xxxxxxxxx",,"16/05/02,21:27:58+38"
TEST TEST TEST


OK

1
你确定消息正文中有 +CMGL 这个词吗?因为你限制了只打印包含这个词的行(请删除 if "+CMGL" in msg 这一行并展示新的输出结果)。 - EbraHim
1个回答

0

希望这能有所帮助

#!/usr/bin/env python2.7

import serial
import time
class TextMessage:
    def connectPhone(self):
        self.ser = serial.Serial('/dev/ttyUSB2', 9600, timeout=5) #for mine this was ttyUSB0 but could be ttyUSB1 etc. good idea to runs ls usb and find out that way
        time.sleep(1)

    def read(self):
        self.ser.write('ATZ\r')
        time.sleep(1)
        self.ser.write('AT+CMGF=1\r')# put in textmode
        time.sleep(1)
        self.ser.write('''AT+CMGL="ALL"''' + '''\r''') #fetch all sms's
        read = self.ser.readlines()
        i=0
        for msg in read:
         if "+CMGL" in msg: #+CMGL looks for all SMS messages
          bvb = 'AT+CMGR={}'.format(str(i)) + '\r'
          self.ser.write(bvb) #fetch all sms's
          ead = self.ser.readlines()
          for x in ead:
            print (x)
            print (i)
          i=i+1

    def disconnectPhone(self):
        self.ser.close()

sms = TextMessage()
sms.connectPhone()
sms.read()
sms.disconnectPhone()
raw_input("Press anykey to exit")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接