SIM800L not responding

I have a SIM800L module and would like to test it, but i am havinng troubles communicating to the device.

/*
SIM800       RPi Pico
5v           VBUS
GND          GND
VDD          3v3
TXD          GP1
RXD          GP0
*/

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);

  while (!Serial)
    ;

  Serial.println("Initializing...");
  //Begin serial communication with Arduino and SIM800L
  Serial1.begin(9600);
  delay(1000);

}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  Serial.println("LOOP");
  delay(500);
  while (Serial.available())
  {
    Serial1.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (Serial1.available())
  {
    Serial.write(Serial1.read());//Forward what Software Serial received to Serial Port
  }

}

Supposedly according to this guides sending "ATI" will return me its device information, but in my case im getting nothing. I even swapped the uart RX and TX pins

I can also see that leds on the board is lighting up, 1 steady and 1 blinking. So i assume the board is working but i cant communicate to it.

Anyone know what im doing wrong?

which arduino? what's the circuit? how are things powered?

the board im using is the raspberry pi pico. I have connected it using this way (its on the comment on top of the code)

powered via usb port, the port can handle 2A so power should not be an issue

Upon further testing some things out i think i know the issue. What i think is happening is the pico is so fast that i tries to communicate to the SIM module before the SIM module could boot up. So i simply added the delay at the beginning before communicating.

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);

  while (!Serial)
    ;

  //Begin serial communication with Arduino and SIM800L
  Serial1.begin(9600);
  delay(3000);

  Serial.print("Initializing");
  delay(1000);
  Serial.print(".");
  delay(1000);
  Serial.print(".");
  delay(1000);
  Serial.println(".");

  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  
  Serial1.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();
  Serial1.println("ATI"); //Returns the module name and revision.
  updateSerial();
  Serial1.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  Serial1.println("AT+COPS?"); //Checks which network you are connected to
  updateSerial();

  //  Serial1.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  //  updateSerial();
  //  Serial1.println("AT+CREG?"); //Check whether it has registered in the network
  //  updateSerial();
  //  Serial1.println("AT+COPS=?"); //Returns the list of operators present in the network.
  //  updateSerial();
  //  Serial1.println("AT+CBC"); //Returns Li-Po battery status. The second number is the battery level (in our case it is 93%) and the third number is the actual voltage in mV (in our case 3.877 V)
  //  updateSerial();


}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(1000);
  while (Serial.available())
  {
    Serial1.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (Serial1.available())
  {
    Serial.write(Serial1.read());//Forward what Software Serial received to Serial Port
  }

}


Still testinng things out if this really solved the issue

Your topic has been moved to a more suitable location on the forum. Installation and Troubleshooting is not for problems with (nor for advice on) your project.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.