You can readily purchase stand-alone GSM/GPRS modules that provide cellular network access for computer applications without the involvement of any traditional cell phone. This post briefly discussed these modules and puts forward by little tool for debugging or evaluating them.
I was looking at using such a module to let one of our robot vehicles literally phone home if it becomes lost. Several such modules are available, either as stand-alone cellular modems, or with additional computing integrated in the unit. One of the most full features is the Telit GM682-GPS that combines a cellular modem with GPRS (Internet access including a TCP stack), a GPS receiver, a microprocessor, and an embedded Python interpreter (this device also has many variants like the GM682-QUAD). Unfortunately, the GM682-GPS seems to have become hard to find.
These modules seem to almost universally use a protocol derived from the very simple one developed by the Hayes Microcomputer Products company for analog telephone modems, back in the 1980's. This "Hayes protocol" uses a set of short commands that each start with AT to control the modem. In fact, even in iPhone uses a variant this protocol to talk to its internal modem.
Unfortunately, although the generic command set for various modem devices follows a common template, each manufacturer is free to add extra commands or implement only a subset of the common core. As a result, each GSP modem I looked at really needed a distinct set of commands to work best.
Another annoying issue is that many of these models are GSM/GPRS only. Phone services and modems about that claim to be GPRS/3G/UMTS/HSDPA, as well as 3G, 4G, LTE and more alphabet soup, but these terms are often used imprecisely and inaccurately and, in fact, it's very hard to be sure if a company that supports HSDPA actually supports the simpler older 2G GSM protocol as well (e.g. Canada's Telus supports HSDPA but not GSM).
Alternatives and issues
The three I think are the best contenders for use in our systems as the Telit GM682-QUAD, the AHD ADH8066 and the LinkSprite SM5100B. These all do GSM 850/EGSM 900/DCS 1800/PCS 1900 and can send SMS messages, do GSM/GPRS, TCP/IP and voice.
For use in embedded systems, it should be noted that the power use by these modules can shoot up to a heft 2 Watts when data is being transmitted. The SM5100B, for example, can run just off powered only off a USB cable until to attach a good quality multi-band antenna, and the it will probably just shut down as it attempt to actually register on the network.
Importantly, the baud rate might need to be specified correctly; common values are 9600 and 115200. Also, the radio band to be used is critical and on at least one unit can only be set using a command that is not properly documented! Testing and adjusting these features was a bit tedious.
My program for evaluating a module: gregs-gsm-test.py
In attempting to evaluate these units, I also found many users on the net have trouble configuring them initially. The first time I touched one, it took a while before I figured out which sequences of commands was useful, and how to evaluate the unit. As a result, I created a small Python program (gregs-gsm-test.py) that uses the somewhat standard command vocabulary to determine the baud rate for a module, check out that it is working, and examine a few features.
In it's current state this program is overkill for just testing my modules, but it also
should be useful to others. New versions can be found here named
gregs-gsm-test.py and (maybe) updated occasionally.
The version number of the most recently released version can be found via this link.
Typical program output
python gregs-gsm-test.py -
2.2 Copyright Gregory Dudek (c) 2012.
gregs-gsm-test.py using /dev/tty.usbserial-A10137IB
Seek device ID (being thorough, so it will take a few seconds)
Spreadtrum Communication CO.,Ltd SM5100B-D
SIM card status READY
Signal strength (RSSI): 14
Setting message format for text style.
Network registration status
Registration status: registered, home network
Currently selected operator:
REPLY: ['+COPS: 0,2,302720', '', 'OK']
Phone number stored on SIM:
REPLY: ['35...deleted...5', '', 'OK']
International Mobile Subscriber Identity (IMSI) of SIM card:
REPLY: ['+CIMI: "30...deleted...9"', '', 'OK']
Mobile Subscription Identification Number: 50...deleted
REPLY: ['+CCID: "89...deleted ...49"', '', 'OK']