Introduction: Using the Telit GE863 (GSM-GPRS Module)

About: I dropped out of art school to study artificial intelligence, but I still like making things a lot!

The Telit GE863 is a GSM-GPRS module, i.e. basically a phone with no screen or keyboard, optionally with GPS. This instructable is about how to start using it if you buy it with the interface board. You can buy the Telit module with interface board here: http://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=8445, and at 176 dollars, it is a bit pricey but might be what you need.

The documentation for the Telit itself is very detailed and dense, but the following documents provide more information than this instructable:

Telit GE863 family hardware guide
[http://www.telit.co.it/data/uploads_EN/products/80000ST10025a_AT_Commands_Reference_Guide_r2(1).pdf AT commands reference guide]
[http://www.telit.co.it/data/uploads_EN/products//Easy\%20Script\%20in\%20Python\%20_r1.pdf Python scripting for the Telit]

Step 1: Power

The Telit is happiest powered with 3.8v, but you can power it with anywhere between 3.4-4.2 volts. Should you already have a 3.7v lithium polymer battery for instance, then you could hook this up directly to VBATT to power the board.

Hardware on the Telit
To be able to check that the Telit is on and powered, it is useful to solder on the status led (STAT LED) and a resistor which will correspond to the led of your choosing. The pads available on the interface board are made for 0603 SMD packages. Both red and yellow LEDs should be ok, green LEDs would require a slightly higher voltage. To be able to turn on and reset the Telit, you need to solder on two DIP pushbuttons on either side of the status LED. You can for instance use B3F100 buttons.

https://www.instructables.com/files/deriv/F3D/KIOP/FOD7QJC6/F3DKIOPFOD7QJC6.MEDIUM.jpg

Breakout board
To be able to power the Telit with any power supply or battery you have laying around, you will need voltage regulators/rectifiers etc. To deal with this, we have a breakout board for the power supply and also for serial communication. See attached eagle files smallest.brd and .sch.

https://www.instructables.com/files/deriv/FCB/7LU0/FOD7QJC3/FCB7LU0FOD7QJC3.MEDIUM.jpg
https://www.instructables.com/files/deriv/F4X/DUMQ/FOD7QJC5/F4XDUMQFOD7QJC5.MEDIUM.jpg

Any power supply with a quarter inch jack between 3 and 20 volts will work now, you can also hook up any battery to the power connector. The power can be switched o with the chalkswitch, after which it passes through a voltage rectifier. The smaller voltage regulator (7805TV) is to power the serial with the 5 volts it wants, whereas we used a larger variable voltage regulator to provide the Telit with 3.8 volts. You could also use a smaller, cheaper, xed regulator here as well.

If you want to hook up other things like microphones, loudspeakers or anything else to the telit, you can easily modify the breakout board to accomodate that. There is a version of a board with a microphone and loudspeaker jack included here as well.

Step 2: Communication

You might be inclined to think you could hook up a USB cable to the USB port on the interface board, but that is actually the GPS line and cannot be used to communicate with/ program your board. Instead, you can use the RX/TX lines which are located on the pins labelled C103/TXD and C104/RXD (see gure, pins on the left).

For the breakout board, you can connect the wires from your MTA jack to GND, VBATT, TXD and RXD respectively, clockwise from top right. The VBATT and GND pins are all connected internally, so you only need to have the power lines connected in one of the pins. Pick however you want to insert your headers.

RX/TX over USB cable
To make the cable you want to have a TTL-232R serial converter USB cable which you really only use 3 of the wires from. The serial connector on the breakout board is the connected as follows: (empty, black, orange, yellow)

https://www.instructables.com/files/deriv/FZD/YLWN/FOD7QJC4/FZDYLWNFOD7QJC4.MEDIUM.jpg

Z-term and settings
You need some kind of serial communication terminal to talk to the telit. We used Z-term, it's freely available, you could also use minicom. The telit uses a data rate of 115200, 8 bits, no parity. Hardware handshake should be o for talking to the telit through the breakout board, if you are using the evaluation kit then hardware handshake should be on. You can set these in Z-term under Connection > Settings.

https://www.instructables.com/files/deriv/FLV/4ZDK/FOD7QJC1/FLV4ZDKFOD7QJC1.MEDIUM.jpg

Turning the board on will result in the status led blinking rapidly (once every 2s) when searching for networks and less rapidly (4s) if it has found one. When you connect the board and it is on, you should receive the message ATE1 V1 OK. It will respond to the typed command AT with OK.

Step 3: AT Commands

You can talk to the Telit by means of the Hayes command set. They can make the telit dial numbers, hang up, send text messages, check your SIM card, etc. The AT commands are standard for many mobile devices and you should be able to nd a lot of documentation on them. Some of the commands we used a lot are listed here.

An AT command followed by ? will ask what the current setting of the board is. An AT command followed by =? will give you all possible arguments for that setting.

Checking SIM, Networks
Your SIM card might need a PIN code or something similar. You can check if the pin is ok with the CPIN command. AT+CPIN should tell you if the PIN is ok, else you can set it by sending a string with the PIN number.
You can check if you are currently on any cell networks with the command AT+COPS?, which will respond with something like +COPS: 0,0,"Cingular". Here the rst 0 means that you are automatically joining a network, and the second 0 is the form in which you are connecting, in this case, alphanumeric long. You can also select a dierent network with the COPS command, AT+COPS=? will give you the available networks. If you do not have an antenna attached to your Telit, you will not be able to nd any cell networks. We used sparkfun part number CEL-08347.
Depending on where in the world you are, you might need to change the band setting. The dierent bands you can set are dened by the following parameters:
0 - GSM 900MHz + DCS 1800MHz
1 - GSM 900MHz + PCS 1900MHz (Europe)
2 - GMS 850MHz + DCS 1800MHz (USA)
3 - GMS 850MHz + PCS 1900MHz
To set the band to the US, use the command AT#BND=2.

SMS
To send a text message, you can use the AT+CMGS="+15555555555" command, where you specify the addressees phone number. By default, the Telit will be in PDU mode, you can change this by setting the message format to normal text with AT+CMGF=1. In that case, some of the commands will have to be sent using text as well.

Once you have specied the recipients phone number, there will be a prompt on which you can write your text message. To send it, press ctrl-z. The Telit should respond with OK. The Telit might also respond with a +CMS error, in which case the following codes mean the following things:

0-127 GSM 04.11 Annex E-2 values
128-255 GSM 03.40 section 9.2.3.22 values
300 Phone failure
301 SMS service of phone reserved
302 Operation not allowed
303 Operation not supported
304 Invalid PDU mode parameter
305 Invalid text mode parameter
310 SIM not inserted
311 SIM PIN necessary
312 PH-SIM PIN necessary
313 SIM failure
314 SIM busy
315 SIM wrong
320 Memory failure
321 Invalid memory index
322 Memory full
330 SMSC (message service center) address unknown
331 No network service
332 Network timeout
500 Unknown error
If the SIM is busy, then you can generally retry a few moments later. A 302 error often means you are sending commands in PDU mode whereas you are in text mode or vice versa.

Step 4: Python Scripting

The Telit has a built in Python 1.5.2 interpreter which has been slightly modied. Some ob jects have been backported from future versions of Python, such as strings. You do not have to import the string library, it is already there, you can simply use commands like line.split(","). There are some ways that you can use class structures and functions, but the Telit is very, very fussy about this. There is a windows simulation environment you can get from the Telit people, but it only seems to be semi functional.

None of the terminal output from your python programs will be printed to the terminal unless you specically route it. You can do this with the attached sout.py script. If you import it rst in all your les, all terminal output will be redirected prepended with stderr:. Not everything is necessarily an error.

Built-in libraries
The Telit has some built in Python libraries you can import. SER is for instance the interface between Python and the internal serial port, GPIO is the interface between Python and the GPIO pins, GPS for collecting GPS data and MDM for sending AT commands to the Telit. For more specic information you should check the Telit Python Easy Script reference.

An example of how the MDM library is used is in the sms.py script that lists all the text messages on your SIM card.

Uploading scripts to the board
Any scripts that you upload need to be saved in the DOS format, that is with CRLF line endings, or the Telit will not be able to parse it. In VI, you can do this with the command :set ff=dos or in the menus of many other text editors.

To upload a script, you need to know its exact size in bytes. Then the script can be uploaded with the command AT#WSCRIPT="name.py",901 where 901 is the exact size in bytes. You will receive a >> prompt which will enable the sending of text (in z-term: le > send text). The Telit should respond with OK if this worked.

All scripts that are currently on the board can be listed with AT#LSCRIPT, which will also list the compiled .pyo les, allowing you to check if your compiled libraries are there.
You specify the main script with the command AT#ESCRIPT="name.py". You can also ask what the main script is with AT#ESCRIPT?. The script will then run on boot, or you can execute it immediately with the command AT#EXECSCR. Sometimes, for reasons still unclear to us, importable libraries will not compile unless you set them as the escript rst executing them as mains will compile them, then the ob ject le is used in the future.

A note on speed and compiling
The Python interpreter on the Telit is very, very, very slow. If you break down your code into smaller
individual scripts, the compiled Python les (.pyo) will be saved and make your code run signicantly faster.

Realistically, you want your main script to be as short as possible, accessing functions from precompiled libraries. If you write replacement dummy libraries for the built-in libraries on the Telit (MDM, SER, etc.) on your computer, you can compile the Python on your computer and transfer the .pyc les (renamed to .pyo) to the Telit to save time.