I've connected the arduino UNO to the sim900a. But after checking the serial communication between the two I keep getting these output.

Here is the connections and code that I used

#include <SoftwareSerial.h>
SoftwareSerial SIM900A(2, 3); 
// Connect the SIM900A TX to Arduino pin 2 RX.
// Connect the SIM900A RX to Arduino pin 3 TX.
char c = ' ';
void setup()
 // start th serial communication with the host computer
 while (!Serial);
 Serial.println("Arduino with SIM900A is ready");
 // start communication with the SIM900A in 9600
 Serial.println("SIM900A started at 9600");
 Serial.println("Setup Complete! SIM900A is Ready!");
 void loop()
  // Keep reading from SIM900 and send to Arduino Serial Monitor
  if (SIM900A.available())
  { c = SIM900A.read();
  // Keep reading from Arduino Serial Monitor and send to SIM900A
  if (Serial.available())
  { c = Serial.read();

enter image description here

How can I fix this?

  • On what baudrate does the SIm module run? I would guess you have a baudrate mismatch
    – chrisl
    Jul 25 '21 at 7:30
  • SIM900 has auto baud rate detection, meaning you need to send a couple of "AT" to the module to sync the baud rate before sending the rest. If the baudrate is sync, it will reply "OK". Also are you powering the SIM900 with your Uno? The Uno can't supply sufficient current to power the module.
    – hcheung
    Jul 25 '21 at 7:35
  • 2
    Yes, I've connected 5V(arduino) to VCC(SIM900). So the problem is the lack of current in the module? Jul 25 '21 at 8:07
  • SIM900A datasheet says Single supply voltage: 3.4V – 4.5V and while transmitting current can go up to 2A. None of these can be provided by the UNO.
    – Nino
    Jul 25 '21 at 12:56
  • @hcheung I can see no reference to auto baud for the SIM900A. Do you have a reference? All I can find is that it has a default baud rate of 9600 and that can be configured using AT commands to between 9600 and 115200 baud.
    – Majenko
    Jul 25 '21 at 14:13

You are using the wrong pins on the SIM900A to communicate with your Arduino.

That specific module has a MAX232 interface on it to convert TTL UART to RS232. That is not compatible with the Arduino unless you add another MAX232 to undo the conversion that the one on the board does.

Instead you need to use the other 3-pin header at the other end of the board. It should (according to this site) be wired like this:

enter image description here

Of course you can use other pins than 0/1 on your Arduino, as long as you connect them to the right place on the SIM900A module as shown in that diagram.

Also note what I take to be a pair of jumpers bridging pins on the header you're currently connecting to (ring around them in the diagram).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.