Receiving "NO CARRIER" error while tring to make a call using GSM modem in Python

46,427

I found the origin of the error :

The syntax is ATD+98xxxxxxxxxx; followed by terminating string. I was forgotten to put semicolon at the end after the number.

So I replace

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

with

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

And now it works fine.


Based on the brackets in this documents, I thought that using ";" is optional. But it seems that I was wrong. enter image description here

Share:
46,427
Ebrahim Ghasemi
Author by

Ebrahim Ghasemi

Passionate Java Card programmer with +6 years of experience in different security related topics, including cryptography, web application and network penetration testing and also reverse engineering. Having strong background in network traffic analysis, deep packet inspection,networking protocols and high-performance system programming.

Updated on July 09, 2022

Comments

  • Ebrahim Ghasemi
    Ebrahim Ghasemi almost 2 years

    I want to make a call using my GSM modem. So I wrote the below program:

    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()
    

    But when I run it I receive this output:

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

    What does this "NO CARRIER" error means?

    Note that I can send SMS successfully.


    This is the program that I use to send 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()