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.
| HC-06 | HC-05 | HM-10 | |
|---|---|---|---|
| Bluetooth | Classic 2.0 | Classic 2.0 | Low Energy (BLE) 4.0 |
| Talks to Android | yes | yes | yes |
| Talks to iPhone | no | no | yes |
| Role | Slave: waits to be connected to | Slave or master: can start the connection | Slave or master |
| Configuring it | Barely needed | Full AT command set | Full AT command set |
| Typical price | Cheapest | A little more | The dearest, roughly 1.2–1.8× the HC-06 |
| Buy it when | Your first one, and an Android phone is the remote | One Arduino must call another | An iPhone is in the room, or the remote is a web page |
Say your answer out loud, then open this
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.