Modify the HC-05 Bluetooth Module Defaults Using AT Commands




Introduction: Modify the HC-05 Bluetooth Module Defaults Using AT Commands

Did I unplug the solder iron?
September 4, 2013: Featured on
September 1, 2013: Featured on


In this guide, I will explain how to use Arduino to change the settings of the ubiquitous HC-05 Bluetooth module using the AT command set. The HC-05 comes with a rich set of AT commands to perform various tasks such as changing the module's default settings including changing the pass code, the device name, and the baud rate. But the process of switching the HC-05 into AT command mode for first time users of the module is not straight forward and the docs takes short cuts. There are a couple of ways to do this. I have picked the one I think is the easiest  I will do my best to illustrate the process in simple to follow steps. You can find the full set of AT commands in the attached datasheet.


The HC-05 Bluetooth module and its siblings are by far the most popular and inexpensive Bluetooth modules used for RF communications by microcontroller hackers. It costs less than $10 on ebay and it's easy to implement. I have published two guides based on the HC-05 Bluetooth module.  The first guide explains how to use the HC-05 with the Arduino. The second is an Android app that simplifies controlling Arduino from your smart phone over Bluetooth using the HC-05. In both cases, the default settings for the HC-05 were fine. 

In the process of using the HC-05 for a project, I ran into a situation where I needed to change the defaults for the module. For example, the default baud rate on the HC-05 is 9600. That's slow for high-speed transmission. The HC-05 can go as high as 1382400 baud rate according to the HC-05 reference. Also, the HC-05 has a default device name of HC-05. Having two or more of those devices in the same area can be confusing. You can use an AT command to change the device name. Also, the pin code default is 1234. You may wish to change that for some projects to ensure basic security.

After spending some time searching the web I realized many people are having a hard time changing the default settings for the HC-05. Switching the HC-05 from data transmission mode to configuration mode, to send AT commands to the HC-05, involves a few wiring and software acrobatics.  Add to the mix all the variations of the HC Bluetooth module family and the various vendor settings and you get the picture. 

This guide only covers the HC-05 module with the breakout board. 


The HC-05 is a 3.3V system but the breakout board offers current limiting resistors for some protection. While it's not advisable to keep the HC-05 connected to the 5V Arduino Uno pins, for this short exercise I decided to skip the voltage dividers which I use to drop 5V to 3.3V. I advise you to use voltage dividers whenever you connect the HC-05 pins to  5V pins such as the Arduino Uno. If you skip the voltage divider, do so at your own risk.

Step 1: Components & Wiring

I have tested this guide with the following:

  • HC-05 GND --- Arduino GND Pin
  • HC-05 VCC (5V) --- Arduino 5V
  • HC-05 TX --- Arduino Pin 10 (soft RX)
  • HC-05 RX --- Arduino Pin11 (soft TX)
  • HC-05 Key (PIN 34) --- Arduino Pin 9

Step 2: The Arduino Code for HC-05 Command Mode

This Arduino program (HC_05.ino) does two things. It takes the AT commands you enter from the Arduino IDE Serial Monitor and sends those commands to the HC-05. The program then reads the output of the HC-05 and displays it on the Arduino IDE Serial Monitor. You can also use a terminal emulator such as Tera Term instead of the Arduino Serial Monitor. 

The Arduino communicates with the HC-05 using the SoftwareSerial ports while the Arduino communicates with the user via the Serial Monitor.


AUTHOR: Hazim Bitar (techbitar)
DATE: Aug 29, 2013
LICENSE: Public domain (use at your own risk)
CONTACT: techbitar at gmail dot com (


#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
  pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
  digitalWrite(9, HIGH);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more

void loop()

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())

Step 3: Steps to Switch the HC-05 Into Command Mode

For the HC-05 module to switch to AT command mode, the HC-05 pin 34 (often referred to as the Key pin) needs to pulled HIGH but in a certain order of events explained below. When the HC-05 enters the AT command mode, it will communicate at 38400 baud rate. Follow these steps in the stated order to switch to the HC-05 to AT command mode. 

  1. Wire the HC-05 and Arduino Uno per instructions.
  2. BEFORE YOU CONNECT THE ARDUINO TO THE USB remove the VCC (power) red wire from the HC-05 so it's not getting any power from the Arduino. All other wires are still connected.
  3. Now connect the Arduino Uno to the USB cable extended from your PC.
  4. Make sure the HC-05 module is NOT PAIRED with any other Bluetooth device.
  5. Re-connect the Arduino Uno 5V wire to the HC-05's VCC (5V power) pin.
  6. The HC-05 LED will blink on and off at about 2 second intervals. Now the HC-05 is in AT command mode ready to accept commands to change configuration and settings.
  7. To test if everything is wired correctly,  open the Serial Monitor from the Arduino IDE and type "AT" and click SEND. You should see an "OK"
  8. If you don't see an "OK" check your wiring.

