1

我在 Python 2.6 中工作,我想在我的手机(即诺基亚 E-72)通过数据线连接到 PC 时向手机发送短信。

手机通过串口连接,代码也提示正确的端口,代码没有错误,但仍然没有发送消息。

我的代码如下:

import serial
import time
phone = serial.Serial()
phone.baudrate = 38400
phone.bytesize = 8
phone.stopbits = 1
phone.xonxoff = 0
phone.rtscts = 0
phone.timeout = 0
phone.port = 4 #try different ports here, if this doesn't work.
phone.parity=serial.PARITY_NONE
phone.open()
print phone.portstr
recipient = "+923219409998"
message = "We did it!"
try:
    time.sleep(0.5)
    phone.write(b'ATZ\r')
    time.sleep(0.5)
    phone.write(b'AT+CMGF=1\r')
    time.sleep(0.5)
    phone.write(b'AT+CMGS="' + recipient.encode() + b'"\r')
    time.sleep(0.5)
    phone.write(message.encode() + b"\r")
    time.sleep(0.5)
    phone.write(bytes([26]))
    time.sleep(0.5)
    phone.readall()
finally:
    phone.close()
4

1 回答 1

0

您是否尝试将连接参数作为参数Serial()而不是稍后添加?通常,连接会立即打开,我不确定延迟open()是否有效......

所以

  1. 尝试类似的东西

    phone = serial.Serial(
        baudrate=38400,
        bytesize=8,
        stopbits=1,
        xonxoff=0,
        rtscts=0,
        timeout=0,
        port=4, #try different ports here, if this doesn't work.
        parity=serial.PARITY_NONE,
    )
    print phone.portstr
    

    否则将使用默认参数建立连接,这可能不是您想要的。

    如果还是不行,

  2. 尝试使用真实端口设备字符串 ( "COM5", "/dev/ttyS5") 更改端口号,也许

  3. 甚至解析电话的答案。为此,您应该在连接参数中定义超时和/或将读取限制为phone.inWaiting().


此外(但这只是风格问题),取决于您使用的 Python 版本,使用起来可能会更整洁

import contextlib
with contextlib.closing(phone):
    <do stuff with phone>

代替

try:
    <do stuff with phone>
finally:
    phone.close()

它在语义上完全一样,但看起来更好(恕我直言)。

于 2012-04-11T06:12:42.450 回答