0

我用一个简单的方法创建了一个简单的类来向一个号码发送短信:

class SIM800L:
    def __init__(self, port):
        self.port = port
        self.com = serial.Serial(self.port, baudrate = 9600, timeout = 0.5)


    def send_serial_command(self, msg):

        self.com.write(msg.encode())
        print(self.com.readlines())
        

    def send_sms(self, msg, number):

            #set to text mode
            self.send_serial_command("AT+CMGF=1\r\n") 

            #set the phone number
            self.send_serial_command(f'AT+CMGS="{number}"\r\n') 

            #sms body
            self.send_serial_command(msg) 

            #sending char 26 is like hitting 'send'
            self.send_serial_command(chr(26)) 

            #wait just incase
            time.sleep(1) 

这适用于方法的单次调用send_sms()以及当我在循环中将短信发送到相同的号码时。但是,一旦我用列表替换 1 个电话号码并执行以下操作,一切都会出错:

sim800l = SIM800L("/dev/ttyUSB0")
numbers = ["+44XXXXXXXXXX", "+44VVVVVVVVVV"]

for n in numbers:
    sim800l.send_sms("Hello" n)

它可以很好地发送到第一个数字,然后当为第二个数字调用该方法时,感觉就像它插入 at 命令作为 msg 的一部分并保存在一些“缓冲区”中(我可能不理解发生了什么正确所以描绘我看到它的方式),然后当循环回到第一个循环时,它再次发送它就好了。我说它将它保存在“缓冲区”中的原因是,如果我将其设置为仅发送到第二个数字,那么到达该数字的下一个 sms 会将这些 AT 命令附加到 msg 的开头。

我怀疑我在 send_sms() 方法的末尾遗漏了一些命令,但在互联网上找不到任何答案。

我尝试过的事情:

  • 添加\r\n到号码
  • 将超时时间增加到 5s
  • 关闭和重新打开方法调用之间的串行连接

有任何想法吗?

先感谢您!

4

0 回答 0