这是用python编写的代码片段,用于通过usb调制解调器接收短信。当我运行程序时,我得到的是状态消息“OK”。但是没有别的。我如何解决问题以打印我收到的消息?
import serial
class HuaweiModem(object):
def __init__(self):
self.open()
def open(self):
self.ser = serial.Serial('/dev/ttyUSB_utps_modem', 115200, timeout=1)
self.SendCommand('ATZ\r')
self.SendCommand('AT+CMGF=1\r')
def SendCommand(self,command, getline=True):
self.ser.write(command)
data = ''
if getline:
data=self.ReadLine()
return data
def ReadLine(self):
data = self.ser.readline()
print data
return data
def GetAllSMS(self):
self.ser.flushInput()
self.ser.flushOutput()
command = 'AT+CMGL="all"\r'
print self.SendCommand(command,getline=False)
self.ser.timeout = 2
data = self.ser.readline()
print data
while data !='':
data = self.ser.readline()
if data.find('+cmgl')>0:
print data
h = HuaweiModem()
h.GetAllSMS()
答案 0 :(得分:0)
在GetAllSMS中我注意到两件事:
1)您正在使用self.ser.readline
而不是self.Readline
因此GetAllSMS在收到OK最终响应之前不会尝试打印任何内容(第一个响应行除外),此时{{1永远不会匹配。
这只是问题吗?
2)data.find('+cmgl')>0
会像写print self.SendCommand(command,getline=False)
那样调用函数吗? (刚检查,因为我自己不写python)
无论如何,你应该重新修改你的AT解析。
self.SendCommand(command,getline=False)
这里的def SendCommand(self,command, getline=True):
参数不是一个很好的抽象。省略从SendCommand函数读取响应。您应该实现对调制解调器返回的响应的正确解析,并处理外部响应。在一般情况下像
getline
对于没有任何显式处理响应的命令,您可以实现执行上述操作的SendCommandAndWaitForFinalResponse函数。 有关IsFinalResult函数的详细信息,请参阅this答案。
答案 1 :(得分:0)
您遇到问题的地方在GetAllSMS功能中。现在用你的替换我的GeTALLSMS功能,看看会发生什么
def GetAllSMS(self):
self.ser.flushInput()
self.ser.flushOutput()
command = 'AT+CMGL="all"\r' #to get all messages both read and unread
print self.SendCommand(command,getline=False)
while 1:
self.ser.timeout = 2
data = self.ser.readline()
print data
或者
def GetAllSMS(self):
self.ser.flushInput()
self.ser.flushOutput()
command = 'AT+CMGL="all"\r' #to get all messages both read and unread
print self.SendCommand(command,getline=False)
self.ser.timeout = 2
data = self.ser.readall() #you can also u read(10000000)
print data
那就是......