Step 4: Example HC-05 AT Commands

You can send  AT Commands to the HC-05 from the Arduino IDE Serial Monitor while the Arduino is running the attached Arduino program.

I have listed a few popular AT commands that will change the HC-05 device name, pass code, and speed. You will find a full set of AT commands from the attached HC-05 reference PDF file.

(remove double quotes from AT command)
  • To return HC-05 to mfg. default settings: "AT+ORGL"
  • To get version of your HC-05 enter: "AT+VERSION?"
  • To change device name from the default HC-05 to let's say MYBLUE enter: "AT+NAME=MYBLUE"
  • To change default security code from 1234 to 2987 enter: "AT+PSWD=2987"
  • To change HC-05 baud rate from default 9600 to 115200, 1 stop bit, 0 parity enter: "AT+UART=115200,1,0"

11 People Made This Project!


  • Fix It! Contest

    Fix It! Contest
  • Tiny Home Contest

    Tiny Home Contest
  • Metalworking Contest

    Metalworking Contest

227 Discussions



my hc-05 module cant go into ATmode i have tried everything please help me

No reply from AT commands ..Even my Bluetooth is unconnected to the VCC I can still see blinking from Bluetooth. We have an ongoing project and we spent 2 days to figure it out. Please reply it ! =)

I have a problem in getting into at mode
As soon as I keep the button press it works but when I release it,it doesn't .there is also no effect on led blinking

Is it possible to set 2 HC-05 as master and communicate with each other in a bio-directional communication configuration? I want to start communication from either side.

Just making sure: if you modify the defaults (say setting the UART parity from NONE to ODD), does the HC-05 remember this by itself (e.g. in some kind of internal EEPROM)? Or do you have to apply the AT+ commands every time you turn the module on?

I'm having problems changing the password of the hc-05 module, when I try to change I get the following error:

Enter AT commands:


Can anyone help me ?


I'm having problems changing the password of the hc-05 module, when I try to change I get the following error:

Enter AT commands:


Can anyone help me ?

1 reply

maybe you should quote your password like


I want to programming of HC05 for home automation system.

My project is DOMESTIC APPLIENCES CONTROLLING WITH USE OF BLUETOOTH. so i want to know everything about HC05 programming and its work in master or slave.. i also know it.

i hope u understand everything..

so please send me your reply as fast as you can..


How do you take the module out of ATCommand Mode without unplugging the whole Arduino? Thanks for making tutorial... It helped me a lot.

Tks a lot for your help and your tutorials, are amazing.

I've only change the setup line:

BTSerial.begin(9600); // MY HC-05 default speed in AT command mode

It seems that was my default HC05 baud rate. After that, all AT commands were recognized.

Good night,

so once I follow all these steps I now just have two arduinos hooked up to master and slave Hc-05s

then when I power both they should auto hook up and one will serial write to the other ?

this is what i get in serial monitor on an UNO

cant seem t get any AT response from any app or program. also tried ftdi unit.

it connect via BT but does accept any commands from terminal.. tried a few different sketches and techniques..


3 replies

I had the same problem. You have to set 'Newline' to 'Both NL & CR', if that doesn't solves your problem try to set '38400 baud' to '9600 baud' (That worked for me)...

I have the same problem .. What didi you do so that it works ?

thank you! worked for me so far Im getting responses atleast, havent tried an actual bluetooth connection yet but thanks for your article.

just a note... I have the HC-05 with the EN Key & the method DrMike suggested worked for mine module

Didn't work at first. I then realised (after using a ftdi cable and Realterm) that I needed to have 'Both NL & CR' selected in the serial monitor for sending the serial data. Hope this helps others avoid this pitfall. Mike

I guess it is different for every module. My HC-05 was on 9600 in both modes.

My sequence was fairly simple. I used an ftdi module

Connect the necessary pins:


plug ftdi module in usb,

open serial monitor, set to 9600 baud

Press the little 'state' button on the module some 4-5 sec

enter AT in the serial monitor. if it comes back with 'OK' you are good to go