QGB96, sending AT commands via UART, no response received

I am facing an issue when trying to communicate with the QBG96 modem via UART using an ESP32 S3 WROOM-1 (with dev kit: ESP32-S3-DevKitC-1-N32R8V). When sending AT commands, no response is received from the modem.

Setup:

  • Connected modem pin 2 to ESP32 pin 2 (TX), and modem pin 3 to ESP32 pin 1 (RX)
  • AT command sent from ESP32 to modem using UART
  • ESP32 connected to PC via USB-to-UART Port
  • QBG96 powered with an external power supply

The code has been attached at the end. I used the Arduino Serial1 object to write ”AT\r\n” and then waited for output from Serial1 using while(!Serial1.available()). However, this loop never ends, which seems to be a sign that the ESP32 is not receiving any response from the modem.

I’ve tested the AT command via USB successfully. The ESP32’s UART works fine independently. I’ve also tried different ESP32 pins for UART, but the issue persists. Does anyone have any suggestions for troubleshooting this issue?

The testing code:

#define MONITOR true

// The serial connection to the Modem
const int RXPin = 2, TXPin = 1;

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200, SERIAL_8N1, RXPin, TXPin);

  Serial.println("Testing AT command...");
  at_test();
}

void loop() {
}


static bool at_test() {
  // Send command to the modem
  Serial1.write("AT\r\n");

  if (MONITOR)
    Serial.println("Sent Command: AT");

  // Wait until Serial1 is available
  while (!Serial1.available());

  // Read the response from the modem
  char receivedChars[16];
  char rc;
  int ndx = 0;
  
  while (Serial1.available() > 0) {
    rc = Serial1.read();
    receivedChars[ndx++] = rc;
  }
  receivedChars[ndx] = '\0';
  
  if (MONITOR) {
    Serial.print("    Received: ");
    Serial.println(receivedChars);
  }
  
  // Check the response
  if (receivedChars[0] == 'O' && receivedChars[1] == 'K')
    return true;
  else
    return false;
}

I recommend that you use the USB-TO-UART converter to connect to your PC for debugging first; Preliminary judgment may be caused by baud rate mismatch or abnormal connection circuit