SIM800l V2 Keeps Blinking Every Second

With my SIM800L v2 module, I was in a dilemma because the network LED kept blinking every second; however, it did not receive any signal whatsoever. I tried to solve the problem by connecting my audio gadget through a laptop USB port and 5V,2A charger adapter, but it had no effect. A switch to the SIM card did not even help.

Referring to the wiring diagram I diligently followed, my efforts to troubleshoot this persistent blinking dilemma seemed fruitless. In a desperate bid for a solution, I introduced a DC-DC converter to ensure an optimal voltage supply, coupling it with capacitors on both sides. However, my endeavors yielded no positive results.

After wrestling with this predicament for an extended period, I finally uncovered the root cause – the inefficiency of the breadboards and jumper wires. It dawned on me that their length compromised the current delivered to the SIM800L module.

Armed with this newfound understanding, I adjusted my strategy. I drastically shortened the breadboards and jumper wires, aiming for 2-3cm lengths to enhance current delivery. Additionally, I strategically placed a capacitor nearby between Vcc and GND. This adjustment proved crucial, especially after entering the SIM pin, where a surge in current was causing a consequential voltage drop, contributing to the persistent blinking.

Ultimately, the resolution to my SIM800L dilemma lay in the meticulous optimization of hardware components. This experience underscored the importance of considering the efficiency of the setup, particularly when working with breadboards and jumper wires, where even minor adjustments can lead to significant breakthroughs in troubleshooting.

Code:

SoftwareSerial sim(10, 11);
int _timeout;
String _buffer;
String number = "+6281222329xxx"; //-> change with your number

void setup() {
  //delay(7000); //delay for 7 seconds to make sure the modules get the signal
  Serial.begin(9600);
  _buffer.reserve(50);
  Serial.println("Sistem Started...");
  sim.begin(9600);
  delay(1000);
  Serial.println("Type s to send an SMS, r to receive an SMS, and c to make a call");
}

void loop() {
  if (Serial.available() > 0)
    switch (Serial.read()) {
    case 's':
      SendMessage();
      break;
    case 'r':
      RecieveMessage();
      break;
    case 'c':
      callNumber();
      break;
    }

    if (sim.available() > 0)
      Serial.write(sim.read());
}

void SendMessage() {
  //Serial.println ("Sending Message");
  sim.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
  delay(200);
  //Serial.println ("Set SMS Number");
  sim.println("AT+CMGS=\"" + number + "\"\r"); //Mobile phone number to send message
  delay(200);
  String SMS = "Hello, how are you? greetings from miliohm.com admin";
  sim.println(SMS);
  delay(100);
  sim.println((char)26);// ASCII code of CTRL+Z
  delay(200);
  _buffer = _readSerial();
}

void RecieveMessage() {
  Serial.println ("SIM800L Read an SMS");
  sim.println("AT+CMGF=1");
  delay(200);
  sim.println("AT+CNMI=1,2,0,0,0"); // AT Command to receive a live SMS
  delay(200);
  Serial.write ("Unread Message done");
}

String _readSerial() {
  _timeout = 0;
  while (!sim.available() && _timeout < 12000) {
    delay(13);
    _timeout++;
  }
  if (sim.available()) {
    return sim.readString();
  }
}

void callNumber() {
  sim.print (F("ATD"));
  sim.print (number);
  sim.print (F(";\r\n"));
  _buffer = _readSerial();
  Serial.println(_buffer);
}