Lab

Which Bluetooth module should I buy?

Three modules sit behind almost every Arduino Bluetooth project, the HC-06, the HC-05 and the HM-10, and they are not interchangeable. Picking the wrong one produces no error. It produces a project that works for everybody except you.

The whole decision is one question: what has to talk to it? Answer it below and the comparison table lights the row that decided it.

1 · WILL AN IPHONE OR IPAD EVER DRIVE IT?
Even one, even a visitor’s.
2 · IS THE REMOTE A WEB PAGE?
A page in a browser, not an app.
3 · MUST ONE ARDUINO CALL ANOTHER?
Two boards talking, with no phone in between.
4 · STARTING FROM NOTHING?
No Arduino and no module in the drawer yet.
BUY
HC-06
Android only and the phone is the remote: the HC-06 is the whole requirement. It advertises, the phone connects, and there is almost nothing to configure, so almost nothing to configure wrongly.
What you give up: Starting a connection. An HC-06 can never be the one that reaches out, and an iPhone will never see it.
THE THREE MODULES: THE ROW THAT DECIDED IT IS LIT
HC-06HC-05HM-10
BluetoothClassic 2.0Classic 2.0Low Energy (BLE) 4.0
Talks to Androidyesyesyes
Talks to iPhonenonoyes
RoleSlave: waits to be connected toSlave or master: can start the connectionSlave or master
Configuring itBarely neededFull AT command setFull AT command set
Typical priceCheapestA little moreThe dearest, roughly 1.2–1.8× the HC-06
Buy it whenYour first one, and an Android phone is the remoteOne Arduino must call anotherAn iPhone is in the room, or the remote is a web page
The short answer: first project, Android phone, HC-06. Anything involving an iPhone, HM-10. Two Arduinos talking to each other, HC-05.
NOW YOU TRY
A friend wired two HC-06 modules correctly. Both blink fast for ever and never connect to each other. Which box is it, and what will no amount of rewiring fix?
Say your answer out loud, then open this
The module box: both are slaves. An HC-06 can only wait to be called, so two of them wait for ever. Swap one for an HC-05, which can be the master. It is not a wiring fault: the blinking says both are powered and advertising, which is exactly what a slave does. (Set question 3 to “yes” above.)

What this shows

The HC-06, the HC-05 and the HM-10 share the same four working pins and are not interchangeable. The whole buying decision is one question: what has to talk to the module?

If an iPhone or iPad will ever drive it, buy the HM-10. It speaks Bluetooth Low Energy, the only one of the three an iPhone can see. Classic Bluetooth SPP — which is what an HC-05 and an HC-06 speak — is invisible to iOS at the operating-system level. No app fixes it, no library fixes it, and no wiring change fixes it. You need a BLE module: a genuine HM-10, or an ESP32. And Web Bluetooth is not the escape hatch — it is not in Safari, any version.

If the remote is a web page, buy the HM-10 too: Web Bluetooth reaches Low Energy devices, so a page in Chrome can drive an HM-10 and never an HC-05 or HC-06. On an iPhone every browser uses Safari's engine, so the page needs the Bluefy browser there.

If one Arduino must start a connection to another, buy the HC-05. It can be a master; the HC-06 is a slave only and can only wait to be called, so two HC-06 modules wait for ever.

Otherwise, for a first project with an Android phone as the remote, the HC-06 is the whole requirement and the cheapest. Starting from nothing, an ESP32 board has Bluetooth built in; only the original ESP32 has Classic Bluetooth, while the S3 and C3 are Low Energy only.

Common questions

Which Bluetooth module works with an iPhone?
Of the HC-05, HC-06 and HM-10, only the HM-10. It speaks Bluetooth Low Energy. The HC-05 and HC-06 speak Classic Bluetooth, which an iPhone does not offer to apps at all, so no app, library or wiring change makes them work.
What is the difference between the HC-05 and the HC-06?
Both are Classic Bluetooth modules that work with Android. The HC-06 is a slave only: it waits to be connected to. The HC-05 can also be a master and start a connection, which is what two Arduinos talking to each other need. The HC-05 also has a full AT command set and a button for AT mode.
Which module should I buy for my first Arduino Bluetooth project?
With an Android phone as the remote, the HC-06: it is the cheapest and has almost nothing to configure. If any iPhone is involved, or the remote is a web page, the HM-10.