Cheap 2-Way Bluetooth Connection Between Arduino and PC

Picture of Cheap 2-Way Bluetooth Connection Between Arduino and PC
HC-05 to arduino with divider.jpg


In the guide, I will explain how I managed to send data back and forth between a PC and Arduino via a cheap Bluetooth HC-05 transceiver, which can be found for less than $10 on ebay with the breakout board. The version I have used in this project does not have a breakout board so it's little cheaper but  more difficult to solder.  I strongly recommend buying the module with the breakout board. This Bluetooth transceiver basically acts as a generic serial COM port.

The PC to Arduino Bluetooth serial connection can be useful in many applications such as controlling servos, motors, and writing to LCDs. The Arduino to PC connection can be useful in applications where the Arduino reads sensors then pass their values  via serial Bluetooth to a PC for processing. The distance for this transceiver is about 30 feet or so but it really depends on many other variables. This is ideal for indoors projects. 

The only downside of this cheap Bluetooth transceiver is the absence of headers which means you have to solder at least 4 wires. Then there's the absence of power LED as well as no TX/RX LEDs. I did not consider these features a necessity but some of you might want to pay more and get an enhanced version of this transceiver with all of these features.

The Bluetooth serial module I bought has the following specs:

-- Default COM setting: 9600, N, 8,1
-- Default Password/pairing code: 1234.
-- Supports the AT command to modify the baud rate, device name, passkey, master/slave, etc.
-- Supports baud rates 2400 -1382400.
-- Based on the CSR Bluetooth chip BC417143
-- Bluetooth specification v2.0 + EDR
-- Power supply: +3.3VDC 50mA
-- Frequency:  2.4GHz ISM band
-- Modulation:  GFSK(Gaussian Frequency Shift Keying)
-- Emission power:  ≤4dBm, Class 2
-- Sensitivity:  ≤-84dBm at 0.1% BER
-- Speed: Asynchronous:  2.1Mbps(Max) / 160 kbps, Synchronous: 1Mbps/1Mbps
-- Security:  Authentication and encryption
-- Size: 26.9mm x 13mm x 2.2 mm.
-- Working temperature: -20 ~ +75 Centigrade
-- Dimension: 26.9mm x 13mm x 2.2 mm


During my research, I have benefited from many projects on this and related topics. I have listed them in the references section.


1) In a previous project, I used a Pololu Wixel and an Arduino to control a robot remotely from a PC terminal. Here, I will show similar data exchange functionality but without the robot.

2) I also hacked the RF system of cheap wireless car toy and used the Arduino to transmit signals.

Remove these adsRemove these ads by Signing Up
1-40 of 51Next »
ngrigoriev17 days ago

My voltage on input RX is not hight enough and is about 3.06V instead of 3.33V. I used 1k and 2k resistors and my output 4.13V. So I shouldn't rely on this schematic and do my own calculation...

guruvaraja4 months ago

Very good instructional tutorial fine and working as stated. Thanks for the leading i correct path and android apps. for my future projects. I'm very much grateful to Bidar for his consistent support in this project

Thanks a lott

smaw515 months ago

This came in handy! I had bought one of these a while ago and forgot how to wire it up. It is odd how the tx and rx on the arduino and bluetooth are mixed up, but it's the only way it'll work. And your method of communication is way better than the way I did it in the past!


bstott5 months ago

Hi, Thanks for your work.

A suggestion - Do not use repetitive tinny sounding music. Any verbal is better, even if a different language.

After watching and listening to several videos it becomes grating on the nerves to listen and filter out such noise. And if we turn down the volume - IF - someone begins to speak we my may miss some good instruction.

Abood137 months ago
the BT module appeared in the serial ports menu on tera term but then i get the error "cant open com6" ... although the arduino serial monitor received the serial.println order and the boards rx kight blinks when i send 1 using the monitor but the led dznt work although it works if i switch to the blink led example by ardino website ... any suggestions,?
jcavanaugh058 months ago
In case anyone has the same problem I had: the computer was receiving text from the arduino via bluetooth but I could not send text to the arduino from my computer or my phone. The break-out board I was using had a bad connection from the TX of the HC-05. If I bypass the break-out board and attach directly to the HC-05 TX pin everything works.
adrianlu8 months ago
Worked perfectly. Cheers!
n_galia9 months ago
Hai tech.. I would like to ask question,..what if I dont have any 9V battery and I only connected the cable to my PC..the same set-up with your set-up ,the difference is that I will have PC and with the cable wire as the source of the power for my arduino,Will My Bluetooth Module works in this manner?
gr8 tutorial, did you use processing to create the app for android you are using,and is the source code for app available,i want to customise it according to my need. by the way thanx for the tutorial.
bergeo10 months ago
I just got this working using an HC-05 module sold by nyplatform on ebay. It has a built-in regulator and level shifting, and an led to show connection status.

