KEMBAR78
AT COMMAND SET FOR SENDING DATA VIA TCP USING SIM900 | PDF
AT COMMAND SET FOR SENDING DATA
VIA TCP USING SIM900GSM/GPRS
MODULE
Command: AT
Response: OK
Notes: This command typically the first command sent to the MODEM. It is used to test the
communication between the Two devices.
Command: AT+CREG?
Success Result: +CREG=1,1
OK
Notes: This means the SIM is ready and has connected to the network.
Command: AT+CGATT?
Response: +CGATT: 1
Notes: Check if the SIM has Internet access.
Command: AT+CIPSTATUS
Response : OK
STATE: IP INITIAL
Notes: Query the IP settings.
Command: AT+CIPMUX=0
Response: OK
Notes: Configure modem to make a single port open for connections.
Command: AT+CSTT="web.digiceljamaica.com","",""
Response: OK
Notes: Connect to Internet (Parameters are as follows; "APN","USERNAME","PASSWORD" Note
that both the Username and Password are blank in the above instance. (BALNK HERE)
Command: AT+CIICR
Response: OK
Notes: Bring up wireless network. Ensure that the modem has a SIM with credit and/or has a
data plan activated.
Command: AT+CIPSTART="TCP","104.237.143.204","80"
Response: OK
CONNECT OK
Notes: Make a TCP Connection to the server at 104.237.143 on Port 80, the Default TCP and
HTTP port.
Command: AT+CIPSEND
Response: >
Notes: This command allows you to make request of the server. You enter your request after
the prompt (>). Commands may either be GET, PUT or POST. Each command has a specific manner in
which the command is to be written. In the Example below. A GET request is made to the server. The
GET REQUEST can be used to ask for pages, call php scripts or pass data to the server. The GET REQUEST
uses the following Format:
GET /page_you_want_to_request.html HTTP/1.1
Host: 124.456.798:80
Connection: keep-alive
<Empty Line...just press Enter>
PRESS Ctrl+Z or type "#026", The Hex value for ASCII 0x1A. In an embedded environment we could just
send (0x1A) serially.
EXAMPLE:
Command: AT+CIPSEND
Response: >
TYPE: GET /page_on_server.php HTTP/1.1
Host: 104.237.143.204:80
Connection: keep-alive
PRESS CTRL+Z
Response: SEND OK
HTTP/1.1 200 OK
Date: Wed, 15 Apr 2015 23:14:53 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.36-0+deb7u3
Vary: Accept-Encoding
Content-Length: 60
Keep-Alive: timeout=3600, max=10
Connection: Keep-Alive
Content-Type: text/html
19Connection Successful!Connection to database secured!
Command: AT+CIPCLOSE
Response: CLOSE OK
Notes: Once the response is received, close the connection.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: Close the TCP Port Explicitly.
WARNING!!!!
In some cases, the Connection will automatically CLOSE. This is particularly the case when no response is
sent from the server to the client and also in the event of a TIMEOUT. Nonethless, I recomment
explicitly closing the TCP Socket with the "AT+CIPSHUT" command after each attemt to connect to the
server. The reason is this: An error will occur if the CIPSHUT command is not eventually sent after a
CIPSTART COMMAND in the case where only a single connection was opened (with the AT+CIPMUX=0
COMMAND.) The connection must be closed prior to attempting a second connection.
Let us say for instance we sent the follow command chain without first closing the previous connection.
Command: AT+CIPSTART="TCP","104.237.143.204","80"
Response: ERROR
Note: The error occurs because the previous connection was not closed.
Command: AT+CIPSEND
Response: ERROR
Note: It follows that any attempt to send data will fail.
Command: AT+CIPSTART="TCP","104.237.143.204","80"
Response: ERROR
Note: Any other attempt to connect will fail.
Command: AT+CIPSHUT
Response: SHUT OK
Note: Here we explicitly close the connection.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: The repeat is not necessary however, I have learnt not to take chances.
Command : AT+CIPSTART="TCP","www.google.com","80"
Response: OK
CONNECT OK
Command: AT+CIPSHUT
Response: SHUT OK
Command: AT+CIPSTART="TCP","www.google.com","80"
Response: OK
CONNECT OK
Notes: A second attempt is made here after the Command to close the connection was made. It returns
a successful connection.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: Explicitly close connection.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: Explicitly close connection.
CASES
Case 1: A successful connection but unsuccessful request.
Command: AT+CIPSTART="TCP","104.237.143.204","80"
Response: OK
CONNECT OK
Command: AT+CIPSEND
Response: >
TYPE: PUT /insert_via_url.php?unitId=17&unitName=uwi_test_unit17&lat=18.15988&long=-
76.8220&unit_stat=online&unitDesc=UWI+Test+Unit+17&submit=Submit HTTP/1.1
SEND OK
Response: HTTP/1.1 400 Bad Request
Date: Wed, 15 Apr 2015 13:45:14 GMT
Server: Apache/2.2.22 (Debian)
Vary: Accept-Encoding
Content-Length: 310
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.22 (Debian) Server at www.remotedata.com Port 80</address>
</body></html>
CLOSED
Notes: This request fails for one primary reason. No host is specified, Additionally, the TCP
ports may not be properly configured, Double check the fprmat of the command and
the server Apache conf file.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: Explicitly close the TCP connection.
Case 2: A successful connection and successful request.
Command: AT+CIPSHUT
Response: SHUT OK
Notes: Explicitly close the TCP connection.
Command: AT+CIPSTART="TCP","104.237.143.204","80"
Response: OK
CONNECT OK
Command: AT+CIPSEND
Response: >
TYPE: GET /uwiremotedata.html HTTP/1.1
Host: 104.237.143.204:80
Connection: keep-alive
<PRESS ENTER FOR A BLANK SPACE>
PRESS: CTRL+Z
Response: SEND OK
HTTP/1.1 200 OK
Date: Wed, 15 Apr 2015 21:42:34 GMT
Server: Apache/2.2.22 (Debian)
Last-Modified: Mon, 13 Apr 2015 17:23:40 GMT
ETag: "60017-1255-5139e600e8be8"
Accept-Ranges: bytes
Content-Length: 4693
Vary: Accept-Encoding
Content-Type: text/html
<!DOCTYPE html>
<html lang="en">
<head>
<title>UwiRemoteData.com</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<!--Map Javascript-->
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js"></script>
<script type="text/javascript">
//<![CDATA[
var customIcons = {
restaurant: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'
},
bar: {
icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'
}
};
function load() {
var loc_icon = new
google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_red.png');
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(18.2118309,-76.830442),
zoom: 12,
mapTypeId: 'roadmap'
});
var infoWindow = new google.maps.InfoWindow;
// Change this depending on the name of your PHP file
downloadUrl("createXML.php", function(data) {
//FF cannot responseXML . Or it gives problems or something
var txt = data.responseText;
// So reponseText then parse it into xml
var parser = new DOMParser();
var xml = parser.parseFromString(txt, "application/xml");
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var id = markers[i].getAttribute("unitID");
var name = markers[i].getAttribute("unit_Name");
var status = markers[i].getAttribute("status");
var description = markers[i].getAttribute("Description");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("Lat")),
parseFloat(markers[i].getAttribute("Long")));
var html = "<b>" +name+ "</b> <br/>" +status;
var icon = loc_icon;
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon
});
bindInfoWindow(marker, map, infoWindow, html);
}
});
}
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url, callback) {
var request; // = window.ActiveXObject ?
// new ActiveXObject('Microsoft.XMLHTTP') :
//new XMLHttpRequest;
if(window.XMLHttpRequest)
{
// if Browser is firefox IE7+ Chrome or Safari
request = new XMLHttpRequest();
}
else
{
//code for IE6 IE5
request = new ActiveXObject("Microsoft.XMLHTTP");
}
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status==200) {
//request.onreadystatechange = doNothing;
callback(request);//, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
//]]>
</script>
<style type="text/css">
.jumbotron {background-color:#a7f090;}
.btn-primary {background-color: #F2F5A9; color:black;}
body {background-color:#dddada;}
</style>
</head>
<body onload="load()">
<nav class="navbar navbar-inverse" >
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="uwiremotedata.html">UwiRemoteData</a>
</div>
<div>
<ul class="nav nav-tabs">
<li class="active"><a href="uwiremotedata.html">Home</a></li>
<li><a href="get_units.php">Units</a></li>
<li><a href="select_unit.php">Data</a></li>
<li><a href="support.html">Help</a></li>
</ul>
</div>
</div>
</nav>
<div class="container" style="width:1100px;"> <!-- Start of Container Div-->
<div class="jumbotron">
<h1>Welcome to UwiRemoteData.com</h1>
<div id="map" style="width: 950px; height: 400px; padding-right:10px;"></div>
</div>
<p>UWIRemotedata.com host information related to the profiles of major rivers aound the island of
jamaica. We continuously monitor various parameters of environmental and social
importance. Particularly, we seek to ensure that anthropogenic activities (in particular, industrial and
agricultural mal-practises) do not negatively impact river ecosystems </p>
</div><!-- End of Container -->
</body>
</html>
Command: AT+CIPCLOSE
Response: CLOSE OK
Command: AT+CIPSHUT
Response: SHUT OK
References:
[1.] http://www.tcpipguide.com/free/t_HTTPMessagesMessageFormatsMethodsandStatusCodes.htm
[2.] https://vsblogs.wordpress.com/2013/11/28/tcp-connection-over-gprs-using-sim900-and-at-
commands/
[3.] http://www.cooking-hacks.com/documentation/tutorials/arduino-gprs-gsm-quadband-sim900
[4.] https://roysoala.wordpress.com/2012/11/20/gprs-shield-sim900-arduino-get-data-application/
[5.] http://www.cyberciti.biz/tips/linux-increasing-or-decreasing-tcp-sockets-timeouts.html
[6.] http://forum.arduino.cc/index.php?topic=116867.0
[7.] https://vsblogs.wordpress.com/2013/11/28/tcp-connection-over-gprs-using-sim900-and-at-
commands/
[8.] http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
[9.] http://www.tcpipguide.com/free/t_HTTPMessagesMessageFormatsMethodsandStatusCodes.htm
[10] http://www.cooking-
hacks.com/skin/frontend/default/cooking/pdf/SIM900_AT_Command_Manual.pdf
Supporting Documents:
1) SIM900 AT COMMAND MANUAL_V1.05 (SIMCOM)
2)
Parts:
SIMCOM SIM900 GPRS_GSM MODEM with SIM CARD.
USB TO USART/UART CABLE
AND FINALLY A COMPUTER.

AT COMMAND SET FOR SENDING DATA VIA TCP USING SIM900

  • 1.
    AT COMMAND SETFOR SENDING DATA VIA TCP USING SIM900GSM/GPRS MODULE Command: AT Response: OK Notes: This command typically the first command sent to the MODEM. It is used to test the communication between the Two devices. Command: AT+CREG? Success Result: +CREG=1,1 OK Notes: This means the SIM is ready and has connected to the network. Command: AT+CGATT? Response: +CGATT: 1 Notes: Check if the SIM has Internet access. Command: AT+CIPSTATUS Response : OK STATE: IP INITIAL Notes: Query the IP settings. Command: AT+CIPMUX=0
  • 2.
    Response: OK Notes: Configuremodem to make a single port open for connections. Command: AT+CSTT="web.digiceljamaica.com","","" Response: OK Notes: Connect to Internet (Parameters are as follows; "APN","USERNAME","PASSWORD" Note that both the Username and Password are blank in the above instance. (BALNK HERE) Command: AT+CIICR Response: OK Notes: Bring up wireless network. Ensure that the modem has a SIM with credit and/or has a data plan activated. Command: AT+CIPSTART="TCP","104.237.143.204","80" Response: OK CONNECT OK Notes: Make a TCP Connection to the server at 104.237.143 on Port 80, the Default TCP and HTTP port. Command: AT+CIPSEND Response: > Notes: This command allows you to make request of the server. You enter your request after the prompt (>). Commands may either be GET, PUT or POST. Each command has a specific manner in which the command is to be written. In the Example below. A GET request is made to the server. The GET REQUEST can be used to ask for pages, call php scripts or pass data to the server. The GET REQUEST uses the following Format:
  • 3.
    GET /page_you_want_to_request.html HTTP/1.1 Host:124.456.798:80 Connection: keep-alive <Empty Line...just press Enter> PRESS Ctrl+Z or type "#026", The Hex value for ASCII 0x1A. In an embedded environment we could just send (0x1A) serially. EXAMPLE: Command: AT+CIPSEND Response: > TYPE: GET /page_on_server.php HTTP/1.1 Host: 104.237.143.204:80 Connection: keep-alive PRESS CTRL+Z Response: SEND OK HTTP/1.1 200 OK Date: Wed, 15 Apr 2015 23:14:53 GMT Server: Apache/2.2.22 (Debian) X-Powered-By: PHP/5.4.36-0+deb7u3 Vary: Accept-Encoding Content-Length: 60 Keep-Alive: timeout=3600, max=10 Connection: Keep-Alive Content-Type: text/html 19Connection Successful!Connection to database secured! Command: AT+CIPCLOSE
  • 4.
    Response: CLOSE OK Notes:Once the response is received, close the connection. Command: AT+CIPSHUT Response: SHUT OK Notes: Close the TCP Port Explicitly. WARNING!!!! In some cases, the Connection will automatically CLOSE. This is particularly the case when no response is sent from the server to the client and also in the event of a TIMEOUT. Nonethless, I recomment explicitly closing the TCP Socket with the "AT+CIPSHUT" command after each attemt to connect to the server. The reason is this: An error will occur if the CIPSHUT command is not eventually sent after a CIPSTART COMMAND in the case where only a single connection was opened (with the AT+CIPMUX=0 COMMAND.) The connection must be closed prior to attempting a second connection. Let us say for instance we sent the follow command chain without first closing the previous connection. Command: AT+CIPSTART="TCP","104.237.143.204","80" Response: ERROR Note: The error occurs because the previous connection was not closed. Command: AT+CIPSEND Response: ERROR Note: It follows that any attempt to send data will fail. Command: AT+CIPSTART="TCP","104.237.143.204","80" Response: ERROR Note: Any other attempt to connect will fail. Command: AT+CIPSHUT Response: SHUT OK Note: Here we explicitly close the connection. Command: AT+CIPSHUT Response: SHUT OK Notes: The repeat is not necessary however, I have learnt not to take chances. Command : AT+CIPSTART="TCP","www.google.com","80" Response: OK CONNECT OK
  • 5.
    Command: AT+CIPSHUT Response: SHUTOK Command: AT+CIPSTART="TCP","www.google.com","80" Response: OK CONNECT OK Notes: A second attempt is made here after the Command to close the connection was made. It returns a successful connection. Command: AT+CIPSHUT Response: SHUT OK Notes: Explicitly close connection. Command: AT+CIPSHUT Response: SHUT OK Notes: Explicitly close connection.
  • 6.
    CASES Case 1: Asuccessful connection but unsuccessful request. Command: AT+CIPSTART="TCP","104.237.143.204","80" Response: OK CONNECT OK Command: AT+CIPSEND Response: > TYPE: PUT /insert_via_url.php?unitId=17&unitName=uwi_test_unit17&lat=18.15988&long=- 76.8220&unit_stat=online&unitDesc=UWI+Test+Unit+17&submit=Submit HTTP/1.1 SEND OK Response: HTTP/1.1 400 Bad Request Date: Wed, 15 Apr 2015 13:45:14 GMT Server: Apache/2.2.22 (Debian) Vary: Accept-Encoding Content-Length: 310 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p>
  • 7.
    <hr> <address>Apache/2.2.22 (Debian) Serverat www.remotedata.com Port 80</address> </body></html> CLOSED Notes: This request fails for one primary reason. No host is specified, Additionally, the TCP ports may not be properly configured, Double check the fprmat of the command and the server Apache conf file. Command: AT+CIPSHUT Response: SHUT OK Notes: Explicitly close the TCP connection. Case 2: A successful connection and successful request. Command: AT+CIPSHUT Response: SHUT OK Notes: Explicitly close the TCP connection. Command: AT+CIPSTART="TCP","104.237.143.204","80" Response: OK CONNECT OK Command: AT+CIPSEND Response: >
  • 8.
    TYPE: GET /uwiremotedata.htmlHTTP/1.1 Host: 104.237.143.204:80 Connection: keep-alive <PRESS ENTER FOR A BLANK SPACE> PRESS: CTRL+Z Response: SEND OK HTTP/1.1 200 OK Date: Wed, 15 Apr 2015 21:42:34 GMT Server: Apache/2.2.22 (Debian) Last-Modified: Mon, 13 Apr 2015 17:23:40 GMT ETag: "60017-1255-5139e600e8be8" Accept-Ranges: bytes Content-Length: 4693 Vary: Accept-Encoding Content-Type: text/html <!DOCTYPE html> <html lang="en"> <head> <title>UwiRemoteData.com</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  • 9.
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> <!--Map Javascript--> <scripttype="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script> <script type="text/javascript"> //<![CDATA[ var customIcons = { restaurant: { icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png' }, bar: { icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png' } }; function load() { var loc_icon = new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_red.png'); var map = new google.maps.Map(document.getElementById("map"), { center: new google.maps.LatLng(18.2118309,-76.830442), zoom: 12, mapTypeId: 'roadmap' }); var infoWindow = new google.maps.InfoWindow;
  • 10.
    // Change thisdepending on the name of your PHP file downloadUrl("createXML.php", function(data) { //FF cannot responseXML . Or it gives problems or something var txt = data.responseText; // So reponseText then parse it into xml var parser = new DOMParser(); var xml = parser.parseFromString(txt, "application/xml"); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var id = markers[i].getAttribute("unitID"); var name = markers[i].getAttribute("unit_Name"); var status = markers[i].getAttribute("status"); var description = markers[i].getAttribute("Description"); var point = new google.maps.LatLng( parseFloat(markers[i].getAttribute("Lat")), parseFloat(markers[i].getAttribute("Long"))); var html = "<b>" +name+ "</b> <br/>" +status; var icon = loc_icon; var marker = new google.maps.Marker({
  • 11.
    map: map, position: point, icon:icon }); bindInfoWindow(marker, map, infoWindow, html); } }); } function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } function downloadUrl(url, callback) { var request; // = window.ActiveXObject ? // new ActiveXObject('Microsoft.XMLHTTP') : //new XMLHttpRequest; if(window.XMLHttpRequest) { // if Browser is firefox IE7+ Chrome or Safari request = new XMLHttpRequest(); }
  • 12.
    else { //code for IE6IE5 request = new ActiveXObject("Microsoft.XMLHTTP"); } request.onreadystatechange = function() { if (request.readyState == 4 && request.status==200) { //request.onreadystatechange = doNothing; callback(request);//, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() {} //]]> </script> <style type="text/css">
  • 13.
    .jumbotron {background-color:#a7f090;} .btn-primary {background-color:#F2F5A9; color:black;} body {background-color:#dddada;} </style> </head> <body onload="load()"> <nav class="navbar navbar-inverse" > <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="uwiremotedata.html">UwiRemoteData</a> </div> <div> <ul class="nav nav-tabs"> <li class="active"><a href="uwiremotedata.html">Home</a></li> <li><a href="get_units.php">Units</a></li> <li><a href="select_unit.php">Data</a></li> <li><a href="support.html">Help</a></li> </ul> </div> </div> </nav> <div class="container" style="width:1100px;"> <!-- Start of Container Div--> <div class="jumbotron">
  • 14.
    <h1>Welcome to UwiRemoteData.com</h1> <divid="map" style="width: 950px; height: 400px; padding-right:10px;"></div> </div> <p>UWIRemotedata.com host information related to the profiles of major rivers aound the island of jamaica. We continuously monitor various parameters of environmental and social importance. Particularly, we seek to ensure that anthropogenic activities (in particular, industrial and agricultural mal-practises) do not negatively impact river ecosystems </p> </div><!-- End of Container --> </body> </html> Command: AT+CIPCLOSE Response: CLOSE OK Command: AT+CIPSHUT Response: SHUT OK
  • 15.
    References: [1.] http://www.tcpipguide.com/free/t_HTTPMessagesMessageFormatsMethodsandStatusCodes.htm [2.] https://vsblogs.wordpress.com/2013/11/28/tcp-connection-over-gprs-using-sim900-and-at- commands/ [3.]http://www.cooking-hacks.com/documentation/tutorials/arduino-gprs-gsm-quadband-sim900 [4.] https://roysoala.wordpress.com/2012/11/20/gprs-shield-sim900-arduino-get-data-application/ [5.] http://www.cyberciti.biz/tips/linux-increasing-or-decreasing-tcp-sockets-timeouts.html [6.] http://forum.arduino.cc/index.php?topic=116867.0 [7.] https://vsblogs.wordpress.com/2013/11/28/tcp-connection-over-gprs-using-sim900-and-at- commands/ [8.] http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers [9.] http://www.tcpipguide.com/free/t_HTTPMessagesMessageFormatsMethodsandStatusCodes.htm [10] http://www.cooking- hacks.com/skin/frontend/default/cooking/pdf/SIM900_AT_Command_Manual.pdf Supporting Documents: 1) SIM900 AT COMMAND MANUAL_V1.05 (SIMCOM) 2)
  • 16.
    Parts: SIMCOM SIM900 GPRS_GSMMODEM with SIM CARD. USB TO USART/UART CABLE AND FINALLY A COMPUTER.