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.
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.