The HC and HM series are reliable, low-cost options for adding wireless communication to microcontroller projects. Understanding their differences primarily comes down to the Bluetooth protocol they use and their operating roles.
Classic Bluetooth: HC-05 Transmission Module and Bluetooth module type "HC-06"
These modules rely on the older Bluetooth 2.0 specification, also known as Bluetooth Classic. The HC-05 is highly versatile because it can operate as either a master or a slave, meaning it can initiate a connection with another device or wait passively for incoming connections. The HC-06 is locked to slave mode only, making it a simpler, plug-and-play option if you just need a smartphone or computer to send serial data to your microcontroller.
Because they use Bluetooth Classic, they cannot interface with iOS devices for custom data transfer. While their breakout boards typically accept 5V power, their RX and TX data lines operate at 3.3V logic, which matches perfectly when wiring them directly to 3.3V development boards like an RP2040 or ESP32 without needing voltage dividers on the TX lines.
Bluetooth Low Energy (BLE): Bluetooth 4.0 BLE - HM-10, Hm-11 Bluetooth 4.0 Ble Serial Transmission Module Comptible With, and 2x Mh18 Wireless Bluetooth Audio Modules Mp3 Receiver Lossless Decoder
The HM series utilizes Bluetooth Low Energy (BLE), which drastically reduces power consumption and enables compatibility with Apple iOS devices.
HM-10: Uses Bluetooth 4.0 BLE and shares the exact same physical pinout and footprint as the HC-05. It is the easiest drop-in replacement if you are upgrading an older circuit design to BLE.
HM-11: Uses the same 4.0 BLE chip but comes in a much smaller, surface-mount form factor with fewer exposed I/O pins, designed for highly compact, permanent builds.
HM-18: Upgrades the underlying architecture to Bluetooth 4.2 / 5.0 BLE. This provides significantly faster asynchronous data transfer rates and even lower standby power draw. (Note: The HM-18 data transceiver is occasionally confused with the MH-M18 audio receiver; when sourcing parts, ensure you are looking for the BLE UART module).
Configuring Bluetooth Modules using AT Commands:
Setting up a transparent wireless serial bridge requires configuring one module as the Master and the other as the Slave. We will use two HC-05 modules for this process, as the HC-06 is restricted to slave-only operation.
We will map out the wiring using an RP2040. Because the RP2040 natively uses 3.3V logic, it interfaces perfectly with the HC-05’s RX and TX lines, allowing you to skip the voltage dividers that 5V microcontrollers typically require.
You will need to wire both the Master and Slave HC-05 modules to your development board(s). Most HC-05 breakout boards have an onboard voltage regulator that accepts 5V power, even though the data lines are 3.3V.
VCC: Connect to VBUS (5V) (or 3.3V if your specific module bypasses the 5V regulator)
GND: Connect to GND
TXD: Connect to an RP2040 RX pin (e.g., GP1 / UART0 RX)
RXD: Connect to an RP2040 TX pin (e.g., GP0 / UART0 TX)
EN / KEY: Connect to a digital pin (e.g., GP2) or temporarily jump it to 3.3V to force the module into AT command mode.
To send AT commands, the HC-05 must be booted into its configuration state.
Disconnect power to the HC-05.
Press and hold the small physical button on the HC-05 breakout board (or pull the EN/KEY pin HIGH to 3.3V).
Reconnect power while continuing to hold the button.
The onboard LED will change from a rapid blink to a slow blink (about once every two seconds). You are now in AT mode.
Note: In AT mode, the HC-05 defaults to a baud rate of 38400. Ensure your serial monitor or bridge code is set to match this, and set the line ending to "Both NL & CR" (Newline and Carriage Return).
Connect to your first HC-05 and enter the following commands to set it up as the listener.
Test the connection: AT (Expected response: OK)
Restore default settings (optional but recommended): AT+ORGL
Clear any previously paired devices: AT+RMAAD
Set the module role to Slave (0): AT+ROLE=0
Set your desired communication baud rate for when the modules are actively bridging data (e.g., 9600 baud, 1 stop bit, no parity): AT+UART=9600,0,0
Query the module's unique Bluetooth address: AT+ADDR? (Expected response: something like +ADDR:14:2:110007. Write this down, but replace the colons with commas for the next step: 14,2,110007)
Disconnect the Slave, hook up your second HC-05, put it into AT mode, and send the following commands to tell it exactly who to look for.
Test the connection: AT
Restore defaults and clear past pairs: AT+ORGL AT+RMAAD
Set the module role to Master (1): AT+ROLE=1
Set the connection mode to bind to a specific Bluetooth address (0): AT+CMODE=0
Bind the Master to the Slave's address (using the comma-formatted address from step 3): AT+BIND=14,2,110007
Match the communication baud rate you set on the Slave: AT+UART=9600,0,0
Disconnect power from both modules. Remove any jumper wires to the EN/KEY pins and do not hold the buttons down.
Power both modules on normally. The LEDs on both modules will initially blink rapidly as they search for each other. Within a few seconds, they will automatically pair, and the LEDs will synchronize into a quick double-blink pattern. Any serial data sent to the Master's RX pin will now instantly emerge from the Slave's TX pin, and vice versa.