HM-10 BLE module not responding to AT command – tried everything (UNO + SoftwareSerial)

Hi! I recently got an HM-10 BLE module to use in a project with an Arduino UNO board (I mainly need to find a signal, record and display the RSSI).
Since I'm not good at coding this stuff I looked at some tutorials online and also asked ChatGPT and Gemini to write some basic sketches to test the module.

All the sources I found use the SoftwareSerial library for the communication between the board and the module.

After wiring everything correctly (I double-checked many times, also using the official documentation for the HM-10), I tried to test the module by sending the AT command. Unfortunately, I never get the expected OK response.

The BLE module seems to work just fine — I can see it from my phone with Bluetooth scanning apps — but the problem is serial communication.

To isolate the problem, I:

  • tried loopback tests between TX and RX pins using SoftwareSerial
  • tried different pin pairs (2↔3, 10↔11, etc.)
  • tried with two different UNO boards (original and Elegoo)
  • tried on two different PCs (Windows)
  • used two separate USB cables
  • tried both Arduino IDE 1.8 and 2.x
  • rebooted the system and made sure no other program was interfering with the COM port

In all tests, whenever I send something through the Serial Monitor, the RX LED blinks, but I never receive any data back on the Serial Monitor.

I'm attaching two minimal test sketches that I used:

Sketch 1: Test communication with HM-10 using SoftwareSerial:

#include <SoftwareSerial.h>

// HM-10: TX -> pin 10 | RX <- pin 11 (use a voltage divider on HM-10 RX)
SoftwareSerial BTSerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  Serial.println("Sending AT command to HM-10...");
  delay(1000);
  BTSerial.println("AT"); // Send AT command
}

void loop() {
  // Forward HM-10 response to Serial Monitor
  if (BTSerial.available()) {
    char c = BTSerial.read();
    Serial.print(c);
  }
}

Wiring details:

  • HM-10 VCC → 5V (datasheet says it supports 3.3–6V input)
  • HM-10 GND → GND
  • HM-10 TX → Arduino RX pin (e.g., pin 10)
  • HM-10 RX ← Arduino TX pin (e.g., pin 11) — using voltage divider (1kΩ + 2kΩ)
  • USB connected to PC for Serial Monitor

Sketch 2: SoftwareSerial loopback test:
I connected pin 2 to pin 3 directly (used a jumper wire)

#include <SoftwareSerial.h>

SoftwareSerial testSerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);
  testSerial.begin(9600);
  Serial.println("Sending message via SoftwareSerial loopback...");
  testSerial.println("Loopback test message");
}

void loop() {
  if (testSerial.available()) {
    char c = testSerial.read();
    Serial.print("Received: ");
    Serial.println(c);
  }
}

I’m running out of ideas here :sweat_smile:.
Any help or suggestions would be greatly appreciated ! Thank you :folded_hands:

Please post schematics. Words are not good enough.

Hello,

What baudrate did you try? Only 9600bps? You could try with pretty much every option you have

Else, you could take a look at this. This is in French but maybe you can understand, or ask someone (chatGPT lol) to translate it for you

Seems is the word. All you really know is that the power is on.

1 make sure the divider is the right way round - 2k between Rx and Gnd.

2 be sure you have a BLE terminal on the phone. That by Morisch is the favourite of the moment. It needs to be set correctly.

3 You haven't said if the module works OK in communications mode?

4 9600 is the ONLY baud rate for AT configuration

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