I've previously written about setting up a SMS gateway using a 3G modem. I had that plugged into my HTPC and honestly it just didn't look good next to the TV. I figured using a Raspberry Pi and just stash it away somewhere would be better. At the same time I was preparing to create a Magic Mirror of sorts (without the actual mirror) and I accidentally (?) stumbled across the Adafruit Fona 808 when doing my regular window shopping for Pi stuff.

After some reading up - there are a lot of great tutorials I'll link to at the end of the post - I felt that there should be something a bit easier and I found a couple of HATs designed for the Pi.

I ended up buying one from Sixfab but either of these two should work as well. (If you try one of those I'd love to hear about it!)

Sixfab GSM Shield


I own a soldering iron but prefer not to use it unless necessary so imagine my joy when I found the solderless GPIO header. While at it I also bought a nice little case. Assembling the header and case was pretty easy and the result great! Just follow this guide.

With the rig

Zero mounted in the rig

Header attached

Header attached

Case assembled

Case assembled

GSM pHAT added

and finally GSM pHAT added


Now to getting the thing to work! There's a blog post at Sixfab, but it's aimed at setting up a GRPS connection. I was just interested in sending and receiving sms with gammu which I already had installed (with postgres as backend this time).

First you need to disable the serial console.

sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service

That one worked for me. Depending on your Pi you might need to do this instead.

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service

Then remove the corresponding line in boot commandline

sudo nano /boot/cmdline.txt
# Remove "console=serial0, 115200" or "console=ttyAMA0, 115200"

Enable UART and disable Bluetooth on serial.

sudo nano /boot/config.txt
# Add these

That last bit with disabling BT did the trick for me and took a reasonable amount of googling to find out. I don't use BT but if you do I recall seeing a solution somewhere...


Reboot your Pi and to test the connection to the pHat do this

sudo nano /etc/gammurc
# Add 
device = /dev/serial0
connection = at115200

And gammu should find your device

sudo gammu --identify

You can also interact with the shield via screen

sudo screen /dev/serial0 115200

Type AT, press enter and you should get OK back. Ctrl-A, D to exit.

If everything is ok you should now be able to use gammu-smsd to send and receive SMS. First power up the shield by pressing POWER-UP for a few seconds.

sudo nano /etc/gammu-smsdrc

This is my entire config with postgres and all.

port = /dev/serial0
connection = at115200

# SMSD configuration, see gammu-smsdrc(5)
service = sql
driver = native_pgsql
host = localhost
user = smsd
password = SUPERSECRET
database = smsd
RunOnReceive = python /opt/gammu/receivesms.py

Sending SMS!

sudo service gammu-smsd restart
gammu-smsd-inject TEXT 123456 -unicode -text "Oh hai"

I've also written a small html client with an API backend for gammu that I'll (probably) publish soon you can read about here!

Reading list