web-dev-qa-db-ja.com

PythonでGSMモデムを使用して呼び出しを行おうとしたときに「NO CARRIER」エラーを受信する

GSMモデムを使用して電話をかけたい。だから私は以下のプログラムを書いた:

import time
import serial

recipient = "+98xxxxxxxxxx"

phone = serial.Serial("COM10",  115200, timeout=5)
try:
    time.sleep(0.5)
    phone.write(b'ATZ\r')
    time.sleep(1)
    phone.write(b'ATD"'+recipient.encode() +b'"\r')
    while(1):
        print(phone.readline())
    time.sleep(0.5)
finally:
    phone.close()

しかし、実行すると、次の出力が表示されます。

>>> ================================ RESTART ================================
>>> 
b'ATZ\r\r\n'
b'OK\r\n'
b'ATDxxxxxxxxxx\r\r\n'
b'NO CARRIER\r\n'

この「NO CARRIER」エラーの意味は?

SMS正常に送信できます。


これは、SMSの送信に使用するプログラムです。

import time
import serial

recipient = "+98xxxxxxxxxx"
message = "Test"

phone = serial.Serial("COM10",  115200, timeout=5)


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)
finally:
    phone.close()
13
Abraham

エラーの原因を見つけました:

構文はATD+98xxxxxxxxxx;の後に終了文字列が続きます。数字の後にセミコロンを付けるのを忘れていました。

だから私は交換します

phone.write(b'ATD"'+recipient.encode() +b'"\r')

phone.write(b'ATD"'+recipient.encode() +b';"\r')

そして今、それは正常に動作します。


this ドキュメントの括弧に基づいて、「;」を使用すると考えましたオプションです。しかし、私は間違っていたようです。 enter image description here

22
Abraham