One problem that took me a long time to figure out was that instead of connecting my Arduino RX pin to the module's TX pin, and vice versa, I had to go TX to TX and RX to RX. After I did that everything worked fine.

So wiring to that module is as simple as can be. Just connect like so:
  Arduino module
      TX         TX
      RX         RX
      5V         5V
     GND       GND

No voltage dividers needed. And it has header pins so it plugs right into a breadboard.
settra11 months ago
very nice work. can i ask you. could i, isntead of soldering to dig pins 0,1, do this:
plug usb cable. cut the cables, and solder those cables to the bluetooth??
ronk4rompy1 year ago
can any body explain me what is role of master/slave/slave loop role in hc05 .
bcz when i was use hc 05as master role that could not find by othe BT device .
and can slave mode send data from uc to pc?
plz help me i cant uderstand..
Is the voltage divider needed or can I just plug the bluetooth module into the 3.3v pin of the arduino?
Ignore this, I wasn't paying attention,
thanks sir! It will help me a lot , but can hc-05 Bluetooth module sustain 4V of power supply ???
renefabri1 year ago
Thank you for the video. You helped me. You show how to add a new device in Windows, and at 5 minutes 25 seconds in the video, one can see that "Other Bluetooth Other" is replaced by "HC05 Bluetooth Other". With my system, there was no change. It stayed on "Other Bluetooth Other", and subsequently the device could not be added. So, You made me think my Bluetooth dongle is failing. I tried with another Bluetooth dongle, and, hurray, "Other Bluetooth Other" is changing to something else, i.e. "Linvor Bluetooth Other" in my case. And afterwards, everything is ok.
Hey, thanks for guide. It helped much enough! The only thing that I did not like is, I cant see com ports sometime. I don't know the reason why but when I unplug the power and give it again to the hc05 it becomes normal.
milan.your1 year ago
Thank you very much for the tutorial. I followed all the steps but i was not able to see the COM PORT number for my bluetooth (HC-05), there wasn't anything listed under "Service" inside the properties of the BT. Please suggest me what i can do next.

limbo1 year ago
Great guide. Thanks
cmagro1 year ago
The Problem I have is that I am sending it AT and the BT module SHOULD answer back with OK but nothing happens. If I use my mobile phone, I can see and connect to it easily!

The BT TX is directly going to the Arduino RX however the Arduino TX is going into a 10k resistor, and into the RX of the BT. From here, I connect 20k to ground.

So its like a potential divider, with RX of BT in the middle, 20k at bottom to gnd and 10k at top to Arduino Tx...

chanakyapm1 year ago
ianmcrv1 year ago
I just released my Android software BTInterface I've used this module with a backplane.
Lots of info on my site
Please take a look.

jfenwick1 year ago
It turned out that I needed a 2.2K resistor going from the HC-05 TX pin to GND. I suspect the default state either had too much or too little voltage going to the Arduino RX pin.
jfenwick1 year ago
I'm seeing some strange behavior.
I'm using this HC-05 clone:

I hooked up the electronics as shown in your diagrams, except I used an adafruit level shifter instead of resistors.
I'm using a Mac and I'm able to pair with the device.
When I run the sketch that sends counter data, I'm able to open CoolTerm, connect to the HC-05 serial port, and I'm able to receive the data.
However, when I try to run the program where you can turn an LED on with 1 or off with 0, it does not work!
What could I be doing wrong?
ssarantis1 year ago
Hello, when i use the resistor as voltage dividers i receive only random caracters on my computer and if i use it directly it works normal.. i get confused :/
zouzzouz1 year ago
plz i want some help i have bought an hc05 bluetooth module andhave done all the necessary wiring that you have done in the next steps but i am still not having any results when i am searching for the device from a mobile phone or any device. thx
diy_bloke1 year ago
Still dont have this working. My problem seems to be that when I have everything installed, communication over COM3, both the Arduino IDE as well as TeraTerm can't connect to that port because ' it is already in use' yeah, by the bluetooth module I would think, so how do I fix this? I have followed the ibble to the letter
diy_bloke1 year ago
I am quite unknowledgeable about what would be a master or a slave in Bluetooth, but as for now I am even unable to get any type of significant connection and I'd be glad if someone could offer some pointers/help

I have what I believe is the HC06 connected to my Arduino Rx ->Tx and Tx ->Rx
I have a bluetooth dongle on my pc. I easily establish a connection, at least that is wht my computer says, it recognizes the HC06 and comes back with teh device ' linvor'.

