Top Banner
t r o n i x s t u f f fun and learning with electronics Home About Arduino Tutorials Electronics Education Kit Reviews Other Reviews Projects Tutorial: Arduino and GSM Cellular – Part One This is chapter twenty-six of a series originally titled “Getting Started/Moving Forward with Arduino! ” by John Boxall – A tutorial on the Arduino universe. The first chapter is here , the complete series is detailed here . Please note from November 1, 2010 files from tutorials will be found here . *** Update – 19th October 2011 *** This tutorial is no longer supported and for entertainment purposes only. If you have a problem with your shield, or need technical assistance, contact Sparkfun or the retailer that sold you the board. If you have a problem getting your module to work, please re-read the tutorial and ensure you have the correct power supply, and a working antenna matched to your cellular network’s frequency. Americans – this shield doesn’t work with Verizon; and it has been reported that AT&T “GoPhone” SIM cards may not work. If you have an Arduino Mega – use the Mega sketches. If you think your shield is faulty contact the company that sold it to you. Otherwise have fun and enjoy yourselves. Welcome back fellow arduidans! Today we are going to start using our Arduino to communicate over a GSM mobile telephone network using the SM5100B Cellular Shield: This will be the first of several articles related to the SM5100B GSM shield . [Part two is here ] The available documentation for this unit was abysmal, so please be patient. My goal is to illustrate different ways of interacting using the shield, with which you can then use your existing knowledge to build upon those ways. For this article I want to get a few things out of the way first, which may sound a little harsh, but are necessary. Firstly – telephone calls and text messages (SMS) can cost real money, so if your sketch goes bonkers and blasts out a few hundred text messages while you’re in the kitchen having tea, you will have to pay for them. It may be prudent to use a prepaid cellular account for testing purposes. Secondly, the current draw. Sending an SMS (a tiny burst of data) will generally draw around less than 400 mA, which is within our normal Arduino specification. If you are using your shield to make or receive actual telephone calls, the shield can draw up to two amps of current. The actual current draw will vary depending on the strength of network reception in your location. For example, I live in direct line-of-sight of a network tower, use a carphone aerial and have full reception. When using the shield to make a call the current draw is around 420 mA. If in doubt, use the ammeter function of a multimeter to monitor current draw. However if I was 25km east of Sydney Harbour, the shield would use maximum transmit/receive power and pull the two amps. Therefore if communicating in this way you cannot run your Arduino and this shield from the USB port or the DC socket. And don’t be lazy by trying it anyway. Instead, power your project with a high-capacity 5V 2 amp power supply to the 5V and GND pins on your shield. Thirdly, you will need an aerial. These can range from the small “rubber ducky ” types, to full carphone models. If you are using the larger vehicle-style aerial, you might find that the plug will not fit to the shield’s connector. For example, consider the following: On the left is the end of the lead from the carphone aerial, the right is the lead from the GSM shield. Problem! The solution is in the centre: an FME male to SMA male adaptor. This one came from Farnell/element-14, part number 1826209 (it is a Multicomp R23-014-00-002611000). Furthermore, care needs to be taken with your GSM shield with regards to the aerial lead-module connection, it is very fragile:
23

Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Oct 15, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

t r o n i x s t u f ffun and learning with electronics

HomeAboutArduino TutorialsElectronics EducationKit ReviewsOther ReviewsProjects

Tutorial: Arduino and GSM Cellular – Part OneThis is chapter twenty-six of a series originally titled “Getting Started/Moving Forward with Arduino!” by John Boxall – A tutorial on the Arduino universe.

The first chapter is here, the complete series is detailed here. Please note from November 1, 2010 files from tutorials will be found here.

*** Update – 19th October 2011 ***

This tutorial is no longer supported and for entertainment purposes only. If you have a problem with your shield, or need technical assistance, contactSparkfun or the retailer that sold you the board.

If you have a problem getting your module to work, please re-read the tutorial and ensure you have the correct power supply, and a working antenna matched to yourcellular network’s frequency. Americans – this shield doesn’t work with Verizon; and it has been reported that AT&T “GoPhone” SIM cards may not work. If youhave an Arduino Mega – use the Mega sketches. If you think your shield is faulty contact the company that sold it to you. Otherwise have fun and enjoy yourselves.

Welcome back fellow arduidans!

Today we are going to start using our Arduino to communicate over a GSM mobile telephone network using the SM5100B Cellular Shield:

This will be the first of several articles related to the SM5100B GSM shield. [Part two is here] The available documentation for this unit was abysmal, so please bepatient. My goal is to illustrate different ways of interacting using the shield, with which you can then use your existing knowledge to build upon those ways. For thisarticle I want to get a few things out of the way first, which may sound a little harsh, but are necessary.

Firstly – telephone calls and text messages (SMS) can cost real money, so if your sketch goes bonkers and blasts out a few hundred text messages while you’re in thekitchen having tea, you will have to pay for them. It may be prudent to use a prepaid cellular account for testing purposes.

Secondly, the current draw. Sending an SMS (a tiny burst of data) will generally draw around less than 400 mA, which is within our normal Arduino specification. Ifyou are using your shield to make or receive actual telephone calls, the shield can draw up to two amps of current. The actual current draw will vary depending on thestrength of network reception in your location. For example, I live in direct line-of-sight of a network tower, use a carphone aerial and have full reception. When usingthe shield to make a call the current draw is around 420 mA. If in doubt, use the ammeter function of a multimeter to monitor current draw.

However if I was 25km east of Sydney Harbour, the shield would use maximum transmit/receive power and pull the two amps. Therefore if communicating in this wayyou cannot run your Arduino and this shield from the USB port or the DC socket. And don’t be lazy by trying it anyway.

Instead, power your project with a high-capacity 5V 2 amp power supply to the 5V and GND pins on your shield.

Thirdly, you will need an aerial. These can range from the small “rubber ducky” types, to full carphone models. If you are using the larger vehicle-style aerial, youmight find that the plug will not fit to the shield’s connector. For example, consider the following:

On the left is the end of the lead from the carphone aerial, the right is the lead from the GSM shield. Problem! The solution is in the centre: an FME male to SMA maleadaptor. This one came from Farnell/element-14, part number 1826209 (it is a Multicomp R23-014-00-002611000). Furthermore, care needs to be taken with yourGSM shield with regards to the aerial lead-module connection, it is very fragile:

Page 2: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

And finally, please do not try to recreate the following:

From a software perspective we will need the NewSoftSerial Arduino library, so please download and install that before moving on.

Are you using an Arduino Mega board?

Mega users – things will be slightly different for you. Please make sure the TX and RX pins of your GSM shield DO NOT plug into your Mega. Furthermore, run ajumper wire from GSM shield pin D2 to Mega pin 19, and a jumper from GSM shield pin D3 to Mega pin 18, as shown below:

Finally, the example sketches will be different. Mega will not use the NewSoftSerial library, instead we use the Serial1 port. Please use the following Mega-equivalentsketches for this article: Example 26.1, 26.2, 26.3 and 26.4.

Now, on with the show…

Why would you want to connect your Arduino to the mobile phone network anyway? To send and receive data across the mobile network, and to transmit or receiveinstructions or commands. More specifically, within the scope of this article we will do so mainly using text or SMS messages.

When shipped as new, our shield does not include the 6-pin and 8-pin headers (though it should for the price – cheapskates). So you will need to source your own andsolder them in by inserting them onto the pins of another shield and drop the shield on top, then solder the shield in nicely.

Initial check – does it work?

This may sound like a silly question, but considering the cost of the shield and the variables involved, it is a good idea to check if your setup is functioning correctlybefore moving on. From a hardware perspective for this article, you will need your Arduino board, the GSM shield with activated SIM card and an aerial, and a rangeof previously used components. Make sure your SIM card is set to not require a PIN when the phone is turned on. You can check and turn this requirement off withyour cellphone. For our initial test, upload the following sketch :

Example 26.1

/* SparkFun Cellular Shield - Pass-Through Sample Sketch

SparkFun Electronics Written by Ryan Owens CC by v3.0 3/8/10

Thanks to Ryan Owens and Sparkfun for sketch */

Page 3: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Thanks to Ryan Owens and Sparkfun for sketch */

#include <NewSoftSerial.h> //Include the NewSoftSerial library to send serial commands to the cellular module.

#include <string.h> //Used for string manipulations

char incoming_char=0; //Will hold the incoming character from the Serial Port.

NewSoftSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

void setup()

{

//Initialize serial ports for communication.

Serial.begin(9600);

cell.begin(9600);

Serial.println("Starting SM5100B Communication...");

}

void loop()

{

//If a character comes in from the cellular module...

if(cell.available() >0)

{

incoming_char=cell.read(); //Get the character from the cellular serial port.

Serial.print(incoming_char); //Print the incoming character to the terminal.

}

//If a character is coming from the terminal to the Arduino...

if(Serial.available() >0)

{

incoming_char=Serial.read(); //Get the character coming from the terminal

cell.print(incoming_char); //Send the character to the cellular module.

}

}

Then connect the GSM shield, aerial, insert the SIM card and apply power. Open the serial monitor box in the Arduino IDE and you should be presented with thefollowing:

It will take around fifteen to thirty seconds for the text above to appear in full. What you are being presented with is a log of the GSM module’s actions. But what dothey all mean?

+SIND: 1 means the SIM card has been inserted;the +SIND: 10 line shows the status of the in-module phone book. Nothing to worry about there for us at the moment;+SIND: 11 means the module has registered with the cellular network+SIND: 3 means the module is partially ready to communicateand +SIND: 4 means the module is registered on the network, and ready to communicate

If your terminal returned a +SIND 8 instead of 4, that is OK, we’ll sort that out in a moment.

From this point on, we will need to use a different terminal program, as the Arduino IDE’s serial monitor box isn’t made for full two-way communications. You willneed a terminal program that can offer full two-way com port/serial communication. For those running MS Windows, an excellent option is available here. It’s free,however consider donating for the use of it. For other operating systems, people say this works well.

So now let’s try it out with the terminal software. Close your Arduino IDE serial monitor box if still open, then run your terminal, set it to look at the same serial port asthe Arduino IDE was. Ensure the settings are 9600, 8, N, 1. Then reset your Arduino and the following should appear:

Page 4: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

The next step is to tell the GSM module which network frequency(ies) to use. Please download this document (.pdf), and view page 127. There is a range of frequencychoices that our module can use. If you don’t know which one to use, contact the telephone company that your SIM card came from. Australia – use option 4. Chooseyour option, then enter

AT+SBAND=x

(where X is the value matching your required frequency) into the terminal software and click SEND. Then press reset on the Arduino and watch the terminal display.You should hopefully be presented with the same text as above, ending with +SIND: 4. If your module returns +SIND: 4, we’re ready to move forward.

Our next test is to call our shield. So, pick up a phone and call it. Your shield will return data to the terminal window, for example:

As you can see, the module returns what is happening. I let the originating phone “ring” twice, and the module received the caller ID data (sorry, blacked it out). Sometelephone subscribers’ accounts don’t send caller ID data, so if you don’t see your number, no problem. “NO CARRIER” occurred when I ended the call. +SIND: 6,1means the call ended and the SIM is ready.

The document (.pdf) we downloaded earlier contains a list of AT commands – consider this a guide to the language with which we instruct the GSM module to dothings. Let’s try out some more commands before completing our initial test. The first one is:

ATDxxxxxx

which dials a telephone number xxxxxx. For example, to call (212)-8675309 use

ATD2128675309

The next one is

ATH

which “hangs up” or ends the call. So, let’s reach out and touch someone. In the terminal software, enter your ATDxxxxxxxx command, then hit send. Let your phonering. Then enter ATH to end the call. If you are experimenting and want to hang up in a hurry, you can also hit reset on the Arduino and it will end the call as well asresetting the system. So by now you should realise the GSM module is controlled by these AT commands.

To use an AT command in a sketch, we use the function

cell.println()

for example, to dial a phone number, we would usecell.println("ATD2128675309");

Page 5: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

cell.println("ATD2128675309");

To demonstrate this in a sketch, consider:

Example 26.2

A simple sketch to dial a telephone number, wait, then hang up. Replace xxxxxxxx with the number you wish to call.

/* Example 26.2 GSM shield making and ending a telephone call

http://tronixstuff.com/tutorials > chapter 26 */ #include <NewSoftSerial.h> //Include the NewSoftSerial library to send serial commands to the cellular module.

NewSoftSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

void setup()

{ //Initialize serial ports for communication.

cell.begin(9600);

delay(25000); // give the GSM module time to initialise, locate network etc.

// this delay time varies. Use example 26.1 sketch to measure the amount

// of time from board reset to SIND: 4, then add five seconds just in case

}

void loop()

{

cell.println("ATDxxxxxxxxx"); // dial the phone number xxxxxxxxx

// change xxxxxxx to your desired phone number (with area code)

delay(20000); // wait 20 seconds.

cell.println("ATH"); // end call

do // remove this loop at your peril

{ delay(1); }

while (1>0);

}

The sketch in example 26.2 assumes that all is well with regards to the GSM module, that is the SIM card is ok, there is reception, etc. The delay function in void setup()is used to allow time for the module to wake up and get connected to the network. Later on we will read the messages from the GSM module to allow our sketches todeal with errors and so on. However, you can see how we can simply dial a telephone. You could now have a home alarm system that can call you upon an eventhappening, etc.

Another popular function is the SMS or short message service, or text messaging.

Sending text messages from our Arduino…

The AT commands for sending text messages are a little more involved, but nothing to worry about. First, we need to tell the module our SMS will be ASCII text, this isdone with:

AT+CMGF=1

Then we need to give the mobile phone number to send the message to:

AT+CMGS="xxxxxxxxx"

At this stage, there needs to be a small delay, around half a second. Then the module will expect the contents of the message (maximum 160 characters) followed by theASCII equivalent of Ctrl-Z. After sending the message, the module needs around fifteen seconds to finalise the procedure, so if sending multiple messages, allow forthis with a delay() function.

Do not use cell.println() on the function that sends the message text. Doing so will lock up your SMS module.

Example 26.3

So let’s send a text message. I have tried to simplify the process as much as possible, so the following sketch is my simple “Send an SMS” example:

/* Example 26.3 GSM shield sending a SMS text message

http://tronixstuff.com/tutorials > chapter 26 */

#include <NewSoftSerial.h>

NewSoftSerial cell(2,3); // We need to create a serial port on D2/D3 to talk to the GSM module

char mobilenumber[] = "xxxxxxxxx"; // Replace xxxxxxxx with the recipient's mobile number

void setup()

{ //Initialize serial ports for communication.

cell.begin(9600);

delay(35000); // give the GSM module time to initialise, locate network etc.

// this delay time varies. Use example 26.1 sketch to measure the amount

// of time from board reset to SIND: 4, then add five seconds just in case

}

void loop()

Page 6: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

void loop()

{

cell.println("AT+CMGF=1"); // set SMS mode to text

cell.print("AT+CMGS="); // now send message...

cell.print(34,BYTE); // ASCII equivalent of "

cell.print(mobilenumber);

cell.println(34,BYTE); // ASCII equivalent of "

delay(500); // give the module some thinking time

cell.print("They call me the count... because I like to count! Ah ha ha ha"); // our message to send

cell.println(26,BYTE); // ASCII equivalent of Ctrl-Z

delay(15000); // the SMS module needs time to return to OK status

do // You don't want to send out multiple SMSs.... or do you?

{

delay(1);

}

while (1>0);

}

Now we can consider sending data and a fixed text message. To do so, we need to split the procedure of sending a text message into three parts: the sending data, themessage and any data, and ending the procedure. This is done in the following example. The sketch generates a random number between 0 and 99. Then it counts from0 to 99, and when the count reaches the random number, it sends the text message containing an initial note and the random number.

Example 26.4

/* Example 26.4 Send a text message upon an event occurring

http://tronixstuff.com/tutorials > chapter 26 */

#include <NewSoftSerial.h>

NewSoftSerial cell(2,3); // We need to create a serial port on D2/D3 to talk to the GSM module

char mobilenumber[]="xxxxxxxx"; // Replace xxxxxxxx with the recipient's mobile number

char textmessage[160]; // used to hold contents of message to send

int b=0;

void setup()

{ //Initialize serial ports for communication.

cell.begin(9600);

delay(35000); // give the GSM module time to initialise, locate network etc.

// this delay time varies. Use example 26.1 sketch to measure the amount

// of time from board reset to SIND: 4, then add five seconds just in case

pinMode(13, OUTPUT); // use the LED for status

randomSeed(analogRead(0));

}

void startSMS()

// function to send a text message

{

digitalWrite(13, HIGH);

cell.println("AT+CMGF=1"); // set SMS mode to text

cell.print("AT+CMGS=");

cell.print(34,BYTE); // ASCII equivalent of "

cell.print(mobilenumber);

cell.println(34,BYTE); // ASCII equivalent of "

delay(500); // give the module some thinking time

}

void endSMS()

{

cell.println(26,BYTE); // ASCII equivalent of Ctrl-Z

delay(15000); // the SMS module needs time to return to OK status

digitalWrite(13, LOW);

}

void loop()

Page 7: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Please share withothers:

Like this: 3 bloggers like this post.

void loop()

{

b=random(0, 99);

for (int a=0; a<100; a++)

{

if (a==b)

{

startSMS();

cell.print("The random number is: ");

cell.print(b);

endSMS();

}

}

do

{

delay(1);

} while (1>0);

}

The result is shown in this quick video:

No se ha podido establecer conexión con Internet

Google Chrome no puede mostrar la página web porque tu ordenador no está conectado a Internet.

Puedes intentar realizar un diagnóstico del error siguiendo estos pasos:

Accede a Aplicaciones > Preferencias del Sistema > Red > Asistente para comprobar tu conexión.

Error 106 (net::ERR_INTERNET_DISCONNECTED): Se ha perdido la conexión a Internet.

So now you can see the basic procedure for sending mixed data in a text message. For the purpose of the video, and to save my sanity – the GSM shield’s telephonenumber is stored as a phone book entry, that is why the sender is shown as Arduino GSM.

Well that is all we have time for in this instalment. Thank you for your patience in awaiting this series of articles. Although getting it together was a little tricky, it was alot of fun. I hope you enjoyed reading it as much as I did writing it for you. Now you can move onto GSM and Arduino – part two!

Otherwise, have fun, stay safe, be good to each other – and make something!

January 19, 2011 - Posted by John Boxall | arduino, cellphone hacking, cellular, GSM, microcontrollers | 1800, 850, 900, arduino, ATT, call, card, CEL-09607,cellphone, cellular, control, education, electronics, GPRS, GSM, GSM1800, GSM850, GSM900, guide, guides, hacking, lesson, lessons, message, MHz,microcontrollers, mobile, monitor, network, optus, PCS, project, projects, remote, shield, SIM, SM5100, SM5100B, SMB5100B, SMS, sparkfun, spreadtrum,telephone, telstra, text, tutorial, tutorials, VHA, vodafone

124 Comments1. this is excellent! Although the procedure looked tricky, it’s quite do-able with your tutorial.

Thanks John!

Twitter Email StumbleUpon Facebook Reddit Digg LinkedIn Print

Like

Page 8: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Thanks John!

Russ

Comment by Russ | January 19, 2011

Hello RussThank you for your comment, I really appreciate it. What drove me to write the article (and the future two) is the complete lack of any usable tutorialelsewhere. People would post “bits” of their code, but not a simple, working example. So here you are. Enjoy!cheersjohn

Comment by John Boxall | January 19, 2011

2. Hi John,

This is great, except that I am using an Arduino Mega. I am trying to complete the initial check, and I did every exactly as you described, except I have tomanually connect the shield pins to the Mega. I get the “Starting SM5100B Communication…” line, but I never get the +SIND response. I’ve also tried just aboutevery other way. Could it be that I’m using a Mega? I am using an AT&T 3G sim card.

Comment by Peter Li | January 20, 2011

Yes, the Mega is slightly different. I have emailed you directly, and will update the tutorial now.Thank you for bringing this to my attentioncheersjohn

Comment by John Boxall | January 20, 2011

Interesting point about the Mega 1280.

I’ve resoldered the jumpers for the Cellular shield so that it uses HW Serial pins 0 and 1 instead of SW pins 2 and 3. For some reason it won’t work on theMega.

The exact same code works on an Arduino Uno!

But I cannot seem to communicate with the cellular board using Serial0 on the Mega

I’ve also tried using Serial1 on the Mega as well, but this doesn’t work either. Very strange that this happens on the Mega. I know these serial ports workbecause I can communicate to a Uno over serial and I can communicate within the Mega from Serial 0 to Serial 1 for example.

I haven’t tried using the SW serial on the Mega for the cellular shield.

Is the Mega doing something odd with its serial communication that makes it necessary to use the SW serial?

Comment by staropram | May 26, 2011

HelloIf you have soldered the GSM shield up to force it to use pins d0 and d1 for serial, the Mega should definitely work using Serial.begin(9600) etc forcomms with the GSM shield. Only catch is that if you need to use the terminal window you can’t as it requires the first serial i/o (as it is the only onethrough the FTDI>USB trail). There is no need to use software serial on the Mega.

Comment by John Boxall | May 27, 2011

3. Thank you so much for sharing your knowledge, this is an awesome tutorial as always.I’m not playing with GSM right now but I keep in mind the possibilities.The hardest thing for a beginner like me is to find good documentations but fortunately you are here to make things a lot easier. Thank you

Comment by virtualmix | January 22, 2011

4. Hi John,Many thanks for posting this. It’s exactly what I’ve been looking for for the past few weeks.Just one question though, did you have to change the baud rate yourself? My understanding is that the GSM shields originally shipped with the baud rate set to115200, instead of 9600.I’ve been trying to use the Sparkfun FT232RL breakout board (BOB-00718) to reset mine, but as I’m a relative newbie to electronics, I have been unsuccessful.Any advice or comments you could offer would be greatly appreciated.Best,Roki

Comment by Roki | January 25, 2011

HelloThe units should be shipped as being set to 9600, at least for the last six or so months.Do you have an Arduino Duemilanove/Uno/compatible board? If necessary, you could change the baud rate using USB via the Arduino and the terminalsoftware.John

Comment by John Boxall | January 25, 2011

Hi,It’s a compatible board (based on the Duemilanove).Yes, I’ll give that a try. Do I have to remove the ATMega chip for that (perhaps it’s a dumb question, but I’ve seen it listed before)?Thanks,Roki

Comment by Roki | January 25, 2011

Page 9: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Comment by Roki | January 25, 2011

No, the chip stays inJohn

Comment by John Boxall | January 25, 2011

5. Hi John.. your tutorial is awesome. i m working on my final year project by using arduino uno with sm5100B. my problem is that i m not getting response frommodule. I only get the “Starting SM5100B Communication…” line, but I never get the +SIND response. i have connected modem 2 and 3 pin to Tx and Rx pinof uno, but ouldnt find any response from modem. Plz reply as soon as possible

Comment by engrstudent | February 3, 2011

Do you have an aerial connected, an activated SIM card and an appropriate 2 amp power supply connected (see tutorial)?

Comment by John Boxall | February 3, 2011

6. Hi,Very good tutorial indeed!On my side, I have an Arduino Mega, which works perfectly for sending one SMS. If I send a new one, I get +CME ERROR: 4 , then OK, then another +CMEERROR: 4.I either have to reset or close and re-open the com monitor (!) to be able to send a sms again. Do you have any ideea why it does that ?

Comment by Catalin | February 3, 2011

HiThanks for your feedback and question. +CME: ERROR 4 means “operation not supported”. If you are sending multiple SMSs in one sketch, put a delayof at least 5 seconds between each send attempt. The module needs time between sending SMSs.cheersjohn

Comment by John Boxall | February 3, 2011

Hi,Thanks for your quick reply!. As I remember when I tried (I can’t try now because I think I’ve burned the cell shield due to use with the antennashield wire broken) I did wait around 10 seconds after I retried. I have even added a status check, and I don’t do an attempt until the status is back to“OK”. Can there be anything else?

