Skip to content
A

Bluetooth

Interfacing HC 06 Bluetooth with Arduino Uno

What is the HC 06?

HC 06 practical reference

A slave-only Bluetooth serial module — simpler and cheaper than the HC-05 for projects that only need to be connected to, not initiate connections. Like the HC-05, the HC-06 implements the Bluetooth Serial Port Profile (SPP), transparently forwarding UART bytes over a Bluetooth link, but it's factory-locked to slave mode only, meaning it can be discovered and connected to by a phone or PC but can't initiate a connection to another Bluetooth device itself — a perfectly good tradeoff for the very common case of a phone app talking to an Arduino project.

Key specifications

  • Bluetooth version: Bluetooth 2.0 + EDR (Classic Bluetooth, not BLE)
  • Operating voltage: 3.3V DC logic (module often includes an onboard regulator accepting 3.6V-6V supply)
  • Operating current: ~30-40 mA typical during active connection
  • Role support: Slave mode only — cannot initiate connections to other Bluetooth devices, only accepts incoming pairing requests
  • Range: ~10m typical (Class 2 Bluetooth radio)
  • Profile: Serial Port Profile (SPP) — transparent wireless UART bridge
  • Default baud rate: 9600 baud (some AT-command configuration available, more limited than the HC-05's command set)
  • Interface: UART (TX/RX) to the host microcontroller

Pinout and connection notes

The HC-06's RX pin is 3.3V logic, so use a voltage divider or level shifter when wiring to a 5V Arduino's TX pin. Because it lacks a KEY/EN pin for entering a distinct command mode like the HC-05, its AT command set for renaming or changing the pairing PIN is typically issued directly over the same UART connection while unpaired — check your specific module's documentation for the exact procedure.

  • VCC: Power, 3.6-6V DC (breakout boards regulate down to the 3.3V logic level internally)
  • GND: Ground
  • TX: UART transmit — connect to microcontroller RX
  • RX: UART receive — connect to microcontroller TX (3.3V logic, use a voltage divider from 5V boards)
  • STATE: Indicates connection status on some breakout variants — HIGH when a Bluetooth link is actively connected

Integration checklist

  1. Confirm the exact part number and breakout-board revision.
  2. Verify supply voltage, current demand, logic levels, and signal direction against the datasheet.
  3. Check controller pin assignments and bus address or interface mode against the example code.
  4. Power up with external loads disconnected, then test signals before full integration.
  5. If readings or communication fail, check power and ground first, then pin mapping, interface settings, and library initialization.

Troubleshooting and reproducibility

Record the board used, wiring, library/version, supply arrangement, and measured behavior. Use the selected board-specific wiring example as the source of truth. Never assume visually similar modules share identical voltage tolerance or pin order.

Setting Up HC 06 with Arduino Uno

Library

SoftwareSerial by Arduino core

Built into the Arduino core — no install needed, just #include <SoftwareSerial.h>.

Wiring

Component pinArduino Uno pinNote
VCC5V
GNDGND
TXDD2 (RX)Module TX → Arduino RX, direct connection is fine.
RXDD3 (TX) via dividerHC-06 RXD is 3.3V logic — use a voltage divider (e.g. 1kΩ/2kΩ) from the Arduino's 5V TX line.

Swipe sideways to see every column →

C++
  • Unlike the HC-05, the HC-06 is slave-only — it can be connected to from a phone/PC, but it cannot initiate a connection to another Bluetooth device itself.
  • The RXD pin is 3.3V logic and not reliably 5V-tolerant on every clone board — a simple resistor divider on the Arduino TX → module RXD line protects it; skipping this sometimes works on tolerant clones but is not something to rely on.
  • Default baud is usually 9600, but some pre-paired/relabelled modules ship reconfigured to a different rate — if you see garbage characters, that is the first thing to check.

Related Components

Related Guides & Projects