But that is it. I have a program running on my arduino at 9600 Baud that basically repeatedly sends the message ' test' to the serial port, but I get nothing on my pc (In the IDE serial monitor or a terminal program that is) and I keep having a flashing LED on my bluetooth HC06 module, whereas I understand it should go on uninterrupted when there is transmission.
What is it I do wrong?
yaly diy_bloke1 year ago
I don't know about the led code thingie but right click on the bluetooth icon in the task bar, click open settings, select com ports tab from the top, click add, select outgoing check box, browse for the module and click ok, you should have a comport installing and close any arduino ide open and reopen it, select the serial port (eg: com 30) from tools drop down menu, now try the testing program again
diy_bloke yaly1 year ago
Your advice brought me a bit further, but not quite there yet.
I have a completly new Win 7 installed. It has bluetooth and it recognizes the module attached to my Arduino.
I follow your description, everything goes well and COm3 is selected as Outgoing (i.e. PC initiates)
I start up the Arduino IDE (also a fresh install)
I select COM3
suddenly get the message ' cant find com3' (or similar words)
I check... com 3 is still present as attached to the Bluetooth module
Any suggestions??

I actually seem to have asimilar problem in UBUNTU :-) there it is connected to rfcomm0 and though I change it in the conf file, I still cant select that, but I already would be ahppy if I got it to work under windows
diy_bloke yaly1 year ago
Thanks, But I have no problem installing or finding the device/module or installing com ports, I just dont get anything into my serial monitor. I think what you describe is what I did (cant repeat right now, on Linux) and I have no problem connecting to other bluetooth devices, except this one.
My computer finds the module it hets assigned a com port, but I dont get anything on it

I guess I just have to try it again step by step when I am back on windows. On Linux now and the same problem
I can ping the device and everything says it is connecetd, I see the LED change fron flickering to solid burning, but at least on Ubuntu the problem seems to be that the IDE can't see the rfcomm device (not even when i define it in preferences.con). Odd, I have no problem exchanging date with e.g. my phone
I'll just have to wait till I got windows installed again and try again, maybe I overlooked something
yaly1 year ago
slightly off-point: although its uno r2 the atmgea 8 (usb to serial ttl coverter) is 90 degrees oriented but mine is 45 degrees, weird but cool. My real question: what is the difference between HC-05 module and HC-03 module?
Okay just thought i'd let you know that ive managed to get this all working as your awesome little test sketches have instructed !

I have no idea why this all started working as it should for me, i must have started from scratch building this circuit up on my breadboard well-over 30 times and now im finally getting the arduino counting onto terra term and also the pin-13 LED on/off sketch is working as it should !

Once again thanks for the instructable !!!
Also the Counter-sketch comes up with similar jibberish and im so stuck now and dont know what else to do, ive wired it up several times from scratch following your guide but still get the same results from both sketches, please help ?

many many thanks in advance for any help
Hi techbitar

thanks for the GREAT instructable - ive just dived into the Arduino world and loving it !

i have a few of these bluetooth modules, not sure about what firmware they are or if they are slave or master but thats not what i need help with lol !

Please would you be able to tell me why i keep getting a load of writing keep being sent to my terraterm monitor from the Arduino please?

the thing is, i have your Pin-13 sketch loaded up and its sending this stuff:

Im not quite sure what ive done wrong as ive connected it up as per your instructable and cant seem to get this sketch to turn on the pin-13 LED when i enter either 1 or 0 in terraterm because the Arduino is sending that above repeating line to my serial terminal !

Please please help !

i know this is an old post but ive got all this setup on my desk and it took hours to get this far, i would really appreciate some enlightenment on this if you would know whats going on here, please please help

Many thanks in advance !
gomibakou2 years ago
Notice these modules externally all looks very similar but the major diferences are in the firmware.

I resume the firmwares:

HC-05: master / slave mode, programmable via AT commands.
HC-06 (or Linvor 1.5): only slave mode
I think there is other HC-06 fixed for master mode, so, two different HC-06 firmwares and FIXED for master or slave: you can't change the mode.

HC-03 and HC-04 are industrial versions of the HC-05 and HC-06 firmwares.

Have this in mind before purchashing these modules because not all vendors are clear about this (i found some vendors that mixed all the firmwares in the description and at the end you don't know really what it is using -surely neither them know it xdD-).

The most common is HC-06 (linvor 1.5) firmware in slave mode.

So, double check this before buying if you intend to buy a master module.

I talk from my own experience ;)
exactly same happening to me. I have HC-06 and now can't enter into AT mode. though i have paired paired HC-05 as master and HC-06 as slave. but still no communication is found :(
any clue?
im_technick2 years ago
Is possible to make another of this and communicate each other?
techbitar (author)  im_technick1 year ago
I don't see why not.
1-40 of 51Next »