Adding a Bluetooth serial terminal to Raspberry Pi

Hey! This article is really old. The advice given here will not work on a Raspberry Pi 3, and will need some care with recent versions of Raspbian.

Sometimes you find a computer component that’s so cheap, that works so well, that you’re amazed you managed to live without it for so long. The JY-MCU Arduino Bluetooth Wireless Serial Port Module is that component for me right now.

JY-MCU Arduino Bluetooth Wireless Serial Port Module from dx.com
JY-MCU Arduino Bluetooth Wireless Serial Port Module from dx.com

This little board is a cheap ($8.50!) Bluetooth serial port. It’s happy with the Raspberry Pi’s 3.3 V logic levels, and will communicate at standard rates between 1200 and 1,382,400 baud. It even comes with a nifty little cable which is just the right polarity for the Raspberry Pi’s GPIO pins. It’s really meant to do serial comms on an Arduino, but it’s not limited to that.

What this board allows you to do is connect to your Raspberry Pi’s serial console via Bluetooth. That way, you can have your Raspberry Pi hidden away somewhere, and yet still log in as if you were talking to it directly through a serial cable. Combine this with a USB wireless adaptor (like the Belkin N150 that I use) and you’ve got a wireless device you can always connect to, even if your network goes down.

In order to use this device with your Raspberry Pi, you’re going to have to do some reconfiguration. Exactly what reconfiguration you do depends on some additional hardware:

  1. If you have a USB-TTL Serial converter (like an FTDI Friend, FTDI Basic Breakout – 3.3V, or the one I use, the OSEPP FTDI), you can reconfigure the Bluetooth module to run at 115,200 baud, the default speed of the Raspberry Pi’s serial port.
  2. If you don’t have the serial converter, you’ll need to reconfigure the Raspberry Pi’s serial terminal to run at the JY-MCU Bluetooth adapter’s default 9600 baud.

To reconfigure the Bluetooth module to run at 115,200 baud

(I chose this option, as it allows me to use the Bluetooth module with Firmata on an Arduino, too.)

The JY-MCU board comes with no instructions, but all the reconfiguration commands you’ll need are explained here: hc06_linvor_1.5_at_command_set [[hc06_linvor_1.5_at_command_set]] (cached copy; original has gone) While you’re setting the communications speed, you’ll probably also want to change the device name (so you can more easily recognize your own board, as the default is something like “Linvor”) and PIN (for that warm feeling of security that only a four digit code can provide). The device is configured using AT commands (or as we eldsters call them, Hayes commands) by plugging it directly into a USB-TTL Serial device attached to your computer. Here’s how you wire it:

USB-TTL Serial    Bluetooth Serial
================= =================
GND               GND
VCC               VCC
TXD               RXD
RXD               TXD

Note that TXD and RXD are crossed. The Bluetooth unit runs on a 3.6-6V supply, but 3.3V logic. To enter the AT commands, start a serial terminal (Hyperterm, minicom, screen …) at 9600 baud talking to the USB-Serial adapter, and copy and paste these commands in:

AT+NAMEBluey
AT+PIN4321
AT+BAUD8

You’ll have to disconnect the terminal and reconnect at 115,200 baud, as that last command just reset the Bluetooth device’s speed. You might want to use other settings than Bluey for the name and 4321 for the PIN, too.

Update: check that your Raspberry Pi’s /boot/cmdline.txt contains:

console=ttyAMA0,115200

You will not get a login prompt otherwise.

Now go to Using the Device.

To reconfigure the Raspberry Pi’s serial terminal to run at 9600 baud

Serial terminals traditionally ran at 9600 baud, and that seems a bit slow these days. But, if you don’t have a way of setting up the Bluetooth device differently, 9600 is what you’re stuck with. You’ll need to edit your Raspberry Pi’s /boot/cmdline.txt so that the part that previously read:

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

to

console=ttyAMA0,9600 kgdboc=ttyAMA0,9600

Note that this file should only contain one line, so be careful you don’t add extra line breaks or your Raspberry Pi won’t boot. Save the file, reboot your Raspberry Pi, and go to the next section.

Using the Device

On your Raspberry Pi, connect the Bluetooth Wireless Serial Port Module as follows:

Raspberry Pi      Bluetooth Serial
================= =================
5V  (GPIO Pin  2) VCC
GND (GPIO Pin  6) GND
TXD (GPIO Pin  8) RXD
RXD (GPIO Pin 10) TXD

(Despite the minimum 3.6V rating, I’m happily running mine from the 3V3 power, GPIO Pin 1. YMMV.)

When the board gets power, but isn’t paired, the LEDs on the Bluetooth module flash quickly. Now you need to pair the device with your computer (use 0000 as the PIN, or whatever you chose if you changed it), and it will appear as a serial port on your machine. On my Mac, that’s a device called /dev/tty.Bluey-DevB. The LEDs stop flashing when the port goes into use. Open up a serial terminal, set the device and speed correctly, and if all goes well, you should see:

Debian GNU/Linux wheezy/sid raspberrypi ttyAMA0

raspberrypi login:

Success!

She’s so beautiful the love of my life. We drove into the sea …

Screen shot 2009-09-12 at 19.28.46
earthsurfer is the first computer application for years – perhaps decades – that has made me go “Wheeeeeeeee!” It’s a port of Monster Milktruck! to use the Wii Balance Board on the Mac through Bluetooth. It has no use whatsoever, but it is inordinate amounts of fun.

half-assed, but endearing


So I bought the Kross Bluetooth Hands Free Cell Phone Car Kit with FM Transmitter. It has its good points, but it has some quirks and serious shortcomings.

Here’s what’s good:

  • It’s cheap (< $40)
  • It provides in-car Bluetooth speakerphone
  • It plays MP3s from SD card, USB stick, or an line level source.

Here’s what’s not so good:

  • Playback quality is limited to finding an open FM frequency, which is hard in the GTA
  • The transmitter is not very powerful, so nearby vehicles can swamp your signal (or, if you want to call it a feature, it’s a “random positional mashup”)
  • The phone mic is a tiny port on the unit, so sometimes the caller can’t hear you too well
  • You need to have your radio on to answer your phone
  • The USB port doesn’t provide enough charging current for a phone or GPS
  • The remote isn’t very good
  • Voice dialling doesn’t seem to work with my Blackberry
  • The MP3 playback function usually remembers where you were when you start the car, but sometimes forgets, and needs the card ejected and reinserted
  • It doesn’t know about ID3 tags
  • Weirdest of all, it plays back files in the strict order they were written to the directory – not ordered by file name. It seems that, under Microsoft operating systems, files are copied in name order, but under Unix, they are (winging it here) copied by inode. Using tar on a Mac or Linux is the way to go, as it writes in name order.

The Kross S-150 Manual (scanned PDF) is pretty terse, and has been of limited use to me. For all its faults, it’s kind of useful, but if I had a USB-capable stereo, I wouldn’t need this.

Kross Bluetooth Hands Free Cell Phone Car Kit with FM Transmitter .

Kross Bluetooth Hands Free Cell Phone Car Kit with FM Transmitter – is this thing too cheap to be any use? I think its part number is BHK-204. I’ve found nothing about it on the web.