All I wanted to do was to get my Ardunio to send a SMS.

There are many ways to do it. People from all over the world have discovered hacks to get a mobile phone connected and sending messages.

But I found that many of the hacks were for US phones, too complicated, or too expensive.

For example, this hack looks perfect. The USB Tri-band GPRS Modem at Deals Extreme is cheap (though it was out of stock when I looked). But reading into it, it seems the build quality is poor and that the GPRS modem doesn’t come with an IMEI number. Jarrod on Hack A Day reported “… doesnt work in Australia either.”

I really like the look of the ADH8066 GSM Module. It’s not that expensive ($49.95 AUD) and looks really capable. The problem was the tiny little pins. That means I need to either get a breakout board ($19.95 USD) or an evaluation board ($49.95 USD). While $100 + delivery isn’t a huge amount, I was pretty sure I could manage to get the feature much cheaper.

I originally started this little project by looking for old GSM Nokia 5110 phones. They used to be really, really popular. Most people loved them for the little Snake 1 game and ease of SMSing. The problem I found is finding old GSM phones with a serial (RS232) connection is pretty hard in 2012. It seems most people have thrown out (or put away) their old phones with the assumption they are of little value.

I finally found an old GSM Sony Ericsson K700i. $20 AUD (including delivery) later, it was in my possession and ready for hacking.

I’d done a little bit of research on the K700i before I bought it. The wonderfully helpful pinouts.ru website shows you all you need to know about the K700i (and similar) models 1. I’d also found someone else who reckoned they’d connected the Ardiuno to a K700i. It’s always helpful if someone has gone before you. The sample code, diagrams, schematics dramatically cut down on time spent fiddling around when trying to link in new sensors/devices. The ardunio.cc forums are helpful in finding people who’ve gone before you.

So for the K700i in particular, I was interested in pins 4 and 5. They are the data to/from (rx/tx) the phone. Also, 10 for the power supply part. They’re all the pins I need to connect to the Ardunio!

This comment provides the required details for connection between Arduino and Sony Ericsson K700i

  • Pin 10 is GND
  • Pin 5 is Rx(0) serial
  • Pin 4 is Tx(1) serial

Connecting the phone (wires) 

Hooking up the phone to the Ardunio was easy. Straight into the breadboard, then into Ardunio’s digital pins 2 and 3 and GND.

<figcaption class="wp-caption-text">K700i Connection</figcaption></figure>

<figcaption class="wp-caption-text">K700i Full Project</figcaption>
Coding and communicating

There’s a bible for the way the code communicates with the phone. They’re called AT Commands. You can control all sorts of phone functions with them. I’m mostly interested in SMS and (possibly) GPRS.

SMS is good for – obviously – sending short messages. GPRS is good for interacting with things on the internet. Sending messages to Twitter, for example. Wouldn’t it be cool if the space balloon could also update the internet where it is?

One thing to keep in mind, when sending SMS from the Ardunio via the K700i is the phone only accepts “PDU mode”. This may not mean a lot to you, so here’s a quick description: everything (phone number, message, etc) must be converted into an obscure string of numbers/letters, then sent to the phone.

PDU mode is a dark art, and took a while to work out. Try to get a phone which accepts plain text rather than PDU. I’ve provided the code on BitBucket anyway, which should get your a little way if you attempt to join the Dark Lord on his PDU crusade. The code is far from perfect. In fact, it barely works. Don’t say I didn’t warn you. If you feel like fixing it up, please do and submit a Pull Request.

Demo

I edited together a quick video of the project, so you can see it in action.

 

Any questions? Leave them in the comments.

Helpful links

Code links
[1] Phones similar to the K700i are: K300i, K700, K700i, S700, S700i, F500, F500i, K500, K500i, T610, T616, T630, Z600, P900, P908, T226, T226s, T230, T238, T200, T202, T310, T312, T316, T300, T302, T306, P800, P802, T39m, T39mc, R520, R520m, R520mc, T65s, T66, T62u, T68i, T68m, T68mc, T68ie, z1010, T100, T102, T105, T106, T66, T600,R600, R600s, R600sc, A3618, T610, T628, T616, T616, T630, Z200, Z600, Z608