Pages: [1]   Go Down
Author Topic: Sending AT commands and receiving response  (Read 2707 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey all,

I just figured out how to send AT commands to the Arduino GSM Shield and get back the response. I've been struggling with this for a while so I thought to share it with you here on the forum.

This method works but is probably not the best way.

Code:
#include <GSM.h>

// initialize the library instance
GPRS gprsAccess;  // GPRS access
GSM gsmAccess(true);    // GSM access: include a 'true' parameter for debug enabled
GSMClient client;  // Client service for TCP connection

// you need modemAccess to access the function writeModemCommand
// that function allows you to specify a delay for getting the answer from the gsm module
GSM3ShieldV1DirectModemProvider modemAccess;

// PIN Number
#define PINNUMBER "xxxx"

char answer[100];

void setup()
{
  Serial.begin(9600);
  
  boolean notConnected = true;
  
  Serial.println("Connecting to the GSM network");
  
  while(notConnected){
    if(gsmAccess.begin(PINNUMBER) == GSM_READY)
      notConnected = false;
    else {
      Serial.println("Not connected, trying again");
      delay(1000);
    }
  }
  
  Serial.println("Connected.");

}

void loop()
{
  
  Serial.println("Sending AT Command.");

  Serial.println(modemAccess.writeModemCommand("AT+QNITZ=1",1000));
  delay(1000);
  Serial.println(modemAccess.writeModemCommand("AT+QNITZ?",1000));
  delay(1000);
  Serial.println(modemAccess.writeModemCommand("AT+CCLK?",1000));
  
  while(true);
}
« Last Edit: December 22, 2013, 03:54:08 pm by MathiasVDA » Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here is a sketch where you can send AT commands from the terminal. Include a new line after each command:

Code:
#include <GSM.h>

// initialize the library instance
GSM gsmAccess;
GPRS gprsAccess;

GSM3ShieldV1DirectModemProvider modemAccess;

// PIN Number
#define PINNUMBER "9731"

// APN info
char apn[] = {"web.pro.be"};
char login[] = {""};
char password[] = {""};

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete


void setup(){
  Serial.begin(9600);
  connectGSM();
}
void loop(){
  // print the string when a newline arrives:
  if (stringComplete) {
    Serial.print("Sending command: "+inputString);
    Serial.println(send_AT_Command(inputString,1000));
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}
String send_AT_Command(String AT_COMMAND, int tDelay){
  /*Serial.print("COMMAND: "+AT_COMMAND);
  Serial.println(modemAccess.writeModemCommand(AT_COMMAND,tDelay));
  Serial.println("-----------------------------------------------");*/
 
  return modemAccess.writeModemCommand(AT_COMMAND,tDelay);
}
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
void connectGSM(){
  boolean notConnected=true;
  Serial.println("Connecting...");
  while(notConnected){
    if(gsmAccess.begin(PINNUMBER) == GSM_READY)
      notConnected = false;
    else delay(1000);
  }
  Serial.println("Connected to GSM, now GPRS...");
 
  // 1000ms bug
  delay(1000);
 
  while(gprsAccess.attachGPRS(apn, login, password)!=GPRS_READY){
    delay(1000);
  }
  Serial.println("Fully connected.");
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sir, how about in sending MMS or SMS AT commands. I am not getting any response in serial monitor like "OK" or "Error" or "CONNECT". I dont know if there is an error or none. Please help me.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

what commands and which shield are you using?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Im using GSM/GPRS shield sir.


AT+CMMSINIT     
OK         
AT+CMMSCURL="192.40.100.20/MMSC"       
OK                         
AT+CMMSCID=1             
OK
AT+CMMSPROTO="10.124.26.94",8799       
OK                                                         
AT+SAPBR=3,1,"CONTYPE","GPRS" 
OK                           
AT+SAPBR=3,1,"APN","TATA.DOCOMO.MMS"     
OK                               
AT+SAPBR=1,1 
OK         
AT+SAPBR=2,1       
OK                             
AT+CMMSEDIT=1   
OK           
AT+CMMSDOWN="TEXT",3,5000000                         
CONNECT       
OK 


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

What functions am i going to add in order to get responses like "OK" in serial monitor ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dear Mathias,
how can I parse the modem reply?
Have you tried to read its answers?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 38
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

can you help me?

I use your first code to get the time from the Network.
But the time does not change.

You have any ideia why? I try diffrents networks and they support this.
Logged

Pages: [1]   Go Up
Jump to: