SIM900 GSM shield: How to switch between software and hardware UART


I am using a Arduino with an integrated GSM shield of The board is called GBoard of Iteadstudio ( I am using the new GSM library of ( The board is running nicely when I set the SIM900 module to software UART.

Now I tried to run the SIM900 module in hardware UART mode. I set the jumpers like in the picture attached (UART hardware mode). But I think I have to change somewhere also PIN settings. In the GSM.cpp file there is the following code.

//De-comment this two lines below if you have the
//first version of GSM GPRS Shield
//#define _GSM_TXPIN_ 4
//#define _GSM_RXPIN_ 5

//De-comment this two lines below if you have the
//second version og GSM GPRS Shield
#define _GSM_TXPIN_ 2
#define _GSM_RXPIN_ 3

I toggled the comments and de-comments, but this was not the right place.

Has anybody an idea how to solve this?

Can someone also explain me, what is the advance/disadvantage when I am using software or hardware UART for the GSM module. Or what is the difference? Is one of both faster?

Thanks a lot in advance.


The library use the soft serial to comunicate with SIM900, You should change the soft serial command to hardware serial command More info

Old Shield

New shield

Thank you for your answer.

First I tried, to switch to the MEGA library to use Hardware Serial. I have done this: 1) In the GSM.h decomment Arduino Mega //#define UNO

define MEGA

2) In HWSerial.h decomment Arduino Mega

define MEGA

But it can not compile: SIM900.cpp:143: error: '_tf' was not declared in this scope

The problem is, that "_tf" is only created in GSM.h if it is a UNO: public:

ifdef UNO

WideTextFinder _tf;


I have just seen, that the error is posted here:

Can anybody help me, how I can fix it, to use HardwareSerial with my GBoard?

Hi, I'll test it immediatly