Comment by Catalin | February 5, 2011

If you think your GSM module is dead, try example 26.1 again. if that works you should be ok.Some others have mentioned having the same problem, so I suggest sending “AT+CFUN=1,1! after the SMS sending has finished. This ATcommand will reset the module.john

Comment by John Boxall | February 6, 2011

7. I’m having the same problem as catalin. Once a get or send an SMS, any further attempts have a CME ERROR 4. I’ve waited 30 seconds or more before doinganything. It gets locked into the error mode and the only way I can clear it is to re-cycle power. Any suggestions?

Comment by timb | February 5, 2011

A few people have mentioned this to me, but I can’t work out why it is happening.My only suggestion at the moment is to send a “AT+CFUN=1,1! to the module about ten seconds after the SMS has been sent. This will reset the GSMmodule for you. Then allow time for it to restart before moving forward in the sketch.cheersjohn

Comment by John Boxall | February 6, 2011

8. Nice mention of this article on hackaday.comGood stuff!

Comment by Jason | February 6, 2011

Thanks!

Comment by John Boxall | February 6, 2011

9. Dumb question but will any SIM card work? I’m looking to grab an AT&T sim card for GO Phone from ebay for ~$10 or TMobile refill/prepaid SIM …

Is there one kind that I should get or steer away from? TIA!

Comment by Douglas Mauro | February 7, 2011

HelloAs long as the account attached to your SIM card can send and receive SMS you should be fine – whether it is prepaid or postpaid should not make anydifference.Have funJohn

Comment by John Boxall | February 7, 2011

I would advise you Prepaid card, because if your code is wrong, you pay what you loaded the card with.

with postpaid, while(1) sendsms() can cost you big bucks.

Page 10: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

with postpaid, while(1) sendsms() can cost you big bucks.

There is absolutely no code difference when using Prepaid or Postpaid for SMS and Voice.

Comment by Wolf | February 7, 2011

10. in the loop section you have this fragment:for (int a=0; a<100; a++){if (a==b){

}}

is there a reason for this? it only runs the code once whie don’t you just run the code?

Comment by Pedro Pinheiro | February 7, 2011

Hi PedroThe purpose for doing it that way was to demonstrate how you can integrate the sending of an SMS within code for detecting a certain condition. (e.g.when something equals something, send out an SMS).cheersjohn

Comment by John Boxall | February 7, 2011

11. Has anyone tried this with canadian provider SIM cards? I got it workign fine with Rogers, but I am in Saskatchewan and our provider “Sasktel” SIM cards willnot even get detected by this…get SIND: 0 everytime, yet Rogers SIM works fine. I tried 4 different Sasktel Sim cards and no go.

Anything else I can try changing to get it to read these cards?

Comment by Keenan | February 9, 2011

Sasktel does not seem to offer a 2.5G GSM cellular network, only 3.5G. The GSM module used in the Sparkfun shield therefore will not work withSasktel.cheersjohn

Comment by John Boxall | February 9, 2011

Thanks for the prompt response, sorry I should have caught that but I am just getting started. Is there another shield or cellular module that wouldwork with 3.5G and this code?

Comment by Keenan | February 10, 2011

To be honest I have not seen a 3G GSM shield on the market. With regards to your other question, it is not the SIM card – 2G and 3/3.5G arephysically separate networks, Sasktel doesn’t run a 2G network.Looks like you’d have to use Rogers in your area.cheersjohn

Comment by John Boxall | February 10, 2011

12. Thanks John I appreciate the help, I have wrapped my head around how the module works now and without your response I never would have known why

Comment by Keenan | February 11, 2011

13. Did you have to do anything special to interface the 5v Arduino soft serial pins to the 3.3v pins on the cell chip?

Comment by Patrick | February 11, 2011

Hi PatrickNo, the Sparkfun GSM shield takes care of the voltage regulation for you.cheersjohn

Comment by John Boxall | February 11, 2011

14. solution for “+CME: ERROR 4!

there is a bug in the text message sample code.cell.println(26,BYTE);needs to change tocell.print(26,BYTE);

the println screws up things by adding a carriage return, it seems.

see this thread:http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1250396340/27

Comment by Dennis | February 18, 2011

Yes, this is a fix. But note that there are timing issues for those of you using a terminal. I could not get it to work by just sending byte 26 after a text field.Then the unit waited around for a CR before sending the message. Then the message was sent but unit went into ‘broken’ state, just returning “+CMEERROR: 4!.

Comment by Chris | May 16, 2011

Page 11: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Comment by Chris | May 16, 2011

15. Hello JhonI’m trying to conect Arduino Uno with a GSM module and run your aplication example 26.1.When I connect with module gsm only obtain “Starting SM5100B comunication…” and a few list of ilegible character, always the same. Could you help me?Thanks anticipated

Comment by Trudi | February 21, 2011

Hello TrudiIt looks like your GSM module is set to a different serial speed. The model I have used (the SM5100B) from Sparkfun should be set to 9600bps. Howeverthis may not be the case with yours. Try changing the data rate in your terminal window starting from 115200 bps and see what happens. If the output isstill illegible, try the next slower speed and so on.cheersJohn

Comment by John Boxall | February 21, 2011

Hi JohnThanks for faster reply. I have a SM5100b for Sparkfun buy in Spain. I test every baudrate 115200 and slowers and it´s the same. In cose of 9600bpsI obtain “Starting SM5100B Communication… !ù–¤ÄJù!ÿ”What can I do?

Comment by Trudi | February 22, 2011

Ok. Please be sure you have the external power connected as described (5V up to 2 amps), and the aerial connected. Then try example 26.1 again.If this still doesn’t work at any terminal speed then I can only suggest that you have a faulty module.cheersjohn

Comment by John Boxall | February 22, 2011

16. I don’t work with adruino’s but I do work with AVR’s and XMegas. I was just wondering what the digitalwrite(13, High) and Lo are doing do the sm1500bmodule.

Nice work btw, great tutorial.

Comment by Daryll Donais | March 24, 2011

HelloThanks for your positive feedback.(Most) Arduino boards have an LED hard wired to digital output 13. I am just turning the LED on and off to indicate progress in the sketch fortroubleshooting. You can ignore it.cheersjohn

Comment by John Boxall | March 24, 2011

Ok thanks. I thought perhaps it was connected to the reset of the smb5100B or something.

Comment by Daryll Donais | March 24, 2011

17. How can I read the incoming number? (caller id)So like your ring example I can use the incoming number for example:

