Raspberry Pi (Python): Send SMS using SIM800L

IyaSheep picture IyaSheep · Mar 15, 2018 · Viewed 9.4k times · Source
  • Raspberry Pi 3
  • Python 2.7
  • Sim800L

Hi! I am getting errors connecting to the gsm module

Here's the code I got from rhydolabz

import serial
import RPi.GPIO as GPIO     
import os, time

GPIO.setmode(GPIO.BOARD)   

# Enable Serial Communication
port = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1)

# Transmitting AT Commands to the Modem
# '\r\n' indicates the Enter key

port.write('AT'+'\r\n')
rcv = port.read(10)
print rcv
time.sleep(1)

port.write('ATE0'+'\r\n')      # Disable the Echo
rcv = port.read(10)
print rcv
time.sleep(1)

port.write('AT+CMGF=1'+'\r\n')  # Select Message format as Text mode
rcv = port.read(10)
print rcv
time.sleep(1)

port.write('AT+CNMI=2,1,0,0,0'+'\r\n')   # New SMS Message Indications
rcv = port.read(10)
print rcv
time.sleep(1)

# Sending a message to a particular Number

port.write('AT+CMGS="+6xxxxxxxxx68"'+'\r\n')
rcv = port.read(10)
print rcv
time.sleep(1)

port.write('Hello User'+'\r\n')  # Message
rcv = port.read(10)
print rcv

port.write("\x1A") # Enable to send SMS
for i in range(10):
    rcv = port.read(10)
    print rcv

Here are the errors:

OSError: [Errno 11] Resource temporarily unavailable

raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

raise SerialException('write failed: %s' % (v,))
serial.serialutil.SerialException: write failed: [Errno 5] Input/output error

Sometimes It sends

Hello User
Login incorrect
raspberrypi login:

Sometimes

>
>
> 
(100+ more '>')
Hello User

but almost always it doesn't connect and it gives Error 11

Have you experience this too? Is there a way I can wait for the gsm to connect before I proceed on sending a message?

Answer

Joaquin de Andres picture Joaquin de Andres · Sep 26, 2018

Did you disconnect the uart from the internal bluetooth and kernel console?

If you don't you will have a problem accessing the device. You need to disable the service that use it:

sudo systemctl disable hciuart

also disable kernel console on that uart eliminating

console=serial0,115200

from kernel command line (/boot/cmdline.txt).And you need to enable two overlays on the device tree (/boot/config.txt) Maybe this can help you:

dtoverlay=pi3-disable-bt 
dtoverlay=pi3-miniuart-bt

Complet solution by rasberrypi.org: https://www.raspberrypi.org/documentation/configuration/uart.md