Abr*_*ham 13 python modem gsm at-command python-3.x
我想用我的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()
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到了这个输出:
>>> ================================ RESTART ================================
>>>
b'ATZ\r\r\n'
b'OK\r\n'
b'ATDxxxxxxxxxx\r\r\n'
b'NO CARRIER\r\n'
Run Code Online (Sandbox Code Playgroud)
这个"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()
Run Code Online (Sandbox Code Playgroud)
Abr*_*ham 23
我找到了错误的起源:
语法ATD+98xxxxxxxxxx;
之后是终止字符串.我忘记在数字后面加分号.
所以我更换
phone.write(b'ATD"'+recipient.encode() +b'"\r')
Run Code Online (Sandbox Code Playgroud)
同
phone.write(b'ATD"'+recipient.encode() +b';"\r')
Run Code Online (Sandbox Code Playgroud)
现在它工作正常.
根据本文档中的括号,我认为使用";" 是可选的.但似乎我错了.