In this guide
Your robot car works. The obstacle sensor works. But every demo involves you crouching behind it with a USB cable, because nobody told your group how the car is supposed to take commands from a phone.
The HC-05 is the cheapest answer to that problem and has been for a decade: a small Bluetooth module that turns your Arduino's serial port into a wireless link to any Android phone. Type in an app, the characters arrive on the Arduino as if typed into the Serial Monitor. Drive commands, home-automation switches, sensor readings back to the phone — all over a link you can set up in an afternoon.
This guide explains what the HC-05 is (and what it is not), how the Bluetooth serial link actually works, how to wire it without frying its 3.3 V RX pin, the configuration mistakes that waste entire lab sessions, and six project ideas — one linked to a verified projectech.in listing, five described as build ideas.
What is the HC-05?
The HC-05 is a Bluetooth 2.0 + EDR module that implements the Serial Port Profile (SPP). Think of it as a wireless replacement for a USB serial cable: bytes your Arduino prints to its serial port appear on the paired phone, and bytes the phone sends arrive at the Arduino. It pairs like any Bluetooth device (default PIN 1234 or 0000), runs at a default baud rate of 9600, and can be configured over AT commands — including switching between master and slave roles.
What it is NOT: it is not Wi-Fi (no internet, no web dashboards, ~10 m range), and it is not Bluetooth Low Energy. That last point matters: iPhones do not support the classic Bluetooth SPP profile these modules use, so HC-05 projects are Android-first. Its sibling, the HC-06, looks nearly identical but is slave-only — it cannot initiate connections, while the HC-05 can be set as master or slave.
- Bluetooth 2.0 + EDR with the SPP serial profile — a wireless serial cable to a phone or PC.
- 3.3 V logic — the RX pin must never see 5 V directly; use a voltage divider from the Arduino's 5 V TX.
- Default baud 9600 for data; default PIN 1234 (some boards use 0000).
- AT command mode via the KEY pin, entered at 38400 baud — used to change the name, PIN, baud rate, and master/slave role.
- Typical range ~10 m (Class 2 Bluetooth) — room-scale control, not long-range telemetry.
How the HC-05 works
The whole module is understandable in six steps:
- Power it. Most HC-05 breakout boards include a voltage regulator, so they accept a wider VCC range (commonly 3.6–6 V), but the logic pins remain 3.3 V. Power from the Arduino's 5 V pin is the usual student setup and is fine for the board's regulator.
- Pair it with the phone. Power up, open the phone's Bluetooth settings, and you will see the module advertising (default name often "HC-05"). Pair with PIN 1234 (or 0000). A slow-blinking LED means waiting to pair; the blink pattern changes once connected.
- Open a Bluetooth terminal app. On Android, apps like Serial Bluetooth Terminal connect to the paired HC-05 over SPP. Whatever you type is transmitted; whatever the Arduino prints is displayed.
- Wire TX/RX as a crossover. Module TXD goes to the Arduino's RX, module RXD to the Arduino's TX. Because the Arduino's TX idles at 5 V and the module's RXD is 3.3 V logic, put a simple voltage divider (e.g. 1 kΩ / 2 kΩ) on that line — the single most skipped step in student builds.
- Read it like serial. In Arduino code,
Serial.read()/SoftwareSerial.read()receives phone commands;Serial.print()sends data back. There is no special Bluetooth library needed — that is the beauty of SPP. - Configure with AT mode when needed. Hold the KEY pin HIGH while powering up to enter AT command mode (38400 baud, not 9600).
ATshould returnOK; then commands likeAT+NAME=MyCar,AT+PSWD=4321,AT+UART=115200,0,0, andAT+ROLE=1(master) reconfigure the module.
Key specifications
| Parameter | Value |
|---|---|
| Bluetooth version | 2.0 + EDR (classic Bluetooth, not BLE) |
| Profile | SPP (Serial Port Profile) — wireless serial |
| Logic level | 3.3 V — RXD must not receive 5 V directly |
| Breakout VCC | Typically 3.6–6 V via onboard regulator (board-dependent) |
| Default data baud | 9600 |
| AT-mode baud | 38400 (enter by holding KEY high at power-up) |
| Default PIN | 1234 (some boards: 0000) |
| Roles | Master or slave configurable (HC-06 is slave-only) |
| Typical range | ~10 m, Class 2 |
| Phone compatibility | Android SPP apps; iPhones do not support classic SPP pairing |
Wiring it up: HC-05 + Arduino Uno
| HC-05 pin | Arduino Uno pin | Notes |
|---|---|---|
| VCC | 5 V | Board regulator steps this down; do not exceed the board's rated VCC |
| GND | GND | Common ground |
| TXD | RX (pin 0, or pin 10 via SoftwareSerial) | Module's 3.3 V TX is read correctly by the Arduino's 5 V-tolerant input |
| RXD | TX (pin 1, or pin 11 via SoftwareSerial) via voltage divider | 1 kΩ (top) + 2 kΩ (bottom) drops Arduino's 5 V to ~3.3 V |
| KEY/EN | D9 (or 3.3 V rail) | Hold HIGH during power-up to enter AT command mode |
| STATE | (optional) D8 | Goes HIGH when a Bluetooth connection is active — useful for status LEDs |
Bold warning — the #1 HC-05 killer: connecting the Arduino's 5 V TX straight to the module's RXD. The module's logic is 3.3 V, and sustained 5 V on RXD damages the Bluetooth chip's input — sometimes immediately, sometimes as flaky behaviour weeks later that you will never trace back to wiring. Two resistors (1 kΩ and 2 kΩ) as a voltage divider cost almost nothing and eliminate the risk entirely.
Common mistakes that kill HC-05 projects
- 5 V straight into RXD. Above — voltage divider, every time, no exceptions.
- Trying AT commands at 9600 baud. AT command mode runs at 38400 baud, not the 9600 data rate. If
ATgets no reply, you are probably at the wrong baud — and you must hold KEY high during power-up, not after. - Forgetting KEY during power-up. Pulling KEY high on an already-running module does nothing. Power off, hold KEY high, power on, then talk at 38400.
- Expecting it to work with an iPhone. iOS does not expose classic Bluetooth SPP to apps, so no App-Store terminal app will talk to an HC-05. Plan Android-first; if iPhone support is a requirement, you need a BLE module (like HM-10) instead — a different technology with a different app ecosystem.
- Changing the baud via AT and forgetting it. After
AT+UART=115200,0,0, the module permanently speaks 115200 until reconfigured. Students who set it once, then open the Serial Monitor at 9600 next week, conclude the module "died." Write the configured baud on a masking-tape label stuck to the module. - Using hardware serial pins 0/1 and wondering why uploads fail. With the module wired to pins 0 and 1, the Arduino IDE cannot upload through the same port. Use SoftwareSerial on other pins during development, or disconnect the module's TXD/RXD lines before each upload.
Project ideas using the HC-05
Bluetooth home automation
Relays switch room lights, fans, and appliances; the Arduino listens on the HC-05 for single-character commands ("1" = light on) from an Android app. It is the definitive HC-05 final-year project: the wireless link is the entire point, the demo is interactive (the examiner's phone becomes the remote), and the hardware is cheap enough to build twice. Full build: Bluetooth Home Automation using HC-05 and Arduino.
Bluetooth-controlled RC car (no verified listing — build idea)
The classic: an Arduino + motor driver chassis where the phone's Bluetooth terminal (or a custom app with buttons) sends forward/back/left/right/stop commands. No verified projectech.in listing covers this exact build, so it is a from-scratch idea — pair the HC-05 command parsing from the home-automation pattern with any two-motor chassis, and add speed control by mapping a slider value to PWM.
Wireless sensor data logger to phone (no verified listing — build idea)
Temperature, humidity, and air-quality sensors stream readings over the HC-05 to a phone app that plots them live — a "wireless Serial Plotter in your pocket." Unlinked build idea: genuinely useful for field measurements where a laptop is impractical, and the report writes itself around the comparison of wired vs wireless logging.
Bluetooth door lock with phone authentication (no verified listing — build idea)
A solenoid or servo lock opens only when the phone sends the correct passcode over Bluetooth, with wrong attempts logged and an alarm after three failures. Unlinked idea: keep the security claims honest in your report — classic Bluetooth pairing is not strong authentication, so frame it as a convenience prototype, not a security product.
Gesture-controlled presentation remote (no verified listing — build idea)
An MPU6050 on a glove detects tilt gestures; a second Arduino with the HC-05 forwards them to a PC-side script that advances slides. Unlinked build idea: it shows the HC-05 as a bridge between embedded hardware and a computer, and the demo (waving to change slides) is memorable in reviews.
Bluetooth voice-controlled appliances (no verified listing — build idea)
An Android app with speech recognition converts voice commands to text and forwards them over the HC-05; the Arduino maps phrases to relay actions. Unlinked idea: the voice processing happens entirely on the phone, so the Arduino side stays as simple as the home-automation parser — a good example of putting compute where it belongs.
Frequently asked questions
What is the difference between HC-05 and HC-06?
The HC-05 can be configured as either Bluetooth master or slave via AT commands; the HC-06 is slave-only and cannot initiate connections. For phone-controlled projects (phone connects to module), either works since the module acts as slave. Choose the HC-05 if you might ever need module-to-module communication or master mode.
What is the real-world range of the HC-05?
About 10 metres in open space (Class 2 Bluetooth), less through walls. It is designed for room-scale control — a car in the same hall, appliances in the same room. If your project needs hundreds of metres, you need a different radio (LoRa, nRF24L01 with PA, or GSM), not Bluetooth.
Can I connect an iPhone to the HC-05?
No — iPhones do not support the classic Bluetooth SPP profile, so no iOS app can open a serial connection to the HC-05. This is a platform limitation, not a wiring problem. Android apps work fine; for iPhone compatibility, switch to a BLE module such as the HM-10.
Do I need the internet or a special app?
No internet is needed — Bluetooth is a direct phone-to-module link. Any Android Bluetooth terminal app works; many students later build a custom app (MIT App Inventor is the usual shortcut) with buttons that send the same characters the terminal would.
Can two phones control one HC-05 at the same time?
No. A classic Bluetooth SPP module holds one active connection at a time. A second phone must wait until the first disconnects. Design your demo flow around a single controller.
Where to go next
Start with the verified home-automation build linked above — its command-parsing pattern (single characters over Bluetooth serial driving relays) is the template that four of the five other ideas reuse. Once that link works on your bench, the RC car, door lock, and voice-control variants are all the same serial protocol with different actuators on the end. And if you would rather start from a finished, tested build, the listing page includes the order option for a built-to-order unit.