There are lots of websites that talk about using a GSM shield with an Arduino, in addition to the Arduino IDE itself. There are also several GSM libraries out there, or you can use AT commands to roll your own. I couldn't find any that talk about using the mini development module so I thought it may be useful to publish this 'ible. At this stage I have no library preferences and no particular desire to go it alone.

Please note, while I have investigated my module, there seem to be many versions of the mini module and I will leave it to you to experiment and work out the details of your version for yourself - its quite easy. Also note that the same module PC board supports either the Sim900 or the Sim900A chip and they are used similarly, so I will assume a Sim900.

Some details...

My mini module is version 3.4 and the front and back is shown in the photos. Electrodragon.com publishes a schematic for their module, and it differs slightly from my module. The differences are:

  • The Electrodragon module is version 3.6
  • It has 3.3V to 5V and visa versa level translators onboard for the serial interface. Mine does not.
  • My module is missing R2 on the back, and it links the empty "Restart" pin to the "Powkey" input on the Sim 900 chip. The Electrodragon module schematic refers to the "Restart" pin as J12 but is drawn incorrectly, it actually connects to the base of the transistor, not to VCC as shown. R2 (R6 on theirs) is a 4k7 surface mount resistor and you will need to install it if you want to use the Restart input to power the mini module up or down. You will also need to remove the 4k7 resistor (R25) on the top side of the mini module as it connects the transistor base to the positive supply. This is done so that the mini module will always turn on automatically when power is applied, and if its present you can't turn the module on or off under software control.
  • There are a few other components shown on the schematic but are not installed on my module but they are not important to using it.

Step 1: Hardware....

Power supply

You cannot power the module from the Arduino, as it is incapable of supplying the necessary peak currents. The Sim900 draws about 2A every so often. It's not necessary to build a 2A supply, as a large storage capacitor on the power supply output will supply the current. I am using a small switch mode buck power supply to step down from an external 12V DC source to 3.3V, with a 0.1F 5V super capacitor on its output and that works a treat. I believe that a 1000uF low esr cap will also work, but I've not tried it. The photo shows the power supply with a 0.1F cap underneath.

Serial port

The Sim900 communicates at TTL levels limited by its power supply voltage. The hardware reference manual says TXD and RXD (serial transmit and receive respectively for the Sim900) max output and input voltage respectively is the same as the power supply...3.3V in my case.

The Arduino UNO, when using the SoftwareSerial library, transmits data on its digital IO pins at their voltage levels. When the Uno is supplied at 5V the maximum output voltage is 4.2V, and is 2.3V when supplied by 3V.

At first I put a voltage divider into the transmit signal path, but found it was not necessary, and it works to transmit and receive serial data between the module and the Uno.

Wiring it up

You will need to work out which digital pins are used by your preferred library provider for their compatible GSM shield. In my case I will use digital pins 2 & 3 and SoftwareSerial on the UNO. Some also use another digital pin to control switching power on and off for the GSM shield. Connect the UNO TX SoftwareSerial pin to the mini module RX pin and similarly for the Uno RX pin. Remember to connect common grounds between the UNO and the power supplies and the mini module.

Do NOT use the RS232 outputs on the side of the PC board, as it outputs some +-7V and can damage your Arduino. The TTL level serial output pins must be used (near the antenna connection). Also please check the ground pins on the connector as some people have reported that the pinout of their module is different to that shown in the photos of my mini module.

Step 2: Software....


The Arduino IDE includes a library for their GSM shield using the Quectel M10 GSM chip, and Surprise! it is almost identical to the Sim900A chip! Since it's easy, well documented, and has nice tools, I'm choosing to use this library to play with. The shield uses pins D2 (RX) and D3 (TX) for serial comms, and pin D7 to power the M10 up and down. You don't have to use D7 as the mini module will turn itself on in standard configuration. Wiring to these pins allows me to use the mini module as if it was the Quectel shield. If you want to use some other pins, hop into the GSM library GSM3IO.h and change them as you want.

Details of the library are explained on the Arduino GSM shield website

And I found this handy Youtube video...

That's it!

Ok, recapping, we are using the Arduino GSM library with D2 as serial receive and D3 as serial transmit, power is applied to the mini module at 3.3V and has a large cap to supply the current peaks. An unlocked GSM SIM card is installed in the mini module and the net-light led is flashing slowly. A common ground is connected to the module and UNO. Ok, connect up the UNO to your PC and load the "test modem" sketch in the tools folder of the examples included with the library.

It should print the IMEI number of your mini modem on the serial monitor! Yah! Success! Next project is to hook up a GPS module and swap SMS's with it.

Have fun!

