Old Sony Ericsson phone as GSM shield, clock, display, keyboard, BT, audio, more

You can use an old Sony Ericsson phone as free or dirt cheap GSM “shield” for sending and receiving messages (turning on/off some device), sending collected data (as e-mail, SMS, MMS) to any location, receiving or initiating calls – for example if an alarm is triggered, or to listen what is going on in remote location - but also by using ordinary AT commands it is possible to set and read phone’s timer, clock, calendar, use basically any phone’s available function. This is where it gets even more fascinating…

You can use camera, keypad as input device to Arduino, audio recorder/player, some voice control (“magic word” function), Bluetooth (it is limited to sending notes, files and contacts – but it can be used in some projects). All these options require only two pins to connect to Arduino.

It is also possible to use java applications on the phone and use it for any other purpose (for instance remote BT control). You can easily develop java programs for phones the same way you program Arduino using almost the same C environment - check: http://mobile.processing.org/

Some phones have built in simple thermometer (for charging). You can use display and some ready user’s interface SonyEricsson functions to simply display data (as a note, sms, dialog “window” or graphically as “gauge”). There is also a way to use it with keyboard as input device (report key event mode), to select choice (yes/no), to set a value (gauge input function- you adjust the value by joystick and send it to Arduino, as text input - you can write text with phone’s dictionary and any available in the phone writing methods and send the whole ready text to Arduino. With some provider’s functions it can easily gain another layer of functionality for Arduino projects – for example you can very easily make car alarm which can notify by phone about triggering or any other event– but also many providers can send information about location of the phone (for example stolen car) (and send even a map where it is).

By AT-commands all the key’s presses can be emulated, including joystick and special function keys – so everything you can do with old, good SE phone – Arduino should be capable of doing as well :slight_smile:

For AT commands and how to use them search for : “Developers guidelines - AT commands
for Sony Ericsson phones”.pdf

here is one - but preferably older version from 2005-2007 is a littlie more accurate for the older phones.
http://developer.sonyericsson.com/cws/download/1/707/466/1277362028/DW-65054-dg_at_2006--10_r17a.pdf

This is the list of the Sony Ericsson phones which have Rx-Tx connection, which are very easy to connect with Arduino:

2218z,
A2618s, A2618sc, A2628s, A2628sc,
F500, F500i,
J200c, J200i, J300a, J300c, J300i,
K300a, K300c, K300i, K500c, K500i, K506c, K508i, K600, K608i, K700, K700c, K700i,
P800, P802, P900, P908, P910a, P910c, P910i,
R300d, R300LX, R300z, R310s, R310sc, R320s, R320sc, R380e, R380sc, R380s, R380WORLD, R520LX, R520m, R520mc,
S700c, S700i, S710a,
T200, T202, T20e, T20ec, T20s, T20sc, T238, T28s, T28sc, T28z, T28WORLD, T290a, T290c, T290i, T292a, T29s, T29sc, T300, T306, T310, T312, T316, T39m, T39mc, T60c, T60d, T608, T60LX, T610, T61c, T61d, T616, T618, T61LX, T61z, T628, T62u, T630, T637, T65, T68, T68i, T68ie,
V600i, V800,
Z1010, Z500a, Z502a, Z600, Z608, Z800i.

Besides that, some old Siemens and Motorola phones have serial connection too.

Check out serial pinouts and some other SE phones here:
http://www.8051projects.net/out.php?link=http://pinouts.ru/CellularPhones-P-W/erics_t28_pinout.shtml

On the other hand -phones like: D750i, K310a, K310i, K310c, K320i, K510a, K510i, K510c, K610i, K610im, K618i, K750c, K750i, K758c, K790i, K790c, K790a, K800i, M600i, M608c, P990i, S500, V630i, W710i, W710c, W712a, W850i, W950i, Z520a, Z520i, Z520c, Z525i, Z525a, Z530c, Z530i, Z550c, Z550i, Z550a, Z558i, Z558c, Z610i, Z710c, Z710i, W300i, W300c, W550c, W550i, W580, W600c, W600i, W700c, W700i, W800c, W800i, W810c, W810i, W830i, W830c, W900c, W900i, W958c, and newer have mostly implemented some newer protocol so they don’t support straight Rx-Tx connection with Arduino serial. But some phones (perhaps units produced early or something) like K750i probably can support RxTx, but I am not sure.

To connect it is best to buy phone-RS232 cable, cut off the computer plug and connect wires to Arduino this way:
Phone Tx (Transmit -pin5) connect to Arduino Rx (Receive);
Phone Rx (pin4) connect with Arduino Tx;
ground Arduino connect to ground of the phone(pin10).

It woks like this but it is probably better to use a voltage divider or resistor to lower the voltage from Arduino’s Tx to around 3V. I use 2kOhm resistor between Arduino Tx and phone Rx and it works fine for K700i.

It is also possible to connect 5V form Arduino to phone pin 11(charging) – but better don't use it for charging – only for maintaining battery voltage, for normal phone operation. This connection can also power Arduino – but I am not sure if this is the right thing to do it this way.

Remember to cut off the RS 232 plug (plug which is normally connected to computer) – there is entirely different voltage generated inside the RS232 plug – you may destroy Arduino if you connect somehow RS232 plug to Arduino (the circuit inside the plug takes power from computer’s side of RS232 to intensify and convert voltages).

If you don’t have Bluetooth both in the phone and in computer (bluetooth dongles for computers are very cheap now) – you may want to buy two RS232 cables –one use for connecting to the computer so you can examine how the phone responds to AT commands and then implement this knowledge in Arduino project. But most convenient is to use BT connection with HyperTerminal (just to see if and how commands works before you start playing with AT commands sent from microcontroller)…

There may exist USB cables for some of these phones which have RxTx too – in this case there is only USB plug but the communication takes place by Rx Tx “protocol”. If you find that cable you can use it as well (but it is not necessary to cut of the plug like for RS232 cable, because there is no voltage translation in the USB plug).

This topic relates to the other ones form the old forum:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290601471/all
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1227581530/0

There are at least three ways to send an SMS message using Sony Ericsson phone:

1.method – use AT+CMGS command (send message) like described here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1290601471/all In this method it is often necessary to convert somehow text to PDU format (some very old phones have ordinary “text” mode). You can use online converter if you want to use limited amount of predetermined messages, but if you want to send for example data from a senor - write Arduino code to convert to PDU.

  1. method – use AT+CMSS command (send message form memory) like implemented here: http://www.riccibitti.com/tinyplanet/tiny_article.htm - very easy and simple way to send predetermined message, can take one line of code in Arduino like: Serial.println(“AT+CMSS=1”); // send message which is stored in memory under number 1. It doesn’t take any resources or specialized programming skills to send message this way.

  2. method – use ATEAPP command (sign””, not”+”). By this command you can avoid PDU conversion entirely and you can send any “normal” text from Arduino – it will pop up in the phone as ready to send SMS message (MMS, e-mail, or note) – and next use button press emulation to send it – it will be automatically converted by the phone to PDU and divided to many messages if the text is very long (if phone supports this).

There is a ATEAPP certain command to send a message to the predefined phone book entry – but this command doesn’t seem to work in reality, neither on K700i, nor on W810i, K510i (last two phones doesn’t work directly with Arduino’s serial) – so key press emulation is the solution to make it finally sent. This way it takes two lines of code like that: Serial.println(“ATEAPP=0,0,\”text message\””); // make appear ready-to-send message in the phone.
Serial.println(AT+CKPD=”\”:J:J^:J:J:J\”,2,2”); //this emulates joystick’s action (2 times joystick press, one up, and 3 times press again) of going to the first phonebook entry and send (can be different sequence on different phones).

Note: Before you use "^" or "[" keys for joystick emulation you have to change to different character set by using simple command AT+CSCS. Also there is a possibility that in the meantime the phone receives a message or do some other action – and in this case if you want to sent message this way you will not start from the main menu – therefore it is good idea to initiate this entire procedure by emulating long press “<-“ key – which will bring phone back to main menu form any possible submenu. This is only appropriate to the method when phone’s interface is used (like key press emulation)– any other AT command can be send anytime, no matter what the interface is doing.

Please refer to “SE Developers guidelines” on how specifically to use AT commands.

If you send AT commands by serial (Pin0 and Pin1) – Arduino must be disconnected from the computer cable – otherwise it will interfere. You can use NewSoftSerial library to emulate additional serial connection on any Arduino pins, but I have found, that when I use last versions of NewSoftSerial (v.1.0 and v.1.1) – I can read short responses from the phone – but if I need to read stored SMS message – I can only get 63 bytes - while the message in reality is much longer. There is no problem to read it if in place of NewSoftSerial I use native Serial. For now I don’t know what causes that – any idea?

There is one more interesting capability of SE mobile phones – Sony Ericsson has „Bluetooth remote control” application (ready available in late phones like k700) and application to download and run on computer – so the phone can control computer by Bluetooth. I haven’t try this but most probably it should also work with AT commands (key press emulation).

It would be nice if somebody could write library for Arduino to communicate with newer phones or Java application for microcontroller communication on any java-capable phone – many new phones have GPS and other interesting functions…

Oh wow thanks for bringing this up. A great alternative to the very $$$ Sparkfun GSM shields. While I share your affinity for Ericsson phones, I also remember doing this a lot 'back in the day' with Nokia phones (62xx series were always cheap and available on ebay) on Linux servers over the serial port.

They also follow a standard GSM AT command set, there is a pretty good list for that here too: Site Engine General Error

I tried some times ago to make sony ericsson worksing, but without success. model tested is a T250i.

moustic:
I tried some times ago to make sony ericsson worksing, but without success. model tested is a T250i.

I suspect T250i, Z250i and Z320i also don't have the real Rx Tx. In places like here: http://www.smart-clip.com/T250i_Z250i_Z320i.png they use name "Rx Tx" - but most probably they just mean receive/transmit wires - while this is true – most evidently this is not realized by true serial protocol. This is the same plug like for K510i and W810i which I tested with no success either - all they use newer protocol - so it is much more difficult to connect this phones because you must write entirely different library to communicate with newer phones.
I bet the other end of this cable is USB. Try to find a phone with RS232 cable.

I can have a J220i, do you think it could be usable ?

Some times ago I wrote a library to encode Message under PDU format. I put it on the playground

you can find it at :
Arduino Playground - InterfacingWithHardware under the GSM/GPRS part.
it is called PduEncoder.

Hello,
@JasFasola, Thanks for the complete explanation. This post is exactly what I am looking for. In my case the phone is Motorola v3i and the connector is Mini-USB: Motorola mini-USB pinout diagram @ pinoutguide.com
Could you please tell me if I can use your posts for my case.
Thanks!

Could you please tell me if I can use your posts for my case.

No - firstly it's not a a Sony Ericsson phone and secondly it uses a USB interface which you have a very minimal chance of using.

This phone uses serial-over-USB. From the motorola developers forum:

We do not normally support the use of non-PC RS232 connections to current Motorola handsets. The only serial connection supported is serial-over-USB, where the handset is connected to a USB port on a PC, and the PC operating system assigns a virtual COM port to the USB connection for this purpose. Microsoft Windows is normally needed to meet this requirement.

For example moto4lin communicates successfully with this phone using AT commands.

So you need to use the arduino as a USB host and you need to work out how to code for a USB COM port using whatever USB host device you use.

There is a USB host shield but you'd be on your own writing the USB driver for this specific phone.

Well I found that its not needed to connect it as USB at all. http://www.expansys-usa.com/ft.aspx?k=53804

Communication (USB/RS232)
Along with the standard USB communication between a phone and a host, another UART based protocol will also be supported. This protocol will allow a phone to communicate with a CEA-936 compliant device without the expense of requiring it to be a USB Host.

Example pin:

Pin 3
D-
Used for device identification.
Acts as D- for USB mode,
UART TXD in UART mode
SPKR_OUT in audio mode
SPKR_L in stereo mode

Neat - give it a go :smiley:

anio:
Could you please tell me if I can use your posts for my case.

Hi,
I am not an expert, I am a newbie myself, so I don’t know much about other phones. Besides SE phones I connected Arduino to Siemens C55 successfully.

I suggest to buy cheap SE phone on eBay or somewhere else. You will spend just few $ (if none of your friends have it for free for you) - and immediately you will be able to start playing with it. If you prefer to spend time searching in the net for pinouts, documentations, then manufacturing connectors, finding out things for your phone - I think sometimes this can be the hard way. Especially when you find on mobile phones forums that some phone should have Rx and Tx- but it may turn out like in my case, that they just use such labels to distinguish between input and output wire (while input/output in reality may not support RS232).

You better get any SE phone from the list above and after two lines of code you can make a call, or send an SMS.

You are right. I will buy some cheap SE. Their price here is max 10$. I just accepted my Motorola as chalenge :slight_smile:

I bought a T68 SE and it works great with arduino. For serial communication I am using NewSoftSerial because the standard Serial (pins 1 and 2) is used for debugging, connected to my pc. The hard part now is to convert an SMS into PDU ...
Thanks!

Hi all! I'd like to know is it possible to send and recive data over gprs with this "mobile gsm shield" solution, I mean TCP/IP functionalities. Or just compact packets (like sms) Thank you!

sms and PDU

I've been doing sms PDU with an old Siemens A60 and a terminal emulator. I found this tool useful converting between text and PDU:

http://stud.usv.ro/~amurariu/SMS%20and%20PDU%20format.htm

But maybe I can use the PDU library - thanks moustic

JasFasola:
2. method – use AT+CMSS command (send message form memory) like implemented here: http://www.riccibitti.com/tinyplanet/tiny_article.htm - very easy and simple way to send predetermined message, can take one line of code in Arduino like: Serial.println(“AT+CMSS=1”); // send message which is stored in memory under number 1. It doesn’t take any resources or specialized programming skills to send message this way.

Hi!

I've tried using this method of sending an sms with my T20e, but had no luck.

I've successfully connected with hyperterminal via arduino to my phone. "AT" test command works (response OK), I can read and delete sms via "AT+CMGR" and "AT+CMGD" commands and I've also setup "AT+CPMS="ME","ME"" successfully.

I can even make phone calls via "ATD" command, but I simply can't get "AT+CMSS" command to work. Everytime I get the same response "ERROR".

Any ideas?

JasFasola, noticed that you linked to one of my old projects :slight_smile: