尝试在 Python 中使用 GSM 调制解调器拨打电话时收到“NO CARRIER”错误

问题描述 投票:0回答:2

我想使用 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”错误是什么意思?

注意我可以成功发送短信。


这是我用来发送短信的程序:

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()
python python-3.x gsm at-command modem
2个回答
38
投票

我找到了错误的根源:

语法为

ATD+98xxxxxxxxxx;
后跟终止字符串。我忘了在数字后面加分号。

所以我更换

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

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

现在效果很好。


根据this文档中的括号,我认为使用“;”是可选的。但看来我错了。 enter image description here


0
投票

我也遇到了同样的问题,我告诉你

都是因为一个分号

如果您像我一样使用直接连接(UART、串行监视器)

使用分号

例如:ATD+91xxxxxxxxx;

这将解决无运营商问题,因为我能够发送短信、接收短信和接收电话 依然坚持,因为有信号😇

© www.soinside.com 2019 - 2024. All rights reserved.