if incoming_number == ’555555123!{do this or that

Comment by Theo | April 11, 2011

Good question – working on it now, but am rather busy with the day job. Keep an eye out for GSM III.cheersjohn

Comment by John Boxall | April 11, 2011

18. I have some trouble in getting the shield to work with my Arduino Mega 2560, the issue is similar to the one the earlier commenter, Trudi is having. A prepaidsim is inserted and an antenna connected to the shield. I have connected the D2 & D3 to Serial 1 on the Arduino. And I have connected a 5V (3A max) powersupply to the cellular shield and have made a connection between the GND of the shield and the Arduino. When the 26.1 sketch for Mega is is loaded just a stringcontinuous of blank characters show up on the serial output of the Arduino. I have tried changing the baudrate of the shield, changing serial ports and tryingconnecting the Vin, 3V of shield to the Arduino and using the same power supply for both the Arduino and the shield but I can’t get any recognisable text tocome up. Any ideas as to what else I should try?

Thanks John,Tanaka

Comment by Tanaka | April 21, 2011

HelloPlease don’t connect anything to the 3V pins, that is unnecessary. When you said that you changed the baud rate of the shield – did you change the baudrate in the serial monitor box, or the actual baud rate the shield operates on? The shield should be preconfigured to 9600 bps however a few slipped out ofSparkfun with the rate set at 115200. Try this fix from Sparkfun – Fix: Connect to pins 2/3 with any serial TTL connection (FT232 breakout, FTDI cable,etc…) Connect at 115200 baud, and you should see some commands output by the 5100 (“+SIND: 4", etc..) type in this command to reset the baud rate to9600: “AT+IPR=9600" It should respond with “OK”. (This setting is saved in non-volatile memory.)

john

Page 12: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

john

Comment by John Boxall | April 21, 2011

Hello John,Thanks for quick response. I changed the baud rate on Serial1 to 115200 when it is initialised (the one to which the the shield is connected) but stillnothing happened, ie. I got a bunch of blank characters in the serial monitor after “Starting SM5100B Communication”. I will try the sparkfun fix,but I don’t see why it would change anything as the serial connections on the mega should be able to run at 115200.Tanaka

Comment by Tanaka | April 21, 2011

Ok. If you can replicate example 26.1mega exactly both in hardware and software (trying both serial port speeds) and the blank characters stillappear, then you must have a faulty module.john

Comment by John Boxall | April 22, 2011

19. I am using the code from Example 26.3 and it works. But it can’t send the second message consequently. Then after a while it will send message again. This ismy code for sms:while(c<=3){Serial1.println("AT+CMGF=1");Serial1.println("AT+CMGS=\"+6593958587\"");Serial1.print("Hi?\n");Serial1.println(26,BYTE);delay(1000);Serial.println("\nMsg sent…");delay(15000);c++;}Is there any missing?

Comment by Hao | May 18, 2011

HelloYes, changeSerial1.println(26,BYTE);toSerial1.print(26,BYTE);

have funjohn

Comment by John Boxall | May 19, 2011

20. Hi John, I tried to interface my Arduino Duemilanove Board and ATMega328P with a SIMCOM SIM300EVB and SIM900BE. I uploaded the example 26.1and it seems work fine, it get Call Ready, but if i try to send any AT command to the module, it doesn’t answer. I tried 26.2 and nothing happens. Have you anyadvice?

Thanks

Comment by NicolaG | May 19, 2011

HelloI don’t have access to one of those modules so cannot test it out. However general advice includes ensuring the power supply is correct with regards tovoltage and current, you have an appropriate antenna connected, and your cellular network supports the frequency of your module. Finally, some modulesuse different AT commands than that of the SM5100b used in my tutorial, so you would need to find the equivalent in your data sheet and substitute themin the sketch.John

Comment by John Boxall | May 19, 2011

21. This is great tutorial John…I have a question, i use wavecom with wismo gsm module inside. This gsm modem have an internal rs232 serial link connection. Should I use additional rs232circuit before I connect this modem to my arduino kit?any help will be appreciate

thanks

Comment by mirws | June 6, 2011

No idea. Need a link to your module so I can read about it first.

Comment by John Boxall | June 6, 2011

John, as you wish, this is a documentation about my modem gsm

http://www.ozeki.hu/attachments/588/M1206B_Manual.pdf

Comment by wiro | June 6, 2011

Ah.You will need an Arduino RS232 interface board. For example – http://shieldlist.org/cutedigi/rs232Please note I don’t support this GSM module.John

Comment by John Boxall | June 6, 2011

Page 13: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Comment by John Boxall | June 6, 2011

Thanks John, I’ll trying…

Comment by wiro | June 6, 2011

22. NewSoftSerial cell(2,3);Can you use any other pins than pins 2 and 3 for the communication between the Arduino and the shield? When I tried changing those numbers, the applicationwon’t work anymore. I will appreciate any comments or directions on this. Thank you

Comment by Eric | June 23, 2011

Hi EricThe shield has TX/RX hard-wired to digital pins d2/d via the jumper switch. See the schematic –http://www.sparkfun.com/datasheets/DevTools/Arduino/cellular%20shield-v12.pdfYou can use other digital pins but you will need to physically rewire your shield.cheersjohn

Comment by John Boxall | June 23, 2011

Thank you John for your prompt answer. I have a GPS shield that I would like to connect to the Arduino board but that shield also requires the useof pins 2 and 3. So the only way I can connect those two shields on the same board is to change the physical wiring of the shield?

Comment by Eric | June 24, 2011

Yes

Comment by John Boxall | June 24, 2011

23. Sorry to bother you again John but can you provide some guidance on how I could rewire those pins? It seems like they are internally connected and there is noexternal wires that I could physically disconnect and reconnect to the pins that I want.

Comment by Eric | June 25, 2011

You will need to keep the shields physically separate and run wires between them for GND, 5V etc.

Comment by John Boxall | June 25, 2011

24. Hi John.

I’ve said it before but I’ll say it again – Great Tutorial.

You have assisted me no end on my path from “neverevenheardofduino” to “vagueconceptofwhatishouldbedoingduino” and the progress continues.

Can I run this one past you…

Id like to be able to extract specific data from an SMS such as the date-stamp or the senders number.Now, while I can see these quite clearly as a human being reading from my terminal, to get the sketch to see the right parts I’m scratching my head somewhat.

My thinking is at the moment that I should import the entire SMS into an array (can an array have numbers and letters ??) and then by knowing which slots in thearray holds the date stamp, extract these and Serial.println them.

Is my logic correct so far ?

My ultimate goal is to set the time and date of a real time clock using a sent-to-self SMS.

This would mean as long as the phone network’s clock was correct, mine would be to (within a second or so)

I’d love to hear your thoughts.

Thanks in advance.

Tom

Comment by Tom Mudd | June 30, 2011

Yes – you could use an array of characters. Although that method would work, personally I would use a GPS module and take the time from that. The onlycatch would be that you have to have the sketch allow for daylight-savings time if you have it in your area. But even a GPS module, DS1307 real-timeclock IC is cheaper than GSM module etc.

Comment by John Boxall | June 30, 2011

Hi John.

I appreciate what you’re saying but since a GSM module is an inherent part of my project anyway, I’m still planning to use GSM and not GPS.

Can I run my sketch past you please ?

I’ve got it 98% working.

Using this sketch I can extract the time and the data and also the senders number. Where it all falls down though is the process of loading the actualtext content of the message into the array.At this point, of the array loading procedure, the data put into the array slots appears to be nothing more that “full stops” (periods) or whatever they’recalled.My theory at the moment is that the array loading is upset by a Carriage Return character.How do you think I can avoid this ?

Page 14: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

How do you think I can avoid this ?

Here’s my sketch:

/*Tom Mudd’s first attempt at an array-loading sketch. 08/07/2011This sketch reads in the cell serial data from the Sparkfun GSM module into a 201 slot array.By then recalling specific slots in the array, data can be extracted from the SMS such as the senders numberthe time and the date.This is then constructed into serial messages and sent to the PCs serial monitor program.

PLEASE NOTE – for the 1st run of the array loading loop, the array fills with gibberish from the GSM boot up.Once the array has finished filling, the arrival of an SMS will trigger the loop for a second time, this time filling up the array with valid data.

Heavily influenced and inspired by John Boxall’s amazing GSM tutorials from http://tronixstuff.wordpress.com. Thanks John !

*/

#include //Include the NewSoftSerial library to add extra Arduino serial ports (to serial commands to the cellular module)

NewSoftSerial cell(2,3); //Create a ‘fake’ serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.

void setup()

{cell.begin(9600);Serial.begin(9600);Serial.println(“***WELCOME***”);Serial.println();Serial.println (“Booting up the GSM module”);delay(5000); // 15 seconds boot up time (with a 3,2,1 counter) before sending the setup AT commands to the GSM moduleSerial.print(“3….”);delay(5000);Serial.print(“2….”);delay(5000);Serial.println(“1….”);cell.println(“AT+CMGF=1!); // set the GSM module to text message mode.Serial.println(“sending AT+CMGF=1!); // report the same to the PC for debuggingdelay(200);

cell.println(“AT+CNMI=3,3,0,0!); // set the GSM module to output SMS data to its serial port and not SIM cardSerial.println(“sending AT+CNMI=3,3,0,0!); // report the same to the PC for debuggingdelay(200);

cell.println(“AT+CMGD=1,4!); // delete any old SMS messagesSerial.println(“sending AT+CMGD=1,4!); // report the same to the PC for debuggingdelay(2000);

}

void loop(){

/* the first process below is intended to capture the serial data from the GSM module and load it into an array*/

char message[200]; //create a 201 slot array to hold the incoming text message charactersif(cell.available() >0 ) //wait for serial data to appear from the GSM module{int i;Serial.println(“Data coming in from the GSM module”); //debug reporting to the PC userSerial.println();for (i = 0; i < 200; i++) { //for loop to run through all the slot values of the arraymessage[i] = cell.read(); //load whatever character is coming from the GSM module into the relevant slot of the arraySerial.print (i); //debug reporting for the PC userSerial.print (" is – "); //debug reporting for the PC userSerial.println (message[i]); //debug reporting for the PC userdelay(50); //included just to make sure the for loop doesnt run too fast for the serial data to load frm the GSM module}

/* This second process is now intended to select parts of the array data and Serial.print it out to the PC*/

//cell.println("AT+CMGD=1,4"); // delete all SMSSerial.println("");Serial.print ("The sending number was ");Serial.print (message[7]);Serial.print (message[8]);Serial.print (message[9]);Serial.print (message[10]);Serial.print (message[11]);Serial.print (message[12]);Serial.print (message[13]);Serial.print (message[14]);Serial.print (message[15]);Serial.print (message[16]);Serial.print (message[17]);

Page 15: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Serial.print (message[17]);Serial.print (message[18]);Serial.print (message[19]);Serial.println ("");Serial.print ("The date was ");Serial.print (message[45]);Serial.print (message[46]);Serial.print (message[44]);Serial.print (message[42]);Serial.print (message[43]);Serial.print (message[41]);Serial.print (message[40]);Serial.print (message[39]);Serial.println ("");Serial.print ("The time was ");Serial.print (message[48]);Serial.print (message[49]);Serial.print (message[50]);Serial.print (message[51]);Serial.print (message[52]);Serial.print (message[53]);Serial.print (message[54]);Serial.print (message[55]);Serial.println ("");Serial.println("waiting at end of cell serial available loop");//cell.println("AT+CMGD=1,4"); // delete all SMScell.flush();delay (3000);

}}

Comment by Tom Mudd | July 9, 2011

HiTwo things spring to mind…0) message[i] = cell.read(); to message[i] = char(cell.read()); or1) Change ‘int i’ to ‘char i’I’m running from memory at the moment as I lent my GSM shield to someone else cheersjohn

