1

私はPython2.6で作業しており、携帯電話、つまりNokiaE-72がデータケーブルを介してPCに接続されているときにSMSをモバイルに送信したいと考えています。

モバイルはシリアルポートを介して接続されており、コードは正しいポートも要求します。コードにエラーはありませんが、メッセージは送信されていません。

私のコードは次のとおりです。

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()

意味的にはまったく同じですが、見た目は良くなります(IMHO)。

于 2012-04-11T06:12:42.450 に答える