“接收”;“无承运人”;在Python中尝试使用GSM调制解调器拨打电话时出错
我想用我的GSM调制解调器打个电话。所以我写了下面的程序:“接收”;“无承运人”;在Python中尝试使用GSM调制解调器拨打电话时出错,python,python-3.x,gsm,at-command,modem,Python,Python 3.x,Gsm,At Command,Modem,我想用我的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() +
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'
这个“无承运人”错误是什么意思?
请注意,我可以成功发送短信
这是我用来发送短信的程序:
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()
我找到了错误的根源: 语法为
ATD+98xxxxxxxxx代码>后跟终止字符串。我忘了在数字后面加分号
所以我换了
phone.write(b'ATD"'+recipient.encode() +b'"\r')
与
现在它工作得很好
基于文档中的括号,我认为使用“;”是可选的。但似乎我错了。
您可以发布您的短信发送代码吗?我很确定我知道这是什么happening@tristan我更新了问题。我个人会使用:phone.write(b'ATD“%s”\r“%recipient.encode())
更清晰,更紧凑。为了分号的完整性:ATD
命令有一个L
修饰符,使调制解调器拨最后一个拨出的号码。因此,如果您首先使用ATD1234
启动一个数据呼叫,那么您可以在该呼叫结束后,使用ATDL
为同一号码设置一个新的数据呼叫。这里不太明显的问题是语音通话。如果您首先使用ATD1234设置语音通话
然后只给出ATDL
将设置对号码1234的数据呼叫,因此调制解调器只重用号码,而不重用呼叫类型。如果你想重复语音通话,你必须给出ATDL代码>结尾用分号。@hlovdal谢谢你亲爱的朋友。请问语音电话和数据电话有什么区别?我是否也可以使用拨号调制解调器发起数据呼叫,或者仅用于GSM调制解调器?您好,我的命令ATD+39*********;“无载波”错误。SIM卡已解锁(AT+CPIN?返回就绪),信号质量正常(AT+CSQ返回9,3),并且已正确注册到网络(AT+COPS?返回0,0,“沃达丰It”,2)。有没有解决这个问题的建议?@aldo85ita我也有同样的错误。你找到答案了吗?
phone.write(b'ATD"'+recipient.encode() +b';"\r')