HC-05 Bluetooth serial module
HC-05 classic Bluetooth serial module: EN, VCC, GND, TXD, RXD, STATE pins, the 1 kΩ/2 kΩ divider on RX, default PIN and AT-command mode.
Community draft — report a mistake
3.3 V or 5 V? The module runs at 3.3 V logic. Its TXD connects straight to any board’s RX. Its RXD must not see 5 V: from an Uno or Nano TX, use a 1 kΩ / 2 kΩ divider. From ESP32 or Pico, connect directly.
The HC-05 adds classic Bluetooth to any board with a serial port. Once paired with a phone (default PIN 1234, sometimes 0000), whatever the phone app sends arrives on the module’s TXD as plain serial data — the easiest way to build a phone-controlled robot car or switchboard.
It’s classic Bluetooth (SPP), not Bluetooth Low Energy. Android serial terminal apps work; iPhones don’t support it.
Protect the RXD pin from 5 V: a 1 kΩ resistor from the Arduino’s TX to RXD, and a 2 kΩ resistor from RXD to GND, gives about 3.3 V.
Pinout
| Pin | What it does |
|---|---|
EN | Hold HIGH while powering up to enter AT-command mode (also called KEY) |
VCC | Supply, 3.6–6 V — use 5 V |
GND | Ground |
TXD | Serial out (3.3 V) — to the board’s RX |
RXD | Serial in (3.3 V logic) — from the board’s TX through a divider on 5 V boards |
STATE | HIGH when a device is connected |
Use it with
- HC-05 Bluetooth serial module with Arduino Leonardo Arduino C++
- HC-05 Bluetooth serial module with Arduino Mega 2560 Arduino C++
- HC-05 Bluetooth serial module with Arduino Nano Arduino C++
- HC-05 Bluetooth serial module with Arduino Uno R3 Arduino C++
- HC-05 Bluetooth serial module with Raspberry Pi Pico MicroPython
Common errors
Can’t find it on an iPhone
The HC-05 is classic Bluetooth (SPP). iPhones don’t support SPP — use an Android phone, or a BLE module or an ESP32 instead.
Pairs, but no data arrives
TX and RX aren’t crossed, or the baud rate is wrong. Data mode defaults to 9600 baud.
AT commands get no reply
AT mode needs EN held HIGH (or the button pressed) while powering up; the LED then blinks slowly every 2 s. AT mode runs at 38400 baud and needs “Both NL & CR”.
Upload fails while the module is connected
On an Uno, D0/D1 are shared with USB. Disconnect the module while uploading, or use SoftwareSerial on other pins.