HM-10 reads all text as question mark

Do not be too fast.
It's not that easy I think.

I use Arduino UNO btw.

Okay, I bought 5pcs HM-10 from eBay for cheap.

I had HC-06 before.
I used that one without issues.
I connected:

VCC -> Arduino 5V

GND -> Arduino GND

RX -> Arduino TX

TX -> Arduino RX

BRK -> Unconnected

State -> Unconnected

I wrote simple code, with just Serial.read and Serial.println and when I connect to module from phone, I have idea synchronization between devices.
I can send and receive data on both sides.
Life is so beautiful.

So, what's wrong with HM-10.

I did absolutely same wiring and it doesn't work.
I can't send anything from Arduino Serial Monitor. When I send it, it doesn't show up in monitor, it just clears input field. (It should be written below as I remember from HC-06).

I connected to module with phone with BT Serial app, I send text and module recevies just question mark.

It doesn't matter if my text is 1 character or 10, it reads just one question mark.

So, in short, I can't post anything in Arduino Serial Monitor and when I post in smartphone app, Arduino Serial Monitor reads just one question mark.

I can't use AT commands. As I already said above, when I type anything in input field and press enter, text dissapears and serial monitor shows nothing(it just clears input field).

What's wrong?

What baud rate are you using? Keep in mind HM-10 is a BLE module so it may not play nicely with other modules.

In code I use Serial with 9600, but I tried another rates with no luck.

The HM-10 module operates usually at 3.3V for both power and logic levels. While some breakout boards include a voltage regulator that allows them to be powered with 5V , the module itself might not be 5V-tolerant on its UART pins. If using it with a 5V microcontroller, a logic level shifter or voltage divider is often needed to avoid damage.

➜ if you were to show us

  • the code
  • the circuit
  • more information on your "BT Serial app" (it should be a BLE Serial)

we could possibly provide more guidance. Otherwise the only thing we can say is that the proverbial crystal ball is still in the dishwasher...

➜ Please do yourself a favor and read How to get the best out of this forum. Post accordingly, including code with code tags, necessary documentation for your request such as your exact circuit and power supply details, links to components, etc.

I used BLE Scanner and LightBlue on my iPhone.
Wiring setup is mentioned in the first post.
I connected it like HC-06 did.
As I remember from HC-06, I needed just Serial.begin(9600) in setup scope and everything worked by itself.Whenever I connect to bluetooth and send data with Serial from phone, Arduino Serial Monitor used to receive data immediately.
I need HM-10 for more advance project, but I think it’s the simplest code that should work and to be sure, module does work.

Module has written 3.6-6V on VCC and 4V on RX-TX pins, but some tutorials what I saw, doesn’t have any resistors or something.
My board is Arduino UNO R3

and so you decided to send 5V ?...

:rofl: Some tutorials and experience from HC-06.
Could it be a reason?

Electronic components have inherent tolerances, allowing for slight deviations from their specifications, but operating them outside their rated limits always carries a risk. While some components may tolerate minor overvoltage for a short period, exceeding specifications means you're operating beyond guaranteed reliability.

If you happened to receive a component with minimal tolerance margin—one that is already near its rated limit—you risk damaging it. In this case, sending 5V from the Arduino UNO’s Tx pin to a 3.3V-rated Rx pin could easily cause failure, especially if the documentation explicitly states a maximum input voltage of 4V.

To ensure proper operation and avoid damage, always adhere to the specified voltage limits. Implementing a simple voltage divider with two resistors is an effective and reliable way to step down the voltage safely. But it might be too late for this module now.

here is a tutorial with the voltage divider

Okay, I will try.
I had 5 pcs of HM-10 and I thin one of them should be alive :smiley:, I didn't use it

worth trying

Now I bought HC-06.
What’s wrong here? I can’t even see on my smartphone in the nearby BT list.
I tried RX TX pins as well as 2 and 3.



// Basic Bluetooth sketch HC-06_01
// Connect the Hc-06 module and communicate using the serial monitor
//
// The HC-06 defaults to AT mode when first powered on.
// The default baud rate is 9600
// The Hc-06 requires all AT commands to be in uppercase. NL+CR should not be added to the command string
//
 
 
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-06 TX to the Arduino RX on pin 2. 
// Connect the HC-06 RX to the Arduino TX on pin 3 through a voltage divider.
// 
 
 
void setup() 
{
    Serial.begin(9600);
    Serial.println("Enter AT commands:");
 
    // HC-06 default serial speed is 9600
    BTserial.begin(9600);  
}
 
void loop()
{
 
    // Keep reading from HC-06 and send to Arduino Serial Monitor
    if (BTserial.available())
    {  
        Serial.write(BTserial.read());
    }
 
    // Keep reading from Arduino Serial Monitor and send to HC-06
    if (Serial.available())
    {
        BTserial.write(Serial.read());
    }
 
}

I connected my Android device to HC-06 and I can send text from Android to Arduino Serial Monitor, but when I type AT, it says just AT, it doesn't say "OK"

Connecting 5V Arduino directly to 3.3V modules.

If you break the rules, do not expect the things to work.

1 Like

Do you mean 5V pin or RX-TX?
If 5V pin, It doesn't matter. I tried 3.3V before and didn't work. I found someone said 5V supply worked and I tried.
Absolutely no difference

I meant what i wrote.

Save yourself the trouble of learning very basic electrical circuit theory by buying a 3.3V Arduino, and join the modern era.

OH MY WORLD!!!
I followed this tutorial, but I used Both NL & CR in Serial Monitor and it works :open_mouth:
I have no idea, what I did differently, but it worked.
I did absolutely followed scheme and tutorial, but I used Both NL & CR mode and what a surprise!

What did I do different, no idea.

It worked on HC-06, HM-10 returns text like incorrect baud rate, but I tried all baud rates :frowning:

Probably the module expected CR and LF at the end of an AT command.

I already had it specified when I was trying before

Loose wire then may be …

Now, I'm trying to find out what's wrong with HM-10 and why it behaves like incorrect baud rate