Raspberry Pi With a GSM Module

77K1817

Intro: Raspberry Pi With a GSM Module

Some time ago I wrote a few paragraphs about using RPI to monitor your property:

https://www.instructables.com/id/Home-Security-Wit...

I promised to write about using GSM "soon", which in this case has taken 5 months.

The reason I think it might be useful in that context (home security) is obvious - there are

still properties without cable internet access, e.g. that is the case with many holiday cottages in Norway where I now live. 30% of them do not even have grid access - I have been thinking about it too which will take much more time (Arduino consumes too much energy as well to propose a reasonable solution).

Today just a short tutorial about using a GSM module to connect RPI to internet via PPP, leaving the "home security" part as that would require a bit more - RPI has just one serial (?), so maybe you should use USB-to-serial converter to attach RFID reader, if you need it.

STEP 1: Wiring

I will try the A-GSM module from itbrainpower.net. That is because I have not had time to solder pins to a SIM800L. I promise I will. A-GSM is just an exaggeration for this simple task, I got this as a gift from my colleagues while I was leaving Orange Poland, I feel obliged to run it.

Ok - just follow the picture. I was worried that the Romanian producer does not suggest any TTL level shifter but I measured the voltage and it sends 3V. When you are ready with cables - press modem power switch for a second or two.

STEP 2: Checking Board-to-GSM Connection

I hope your SIM card is not PIN protected. In case it is you may check the wiring and your PIN at a time (it might not be 1234 ;-) ):

sudo apt-get install minicom

sudo minicom -D /dev/ttyAMA0 -b 115200

AT

AT+CPIN=1234

I assumed that modem works at 115200 baud. If it is not the case and you want to change it - you can download a Python script from Itbrainpower.net website (RPi_examples-v0.9-2014.09.30.tar) to set the speed, e.g.:

sudo python setSerial.py 9600 115200

Before you run it comment out all agsm.open() lines, I guess this worked fine in the past or on some other Linux versions.

As you can see on the picture - I had to power off/on the GSM module to make it accept the PIN.

STEP 3: PPP Config

The content of the step comes from a-gsm-RPI-examples-py-library-based-v1_2.tar downloaded from manufacturers site. Edit and copy-paste the content below (italic) to locations in bold.

/etc/chatscripts/gprs

ABORT BUSY
ABORT VOICE

ABORT "NO CARRIER"

ABORT "NO DIALTONE"

ABORT "NO DIAL TONE"

ABORT "NO ANSWER"

ABORT "DELAYED"

ABORT "ERROR"

ABORT "+CGATT: 0"

"" AT

TIMEOUT 12

OK ATH

OK ATE1

OK AT+CGDCONT=1,"IP","telia"

OK ATD*99#

TIMEOUT 22

CONNECT ""

You might submit your PIN here too (AT+CPIN...). 'telia' is a name of APN, you have to change it to your operators config!

/etc/ppp/peers/a-gsm

connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs -T telia"
/dev/ttyAMA0

115200

noipdefault

usepeerdns

defaultroute

persist

noauth

nocrtscts

local

Here you have to change the APN too. Be sure the speed is what you have checked earlier! That is a source of hard-to-find PPP fails. BTW - authors claim the directory is 'pears' (wrong).

STEP 4: Running PPP

To connect to the internet you just execute:

sudo pon a-gsm

The trouble might be that you have your RPI connected to the Internet already, so to be sure it works just run this before (smart of Romanians to suggest it!):

sudo route del default

Now you should have access to the Internet via the GSM network. Try to ping an address!

To shut down PPP:

sudo poff a-gsm

If unsuccessful you might need to start PPP in debug mode:

sudo pon a-gsm debug dump logfd 2 nodetach

In my case the mistakes were:

a) not setting APN

b) wrong serial speed !

c) something hanging on /dev/AMA0 - see the "Home Security" tutorial to learn how to free the port !

STEP 5: To Do

1) send images of intruders via MMS, maybe more stable than PPP (to be tested)

2) check all this with SIM800L

3) PPP, MMS and SIM800L with Orange PI

Stay tuned!

12 Comments

Hi. can anyone please guide that how we connect GPS and GSM module to the same Raspberry pi 3 board. it is confusing that raspberry has only 1 set o Rx and Tx but both GPS and GSM need 1 pair of Rx and Tx.....
appreciate your support
Great sir......my command line is getting freeze after I enter minicom....I tried picocom also but got the same problem. I m using Raspberry Pi 3B+ and GSM 900A module for sending SMS. I m doing my project.....sir please help me.
you mean you enter minicom, pressing ENTER a few times and nothing ? well, then the device is not responding or its speed is wrong. BTW - your are lucky because after 2 years I should get back to SIM800L in ... two weeks. Before that - what arguments do you use with minicom ? what do you see when you type 'ls -l /dev/???' (??? should be your device). And I do remember I had to change speed in my GSM terminal, it was not what I expected - here you have to refer to its manual.
hi can i know what software you used to run the simulation??
what simulation? :-/ maybe you mean some AT commands which I executed - that was minicom

Hi - is it possible to run the commands to connect to the internet using a python script? Thanks!

Great article. I have d-U3g and I got the tar files. Looking through them I can't find pon or poff this is preventing me from moving forward. Can you send them to me or point me in the right direction? Cheers!

They were already there, part of ppp maybe, for sure part of the distribution. Try running 'find / -name pon'

Hi BoguszJ1, thank you for sharing information. I also plan to use my Rasperry + GSM to protect a house, following you.

Hi,

Is it possible to make a setup that auto switches just like mobile? i want to see if my GSM module is connected to data and if not then the data is send via Ethernet port. this is same life in mobile where we switch between wifi and mobile data....

appreciate your support

Hey i am following your link but last command used getting error. what should i do.

i am used sim800l gsm and pi 3.

Script /usr/sbin/chat -v -f /etc/chatscripts/gprs -T connect.mobilinkworld.com finished (pid 993), status = 0xb

Connect script failed

Hard to say with status only. See into SYSLOG or change -v to -V to get errors on the console, as far as I remember chat options.