Comment by John Boxall | July 10, 2011

25. I’m trying to get this to work with an arduino mega.I’ve followed the tutorial a number of times, but when I go into the terminal to start communication, I get this back:

Starting SM5100B Communication…è!!+SIND: 1

+SIND: 10,”SM”,1,”FD”,1,”LD”,1,”MC”,1,”RC”,1,”ME”,1

+SIND: 8

+SIND: 3

+SIND: 4

The three digits of special characters change depending on which AT+SBAND command I use, but nothing changes besides that, and I’ve not been able to findgoogle for any clues as to what, if anything, I can do.

Really stumped.

Comment by David Hendry | July 11, 2011

hi David+SIND:4 means the module has registered with the network and is ready to go. Can you get it to make a test call? Such as in example 26.2-Mega(https://sites.google.com/site/tronixstuff/home/arduino-tutorial-series-files/example26p2mega.pde)

Comment by John Boxall | July 11, 2011

I cannot.

it does not seem to want to do anything other than what I’ve already described.

Comment by David Hendry | July 11, 2011

That’s really weird, it should be good to go at +SIND: 4. If you like, could you please email me the sketch your are trying, and a description of howyou have the hardware setup, etc? john at tronixstuff dot com.cheersjohn

Comment by John Boxall | July 12, 2011

Any luck figuring out what the problem was. I am using a tmobile account and am having the same problem.

Page 16: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Any luck figuring out what the problem was. I am using a tmobile account and am having the same problem.

Comment by oydshaan | August 16, 2011

26. You know to make a GPRS connection to a server using tcp gprs shield

Comment by lourival | July 18, 2011

Due to time constraints I cannot help with GPRS data projects.

Comment by John Boxall | July 18, 2011

27. Additional info If I use the SIM from my Iphone i get the following:Starting SM5100B Communication… +SIND: 1

+SIND: 10,”SM”,1,”FD”,1,”LD”,1,”MC”,1,”RC”,1,”ME”,1

+SIND: 3

+SIND: 4

+SIND: 8

Comment by Builder | July 18, 2011

It seems to be making a successful connection, (SIND 3 then 4), but then losing it (SIND 8). Please check all connections to shield, including your antennaand shield pins are soldered well; check your power supply is capable of delivering up to 2 amps of current; and finally the reception. Finally, AT&T mayhave an issue with using GoPhone SIM cards in non-phone devices, it would pay to check with them.CheersJohn

Comment by John Boxall | July 18, 2011

Does the system need the battery pack just to register and be on the system? Currently I do not have the battery connected becasue the Arduino and5100B are already powered by the computer and I am not making or receiving any calls. Do I simply disconnnect the power pins on the 5100Bleading to the Arduino and connect to the battery to the 5100B? It would probably cause an issue if I feed a 5v battery to the same power source asthe USB?

Comment by Builder | July 19, 2011

Yes, you need the external supply at all times. I cannot stress this enough. The module communicates with the cellular network even when not in acall or transceiving data.

Comment by John Boxall | July 19, 2011

28. I’m a little confused how to hook up the battery at the same time the GSM Shield is plugged into the Arduino. Do i smply plug the + and – of the battery into theVin and gnd of the GSM shield while it is connected to the Arduino.. Do I disconnect the shield from the arduino and only connect pins 2&3. The Arduinoalready has 5v coming in from the computer. I’m concerned about shorting something or sending 10V to the wrong part.

Comment by Builder | July 19, 2011

You need a regulated 5V power supply with the capacity to deliver up to 2 amps of current. + goes to the 5V pin, – goes to GND. It’s ok to leave the USBconnected.

Comment by John Boxall | July 19, 2011

I’ve got a lithium backpack connected as you specified, tightened the antenna a bit I now get:

Starting SM5100B Communication… +SIND: 1

+SIND: 10,”SM”,1,”FD”,1,”LD”,1,”MC”,1,”RC”,1,”ME”,1

+SIND: 3

+SIND: 0

+SIND: 10,”SM”,0,”FD”,0,”LD”,0,”MC”,0,”RC”,0,”ME”,0

+SIND: 7

It looks like SIND: 7 indicates that its ready for an emergency call. This is with the GoPhone Sim

with the Iphone results are:Starting SM5100B Communication… +SIND: 1

+SIND: 10,”SM”,1,”FD”,1,”LD”,1,”MC”,1,”RC”,1,”ME”,1

+SIND: 3

+SIND: 4+SIND: 8

Page 17: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

+SIND: 8

+SIND: 11

OK

Comment by Builder | July 20, 2011

Your experience with the iPhone SIM shows your hardware is OK. I have some anecdotal evidence that AT+T could be blocking non-handset GSMfrom using GoPhone accounts. Call AT+T and check this for yourself.

Comment by John Boxall | July 21, 2011

29. Tried T-mobile SIM and system worked flawlessly. Don’t buy AT&T GoPhoneThanks for your help.

Comment by Builder | July 21, 2011

30. Hello Iam Agung from Bali Indonesia..I want to ask, Is usb modem is used as a substitute shielt GPRS by using the usb converter – ttl? and what coding is the same as in example 3.26?

sorry for my english to bad. I can’t speak english well..but I hope you can help me to this problem

Comment by celulux | July 23, 2011

HelloGood question. I found this on my to-do list:http://finch.am/projects/arduinogsm/which may be of interest, however have not tried it myself yet.have funjohn

Comment by John Boxall | July 23, 2011

yes, I’ve read the article. but if I can, I wish not to dismantle the modem. Is converter USB to TTL can be used? and use the coding as an example26.3 ?or Is coding example for 26.3 can be used on the application of that article?

Comment by celulux | July 23, 2011

You really need to follow their instructions – I have not tried this yet, so will not comment. Please direct your questions to the publisher of the article.

Comment by John Boxall | July 24, 2011

31. I’m fairly new to working with the Arduino and GSM modules, so i have kind of a dumb question. I wanted to know, if this module can be used to receive anddisplay text messages as well, say on an LCD display…

Comment by Sagar | July 28, 2011

Yes, that can be done. People use the string functions to extract the SMS data in the serial line from the GSM module.

Comment by John Boxall | July 28, 2011

32. Im new to working with Arduino and Gsm modules so i would like to know how i would end the text message with . I know that the ASCII value of it is 26 butdo i finalise my message with 26 or do i add it?Please let me know.Thankyou

Comment by Feda Adel | August 13, 2011

Have a look at example 26.3 sketch in chapter 26 – it is self-explanatory. Anyhow, we usecell.println(26,BYTE); // ASCII equivalent of Ctrl-Z

Comment by John Boxall | August 13, 2011

Yes i understand that, I mean through the terminal program. After i send this command AT+CMGS=”xxxxxxxxxx”, i get this prompt > .. do i justput the text there dont i need to finalise it with the equivalent of too? If so how do i do it? I have been trying yet it aint giving me any error responsesnothing.

Comment by Feda Adel | August 14, 2011

Yes, enter the text and finish it with Ctrl-Z

Comment by John Boxall | August 15, 2011

33. Ctrl-Z just undoes what i just wrote .. tried it not working. Do i end it with its ASCII equivalent like the sketch 26.3? OR > “It’s a beautiful day today” i press ctrl-z right after it without pressing enter and nothing happens. Just undoes the command i had to the previous doesnt really end the text i send . Am i missingsomething?

Comment by Feda Adel | August 15, 2011

Which terminal software are you using?

Comment by John Boxall | August 15, 2011

34. The same on you used in this tutorial, i downloaded it and i managed to make calls but i cant get the texting working ..

Page 18: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

34. The same on you used in this tutorial, i downloaded it and i managed to make calls but i cant get the texting working ..

Comment by Feda Adel | August 15, 2011

Can you run example 26.3 successfully?

Comment by John Boxall | August 16, 2011

35. For any one interested, I have used the cellular shield with an Arduino for DIY gate access control:

http://dinofizz.wordpress.com/projects/diy-gsm-enabled-gate-access-control-system/

Comment by dinofizz | August 19, 2011

Congratulations, very well done

Comment by John Boxall | August 19, 2011

36. I’m thinking of creating something like this for my senior project! Is it totaly fine for you to use some of the codes you posted here? Also if there is any troublecan i contact you?

Comment by Besmir | August 31, 2011

Have fun with your project. I am happy to answer general questions about basic operation but cannot delve into the depths of custom sketches with you.cheersjohn

Comment by John Boxall | September 1, 2011

37. I did manage to find some help at local Radio Shack this afternoon. They sold me an ac-to-dc power adapter for 3/5/6/6.5/7/7.5 VDC, 2A, and an adapter pigtailthat gives me bare wires I can plug into my Arduino. I checked it’s output with my multimeter, and it’s 5.24V (which I guess is close enough?). I plug the wiresinto the GND and VIN pins on the shield. The red LED on the shield lights up nice and bright. I have a correctly provisioned SIM (AT&T). I have an antenna.When I power everything up, I still only get “Starting SM5100B Communication…” in the terminal. With my multimeter, I’m not reading any amperage readings,but I’m not surprised because I don’t think my chip is doing any work….

I guess my biggest question is still about the power supply. Am I don’t the correct thing by plugging it into VIN and GND? Should I buy and adapter to it thatwill allow me to plug it into the DC socket on my Arduino instead? Or perhaps I’m completely off base and should be doing something entirely different.

Any other suggestions for how I can troubleshoot this? I’m learning a lot (which is awesome, thanks again for the great tutorial!), but I’m scratching my head.Thanks!

Comment by Greg | September 7, 2011

As stated in article, please use the 5V and GND pins, not Vin. Do not plug into Arduino DC socket.

Comment by John Boxall | September 7, 2011

Thanks for the continuing responses to your great tutorial. I think I am doing everything as described, but am continuing to have no luck with theexample. I’m using an Arduino Uno, the SparkFun shield, a Radio Shack power supply rated 2 amps, set to 5V, plugged into the 5V and GND pinson the shield. I have a working SIM and an antenna. I have tried with 2 different GSM chips — one that came with the cellular shield, and onepurchased separately. I have tried 2 different SIM chips — an AT&T postpaid and a newly activated TracFone prepaid. I have soldered the longArduino headers to the shield and inserted the shield in the Arduino. There are no other connections between the shield and Arduino, or the shieldand anything else. I have the USB cable between the Arduino and the computer to monitor the Serial traffic. My serial monitor is set to 9600. I copy-pasted the code from the tutorial, cleaned up formatting that was lost in the copy-paste, and uploaded it to the Arduino.

When I start up everything, the LED on the cellular shield glows bright red, the LED on the Arduino glows bright green. In the serial monitor, I get“Starting SM5100B Communication…”, followed by a newline, followed by whitespace, followed by unprintable characters. (“!ÿ!Ra!à!ÿ!ÿ!ÿ”).

I have tried adjusting the speed in the Serial Monitor. The behavior I described above is what happens at the following speeds:28800, 14400, 9600.At the other speeds (115200, 57600, 38400, 19200, 4800, 2400, 1200, 300), the Serial Monitor displays a string of unprintable characters. Whendoing these tests at different speeds, I did *not* change the code in the Arduino sketch to match the speed in the serial monitor for everycombination. (Should I?) I tried changing Serial.begin() to 14400 and got unprintable characters for every speed setting in the Serial Monitor.

I note that other comments indicate the suggestion of a faulty module after receiving results like I am finding. Are there any further software tests Ican perform that would be helpful for troubleshooting? Are there hardware tests I can perform on the cellular shield independent of the Arduino that Ican perform that would help verify that the module is either functioning correctly or is faulty?

Comment by Greg | September 11, 2011

Kudos for the trouble shooting, but yes – sounds like a dead shield.

Comment by John Boxall | September 12, 2011

Interim update: If I go into the NewSoftSerial.cpp and change the interrupt timings for our 16MHz chip to the following I get about 27 characters perchunk before it loses synchronization. That’s enough to send the AT command to the SM5100B to change its baud rate to something moremanageable. But just in case anyone else runs into this problem, here are the timing values (using NewSoftSerial library version 10):

#if F_CPU == 16000000

static const DELAY_TABLE PROGMEM table[] ={// baud rxcenter rxintra rxstop tx{ 115200, 1, 16, 16, 12, },

(… and so on…)

Comment by Jens | September 18, 2011

Page 19: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Comment by Jens | September 18, 2011

Allright here is my conclusion: (1) the hardware is overwhelmed, but (2) it can be made “well enough” to at least change the SM5100B baud rate to9600. Here are the parameters that worked the best for my NewSoftSerial library:

#if F_CPU == 16000000

static const DELAY_TABLE PROGMEM table[] ={// baud rxcenter rxintra rxstop tx{ 115200, 1, 16, 15, 14, },

… and so on. In particular the rxcenter, rxintra, and rxstop parameters have no wiggle room. Note that rxintra and rxstop have to be set different …Depending on the Arduino Uno readout baud rate (9600 versus 115200) there is a two-character artifact at different places of the long +SIND: reply.That indicatees that the NewSoftSerial library works in principle but that the hardware (the Arduino) just can’t process the 115200 SM5100B readoutbaud rate.

The command to send to the GSM chip to reset its (default) baud rate is:

AT+IPR=9600

If it works as documented, the setting is persistent. We’ll see.

Hope this helps … Thanks, Jens

Comment by Jens | September 18, 2011

38. How do i send ASCII “@” to this module. I tryed with cell.print(64,BYTE); but get “i” in SMS i receive.

Comment by zerous | September 9, 2011

It may be your phone, can you try a different one? Some phones made for certain language markets don’t interpret ASCII symbol characters properly.

Comment by John Boxall | September 10, 2011

ASCII “@” is 64, but Shield use different character set GSM 03.38. according to it 64 is lowered “¡”. “@” is 0 according to GSM 03.38. I must send0 to the shield, my problem is that shield dont understand 0 when i send it to it.

http://www.csoft.co.uk/sms/character_sets/gsm.htm

Comment by zerous | September 13, 2011

Ah ok. It seems that this may be a limitation of the shield. This I can’t help you with, perhaps contact the retailer for more support advice.Apologiesjohn

Comment by John Boxall | September 13, 2011

Anyway, thank you so mauch for your tutorial

Comment by zerous | September 14, 2011

You’re welcomejohn

Comment by John Boxall | September 14, 2011

Just to answer my own question. To send @, use ASCII “128!, it works. Here in Sweden you can send a SMS to a special number containing aemail adress and text and receiver gets it after few seconds in his email box.

Comment by zerous | September 17, 2011

Fantastic – thanks for that information.

Comment by John Boxall | September 17, 2011

39. Hey! I’m wondering if the arduino is powered up with a usb will it cause it to be unable to work?

Comment by Clement | September 12, 2011

Do not use USB for power. Please follow instructions in tutorial.

Comment by John Boxall | September 12, 2011

40. Thanks again for the encouragement and the tutorial. I purchased a second shield and am experiencing the same behavior. While possible, I find it unlikely that Ihave two dead shields. I hope I’m not doing anything that would destroy them. The only modification I made was to solder the Arduino headers to the board, andI was very careful doing that. Are there any hardware tests I can can perform on the shields that would verify their integrity? I’ll also ask this question to theGoogle Group tonight since the troubleshooting for this seems to be out of the ordinary. Thanks!

Comment by Greg | September 15, 2011

You could use the continuity function of a multimeter to check for shorts between the pins on the shield, also check that you’re getting 5V from the powersupply.

Comment by John Boxall | September 15, 2011

41. Greg – thanks for letting me have the hardware over the weekend. Turns out that the SM5100B is trying to communicate with the Uno at 115200 baud. When Itell NewSoftSerial to try this baudrate it approximately lines up … but not quite. Roughly every 10th to 50th bit is not properly aligned, I can manually move the

Page 20: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

tell NewSoftSerial to try this baudrate it approximately lines up … but not quite. Roughly every 10th to 50th bit is not properly aligned, I can manually move thebits around and see the five occurrances of the “+SIND: ” sequence from the screenshot above. From the NewSoftSerial source code (.library_version() = 10) Isee that it registers interrupts and listens to individual pins. The tricky part will be to set the default baud rate to something more comfortable, using the“AT+IPR=9600! command for example, while it’s currently not communicating . I’ll tinker around some and will post here what I came up with. It would begreat to have a software solution, of course. I already see hardware hooks in the compiler directives in the NewSoftSerial code, maybe we can update the libraryfor our hardware (ATMEGA328P-PU at 16MHz).

Comment by Jens | September 18, 2011

42. hello sir, i want to connect Arduino with wavecom modem. question, is the code same with code in example 26.3 ? If yes, am I need to use rs232-ttl converter?thanks before ..sorry for my english too bad :’)

Comment by agung arjaya | September 21, 2011

Sorry, no idea – don’t have that modem.

Comment by John Boxall | September 21, 2011

43. Hi John,

First of all thanks for your tutorial. I’m using an Arduino Uno with the shield to send and receive SMS messages for a project, however when I run the firstsketch, I only get “Starting SM5100B Communication…”.

I’ve tried different baud rates, but still get nothing. I have a rubber ducky antenna that I got from Sparkfun and am pretty sure the Sim card works as it is the one Iuse from my regular phone. I really want to get this to work an it has been three days. Is there something I might be missing?

I’ve also tried this example included with the NewSoftSerial library (if that’s worth anything):

#include

NewSoftSerial mySerial(2, 3);

void setup(){Serial.begin(57600);Serial.println(“Goodnight moon!”);

// set the data rate for the NewSoftSerial portmySerial.begin(4800);mySerial.println(“Hello, world?”);}

void loop() // run over and over again{

if (mySerial.available()) {Serial.print((char)mySerial.read());}if (Serial.available()) {mySerial.print((char)Serial.read());}}

It only prints “Goodnight moon!”, but then again I’m really not sure how it is supposed to behave. I really hope that in my naivety I’m doing something wrongand that my module isn’t faulty. Any help will be greatly appreciated. Thanks,

Manu

Comment by Manu | October 2, 2011

If you upload example 26.1, connect the antenna, 5V 2A power supply and set the serial monitor box to 9600 (or 115200) and nothing comes up, you havea faulty shield.cheersjohn

Comment by John Boxall | October 3, 2011

Sorry, the comment form is closed at this time.

« Previous | Next »

Monthly CompetitionEnter now for a chance to win great prizes!

YouTubeVisit tronixstuff on YouTube for our range of videos

Arduino TutorialsClick for Detailed Chapter Index

Page 21: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Chapters 0 1 2 3 4Chapters 5 6 6a 7 8Chapters 9 10 11 12 13Chapter 14 - XBee Chapter 15 - RFID Chapter 16 - Ethernet Chapter 17 - GPS part I Chapter 18 - RGB matrix Chapter 19 - GPS part II Chapter 20 - I2C bus part I Chapter 21 - I2C bus part II Chapter 22 - AREF pin Chapter 23 - Touch screen Chapter 24 - Monochrome LCD Chapter 25 - Analog buttons Chapter 26 - GSM mobile - part I Chapter 27 - GSM mobile - part II Chapter 28 - Colour LCD Chapter 29 - TFT LCD Chapter 30 - Arduino + twitter Chapter 31 - Inbuilt EEPROM Chapter 32 - Infra-red control Chapter 33 - Control AC via SMS Chapter 34 - SPI bus part I Chapter 35 - Video-out Chapter 36 - SPI bus part II Chapter 37 - Timing with millis() Chapter 38 - Thermal Printer Chapter 39 - NXP SAA1064 Chapter 40 - Push wheel switches Chapter 40a - Multiple wheel switches Chapter 41 - More digital I/O Chapter 42 - Numeric keypads

Search

Search

RSS Feeds

Subscribe in a reader

Join my update list!Enter your email address to receive notifications of new posts by email.

Join 378 other followers

Subscribe!

CategoriesSelect Category

Previous postsJanuary 2011

M T W T F S S

« Dec Feb »

1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 3031

ArchivesOctober 2011September 2011August 2011July 2011June 2011May 2011

Page 22: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

May 2011April 2011March 2011February 2011January 2011December 2010November 2010October 2010September 2010August 2010July 2010June 2010May 2010April 2010March 2010

Contact informationFeel free to contact me anytime:email - john at tronixstuff dot com

How you can help…Check out tronixdeals or any donations are always gratefully appreciated!

Google GroupWhy not join our discussion group? Fun and learning with electronics!

Creative CommonsAll the original material in this website, unless noted otherwise, is covered under a Creative Commons Attribution-Non Commercial-Share Alike v3.0 license.Please email me if you see any mis-attributions or would like to use my content in different circumstances.

EEWeb CommunityRead my interview on the EEWeb Electrical Engineering Community website.

on twitter…If for some reason you use Microsoft Visual Studio, you can program an Arduino with it... http://t.co/tgKxjwzO 7 hours ago@AltronicsAU @PerthArtifact Arduino! Yes - what are you waiting for? 11 hours ago@andrewjand True, but wouldn't work anymore. Why do so many Jaycar staff have beards? 12 hours agoPile of Arduinos hooked up in Rube Goldeberg-esque chain reaction (video) http://t.co/BvWTIyBY 13 hours ago@Uncl_Vernon @alangarf Or the "choke a chicken" toy. 22 hours ago

Flickr Photos

More Photos

Find me on…element 14facebookflickrfriendfeedGoogle+posteroustumblrTwittervimeo WhirlpoolYoutube

Interesting Sites

Page 23: Tutorial: Arduino and GSM Cellular – Part One « t r o n i ...

Interesting SitesDavid L. Jones' eev blogFreetronics Arduino Geniuses!Little Bird Electronics Service Powered Electronics!Silicon Chip magazine Always a great read!Amazing Arduino Shield Directory The Amp Hour podcastEEWeb Elec Engineering ForumSuperhouse.tv High-tech home renovation Mr Dick Smith OA

Nuclear weapons = global suicideIn a war with nuclear weapons, everybody loses. Please check these out: Count Down to ZeroThe War GameThreads

Site infot r o n i x s t u f fTheme: Andreas04 by Andreas Viklund. Blog at WordPress.com.