DFRobot SIM7000A unresponsive on the filed

userHead George.D 2025-05-11 10:27:12 609 Views0 Replies

Hi,

My SIM7000A attached to Arduino UNO WiFi Rev2 becomes unresponsive on the filed. The only way to reset the SIM7000A module is by pressing the BOOT button, but this unpractical given the the vehicle driver won't have access to this button. Create a Function in my code try different rests: Logical, hardware and power, but it is not working. Can someone shed light as to how to set up a reset Function that works.

This the code I have at the moment (not working):
bool resetSIM7000A() {

  Serial.println(F("Attempting module reset based on DFRobot documentation..."));

 

  // First try logical reset

  Serial.println(F("Trying logical reset..."));

  sendATCommand("AT+CFUN=1,1", 1000);

  delay(12000);  // Wait for module to restart

 

  String response = sendATCommandWithResponse("AT", 3000);

  if (response.indexOf("OK") != -1) {

    Serial.println(F("Logical reset successful"));

    sendATCommand("ATE0", 1000);

    sendATCommand("AT+CGNSPWR=1", 2000);

    return true;

  }

 

  // Try hardware reset according to DFRobot specs

  Serial.println(F("Trying hardware reset per DFRobot specs..."));

  pinMode(PIN_RESET, OUTPUT);

  digitalWrite(PIN_RESET, HIGH);  // Ensure it starts HIGH (normal state)

  delay(100);

  digitalWrite(PIN_RESET, LOW);   // Pull LOW to trigger reset

  delay(100);                     // Brief pulse

  digitalWrite(PIN_RESET, HIGH);  // Return to HIGH (normal state)

  delay(15000);                   // Wait for module to restart

 

  response = sendATCommandWithResponse("AT", 3000);

  if (response.indexOf("OK") != -1) {

    Serial.println(F("Hardware reset successful"));

    sendATCommand("ATE0", 1000);

    sendATCommand("AT+CGNSPWR=1", 2000);

    return true;

  }

 

  // Try power key sequence according to DFRobot specs

  Serial.println(F("Trying power key sequence per DFRobot specs..."));

  pinMode(PIN_PWRKEY, OUTPUT);

  digitalWrite(PIN_PWRKEY, HIGH);  // Ensure it starts HIGH (normal state)

  delay(100);

  digitalWrite(PIN_PWRKEY, LOW);   // Pull LOW to trigger power on/off

  delay(1500);                     // Hold for 1.5 seconds

  digitalWrite(PIN_PWRKEY, HIGH);  // Return to HIGH (normal state)

  delay(20000);                    // Wait for module to power cycle

 

  response = sendATCommandWithResponse("AT", 3000);

  if (response.indexOf("OK") != -1) {

    Serial.println(F("Power key sequence successful"));

    sendATCommand("ATE0", 1000);

    sendATCommand("AT+CGNSPWR=1", 2000);

    return true;

  }

 

  Serial.println(F("All reset methods failed"));

  return false;

}

Thanks!