Je souhaite passer un appel à l'aide de mon modem GSM. J'ai donc écrit le programme ci-dessous:
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()
Mais quand je l'exécute, je reçois cette sortie:
>>> ================================ RESTART ================================
>>>
b'ATZ\r\r\n'
b'OK\r\n'
b'ATDxxxxxxxxxx\r\r\n'
b'NO CARRIER\r\n'
Que signifie cette erreur "NO CARRIER"?
Notez que je peux envoyer SMS avec succès.
Voici le programme que j'utilise pour envoyer des 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()
J'ai trouvé l'origine de l'erreur:
La syntaxe est ATD+98xxxxxxxxxx;
suivi d'une chaîne de terminaison. J'ai oublié de mettre un point-virgule à la fin après le numéro.
Donc je remplace
phone.write(b'ATD"'+recipient.encode() +b'"\r')
avec
phone.write(b'ATD"'+recipient.encode() +b';"\r')
Et maintenant ça marche bien.
Sur la base des crochets dans les documents this , j'ai pensé qu'en utilisant ";" est facultatif. Mais il semble que j'avais tort.