

The very thing that provides connectivity to your IoT devices is: a modem. Naturally the first step of entering the Internet of Things is connecting your hardware to a modem. This connection is achieved with the help of a set of commands called AT commands. In this blog post, you will find a cheat sheet of AT commands to get started with your cellular IoT solutions.
AT commands are nothing but an interface between your hardware - the micro controller of your IoT device - and the cellular modem through a serial interface. These are commands based on the 3GPP standard as well as custom commands based on the modem manufacturer. These commands mainly have four functions:
- Test
AT+<x>=?
: Checks supported services of the modem (e.g. list supported SMS modes, list supported PDP states) - Read
AT+<x>?
: Returns the settings of the modem (IMEI, firmware version) - Write
AT+<x>=<...>
: Sets the user-definable parameter values of the modem (e.g., set SMS text mode) - Execute
AT+<x>
: Reads information about the network or its status (e.g. Display name of registered network)
There are several tools that can be used to send AT commands to your cellular modules. The most common one is minicom - a text based application that runs on Linux. It supports commands over USB and UART. There are several UI based applications available as well, like TerraTerm, YAT, CuteCom depending on th OS of your device.
Let's quickly go through the most basic commands that you will need to set up a connection using your cellular modem.
- Check Communication
AT
- Get IMEI
AT+GSN
- Is SIM ready
AT+CPIN?
- Get SIM identity
AT+CIMI
,AT+CCID
- Select network - Automatic
AT+COPS=0
- Select network - Manual
AT+COPS=1
- Network Status
AT+CREG?
- Set APN
AT+CGDCONT
- Signal strength
AT+CSQ
- Send Data
AT+CGDATA
- Set SMS format
AT+CMGF
- Errors
AT+CMEE=2
* Note: Before you start sending AT commands to your modem, be sure the check the port your modem is connected to as well as the baudrate and open the minicom application accordingly.
For e.g., if your modem is connected via USB and baudrate 115200
sudo minicom -b 115200 -D /dev/ttyUSB2
If your modem is connected via UART and baudrate 115200
sudo minicom -b 115200 -D /dev/ttyS0
Check communication with the modem
AT
Response
OK
This command indicates that you are connected to the modem and can send it AT commands. The 'OK' represents that the modem has read the command and acknowledged it.
Get the IMEI of the modem
AT+GSN
Response
<IMEI of the modem >
OK
This command gives the International Mobile Equipment Identity (IMEI) of the module. This is a unique number used to identify the modem and can be used for security features like locking a SIM to a specific IMEI.
Is the SIM card ready and does SIM require a password?
Once you insert the SIM card, you can check if the SIM card properly inserted command and whether the SIM needs a PIN.
AT+CPIN?
Response
+CPIN:READY
This command is used to check whether the SIM needs a PIN. If the response is READY, you do not need a PIN and the SIM is ready to use.
SIM identity
You can identify the SIM by its IMSI or its ICCID. To get these from the modem, you can use the following commands.
AT +CIMI
Response
295050901183774 //IMSI of the SIM
OK
AT+CCID
Response
+CCID:8988303000005737285 // ICCID of the SIM
OK
Network selection - Automatic
Once you have identified the SIM, you can set it to automatically search for a network or manually search for one. To select a network automatically, you can send the following command.
AT+COPS=0
Response
OK
The '0' here indicates Automatic mode. When you select the Automatic mode, the modem scans for networks in order defined by the module manufacturer. You can also change this order. For e.g, the order can be : LTE Cat M1 > LTE Cat NB1 > GSM.
Network selection - Manual
As indicated above, you can manually scan specific networks you want to connect to. To list available networks, you can use the above command in the read mode.
AT+COPS?
Response
+COPS: 0,0,"vodafone.de EMnify",0
OK
What this response tells you is that the modem is in Automatic selection of operator mode and is connected to Vodafone Germany through EMnify.
To manually select this network, you can send the above command in the following format:
AT+COPS = <mode>,<format>,<operator>
where mode =1- Manual operator selection method, format =0- Alphanumeric representation of selected operator and operator ="vodafone.de EMnify
" - Operator name you want to select. If you set the format to '2', you can refer to the operator with its numeric identification instead of the string value
AT+COPS= 1,0,"vodafone.de"
Response
OK
Network Status
Once you select either of the modes, give it a minute and you can check the network registration status.
AT+CREG?
Response
+CREG: 0,5
OK
What this command tells you is - the SIM is registered and roaming is enabled. You can check other response codes and their meanings in the data sheets provided by your cellular module maker.
Setting the APN
Now that you know that the modem is connected to the EMnify network, you can set the APN to "em" or "emnify"
AT+CGDCONT=1,"IP","em","10.76.51.180"
Response
+CGDCONT:1,"IP","em","10.76.51.180"
OK
Here you are specifying that the packet data protocol type for the first PDP context definition is "IPv4", the APN is "em" and the target IP address is "10.76.51.180". You can set several PDP context definitions with different APN s and different target IP addresses. In fact, you can also set the target IP address by using the AT+CGPADDR
command using the same number scheme as the PDP context definitions and specify the definition you want to use while activating the PDP context. Here the PDP context is nothing but the data channel you will open to send data over the internet connection.
Signal Quality
The signal quality of the network is essential to know if you want to switch to another network or determining battery consumption (need input here). You can get the signal quality with the help of a simple command
AT+CSQ
Response
+CSQ: 16,99
OK
The response format is [RSSI(Received Signal Strength Indicator) ,BER]. Below are the possible values and explanations for the two. For context - any RSSI value lower than -80dBm is considered poor signal strength although you can still work with a -93dBm. As for BER, the lower the value, the better.
RSSI : Received Signal Strength Indicator
- 0 : -113dBm or less
- 1 : -111dBm
- 2 to 30 : -109 to -53dBm
- 31 : -51 dBm or greater
- 99 : Nor known or not detectable
BER : Channel Bit Error Rate (in percent)
- 0 : less than 0.2%
- 1 : 0.2% to 0.4%
- 2 : 0.4% to 0.8%
- 3 : 0.8% to 1.6%
- 4 : 1.6% to 3.2%
- 5 : 3.2% to 6.4%
- 6 : 6.4% to 12.8%
- 7 : more than 12.8%
- 99 : Nor known or not detectable
SMS format
To send an SMS, you need to first specify the format of the SMS. The two possible formats are 0 - PDU (Protocol Description Unit) mode and 1 - Text mode where the PDU mode sends the message in a binary format and the Text mode, as the name suggests, sends it in the text format.
To set the message format to text mode, send the following command.
AT+CMGF=1
Response
OK
Sending Data
To start sending data over the modem, you need to activate the PDP context (data session) definitions you have set up before.
AT+CGDATA= "PPP",1
Response
CONNECT
The format of this command is AT+CGDATA= L2P,cid
where L2P is the layer 2 protocol which can be "PPP", "M-RAW_IP" etc., and CId is the numeric identifier of the saved PDP context definition. By sending this command, you can activate the data channel and start sending data.
Error messages
In the previous commands, if there is an error in detecting the SIM or entering the PIN, the response you get is just the word "ERROR". To get a better error response, you need to enable the error code with numeric values or with string. So, an error in the above command will look like this
AT+CPIN?
ERROR
AT+CMEE=1 // Enable error codes with numeric values
AT+CPIN?
+CME ERROR: 11 //(U)SIM PIN required
AT+CMEE=2 //Enable error codes with string values
OK
AT+CPIN?
+CME ERROR: SIM not inserted
This can help you debug properly and make sure that you can use the SIM card successfully.
These were the basic AT-Commands to get you going. With these commands you can make sure your device is connected to the network and get the details of the network you are connected to. Hope this helps you get get started with AT commands. There are several other AT commands that you can use for specific tasks. You will find these in the datasheet of your cellular module.
Until next time, Stay Connected!

Shruti Kuber
Shruti Kuber is a Developer Advocate and Community Manager at emnify.