<p>Hello</p><p>i am a new bee.</p><p>i am using Pin 8 &amp; 9 (of arduino DUO) for serial communication with SIM900A instead of standard Tx,Rx Pins. </p><p>i am unable to read response of AT=CBC.</p><p>following is the code</p><p><strong>void V_Bat(){</strong></p><p><strong> int lcc;</strong></p><p><strong> mySerial.println(&quot;AT+CBC&quot;);<br></strong></p><p><strong> mySerial.println((char)26);</strong></p><p><strong><br></strong></p><p><strong>delay(1000);</strong></p><p><strong> if (mySerial.available()&gt;0)</strong></p><p><strong> {</strong></p><p><strong> msg=mySerial.read();</strong></p><p><strong> Serial.print(msg);</strong></p><p><strong> }</strong></p><p>it returns nothing</p><p><em>msg declared as charector</em></p><p>thanks</p>
<p>I could not understand , please tell me which one connection is used to interface Ardiuno either RS232 port (which have 3 pins Rx,Tx,Gnd) or Rs232 TTL.Please check my GSM module either it has TTL or not? Link for GSM image.</p><p><a href="http://www.evselectro.com/gadgets-and-gifts-sim-900d-1905?keyword=gsm&category_id=0" rel="nofollow">http://www.evselectro.com/gadgets-and-gifts-sim-900d-1905?keyword=gsm&amp;category_id=0</a><br>Please reply me.</p>
<p>hi hidep, that module has ttl rs232 and normal rs232. TTL is next to the antenna. As I mentioned before the Arduino does not have a normal rs232. You must use TTL rs232.</p>
<p>please guide how to use TTL rs232? or do you have other test code for checking GSM module is working properly or not?</p>
<p>Have a look at this Instructable.... Maybe that will help?</p><p><a href="https://www.instructables.com/id/Using-a-SIM900A-GSMGPRS-module-in-Australia/" rel="nofollow">https://www.instructables.com/id/Using-a-SIM900A-GS...</a></p><p>Sorry that's the best I can do.</p>
<p>now it's work.. thank you so much for your help. Now arise on more question&gt; is ground of TTL pin should be common with the power supply of GSM module (power jack 5v)?? in other words i just have to connect TTL ground pin with the Arduino ground pin or not? please reply me.. if you don't understand what i ask&gt;then reply me &quot;AGAIN&quot;... but Give me some response. i will be waiting for your response.</p>
<p>hiya, excellent, glad to have helped. Please make sure the arduino ground and the module ground are common. The TTL ground is already connected to the module ground so nothing to do there. The ground provides a common reference point for all other voltages.</p>
<p>I could not understand , please tell me which one connection is used to interface Ardiuno either RS232 port (which have 3 pins Rx,Tx,Gnd) or Rs232 TTL.Please check my GSM module either it has TTL or not? Link for GSM image.</p><p><a href="http://www.evselectro.com/gadgets-and-gifts-sim-900d-1905?keyword=gsm&category_id=0" rel="nofollow">http://www.evselectro.com/gadgets-and-gifts-sim-900d-1905?keyword=gsm&amp;category_id=0</a><br>Please reply me.</p>
<p>Hi!<br>Can you please explain for me how you wire the Arduino to the Sim900A module.</p><p>I've forgot the jumpers (next to the antenna) and measured negative 7V so if i connect the jumpers as shown on the picture i can use the same connection as shown on your picture?</p><p>And do you know which pins the arduino GSM library use, I've tried to look into the .h and .ccp file to figure this out.</p><p>I really appreciate if you answer me =)</p>
<p>hi AndreasA24, I assume you have the identical module as mine, as others have reported that the pin out is different on other module versions. I'm a bit rusty as its a while ago that I last played with this module.</p><p>The Arduino wants TTL level signals so connect direct to the SIMM900 chip, ie to the SimT and SimR pins. Softwareserial allows you to set the digital pins used in your code, typically pins 2 and 3. Look at the example sketches for the Arduino library. From memory the GSM library hard codes the pins in GSM3io.h but if you use pin 2 and 3 you don't need to change that. You can also use the Arduino's dedicated serial pins (pin 0 and pin 1) in which case you don't need SoftwareSerial but I there is a glitch that I can't quite recall...might be that the library uses Software serial internally. Have a look at the Uno's pin out chart on for example <a href="http://www.bq.com." rel="nofollow"> www.bq.com. </a> You need a crossover cable between the arduino and the module, so the Tx pin on one connects to the Rx pin on the other and visa versa , and ground of course.</p><p>Good luck!</p>
<p>Thanks for youre time sir! I can't find the SimT or SimR pins and i'm struggeling with finding the correct jumper/rx tx wiring. Can you look at the picture and explain me :) On my sim900A i have 3vr 3vt but if i place a jumper from 3vr - 5vr and 3vt - 5vt where do i get the rx and tx from the sim900? I cant see that on youre pictures.</p><p>Appreciate you're time! </p>
<p>hiya, your module is different to mine. I would interpret the pin out of the jumpers closest to the antenna ( on left) as follows:</p><p>Closest to the Sim900 chip is 3 volt receive .. Ie SimR</p><p>Middle is 5V receive ... Ie a 5V version of the SimR pin and input to the max232 chip.</p><p>Closest to the module edge ... Is ground</p><p>The right side is similar just transmit.</p><p>As a test get the sim900 chip hardware manual, and using a ohm meter with conductivity check setting (beeps on low resistance) check which pins of the chip connect to which pins on the jumper block. That will confirm my reading of the markings.</p><p>You need to connect the 3VR and 3V T to your arduino in my opinion. </p><p>Cherrs</p>
<p>Can we user this for GPRS requests?</p>
<p>hiya, I'm sorry I can't recall. Could you please check the documentation?</p>

About This Instructable




More by Happymacer:Using the Sim900/sim900A mini module with Arduino UNO Using a SIM900A GSM/GPRS module in Australia 
Add instructable to: