DEV Community

Cover image for How to connect raspberry pi with HC-05 bluetooth module + arduino programm
Iván Moreno
Iván Moreno

Posted on • Edited on

7 2

How to connect raspberry pi with HC-05 bluetooth module + arduino programm

Basic connection between arduino and raspberry pi through Bluetooth

setup

The hardware

  • Raspberry pi 3b+ (it has inbuilt Bluetooth)
  • Arduino micro
  • HC-05 Bluetooth module

System requirements

  • arduino-cli
  • picocom
  • python 3

Configurations for Bluetooth module HC-05

  • Configure the module as master
  • Set PIN

Configurations for Raspberry Pi

Configurations for arduino

  • Install avr boards
  • Make physical connections
  • Copy arduino code and upload to arduino board

HC-05 Setup

First connect Bluetooth module to USB serial and press EN button, then send AT commands.

at-commands

Test AT commands in serial port from USB to serial converter. The default baud rate for AT commands is 38400

$ echo -e "AT\r" | picocom -b 38400 -qrx 1000 /dev/ttyUSB0
OK
Enter fullscreen mode Exit fullscreen mode

Set with AT commands

$ echo -e "AT+NAME=ARDUINOBT\r" | picocom -b 38400 -qrx 1000 /dev/ttyUSB0
OK
Enter fullscreen mode Exit fullscreen mode

Set password

$ echo -e "AT+PSWD=1379\r" | picocom -b 38400 -qrx 1000 /dev/ttyUSB0
OK
Enter fullscreen mode Exit fullscreen mode

Set default baud rate

$ echo -e "AT+UART=115200,1,0\r" | picocom -b 38400 -qrx 1000 /dev/ttyUSB0
OK
Enter fullscreen mode Exit fullscreen mode

Disconnect and test settings

Raspberry Pi Setup

Once installed raspbian and make the basic configurations, install Bluetooth required packages.

$ sudo apt install -y pi-bluetooth bluetooth bluez picocom blueman python3-pip
Enter fullscreen mode Exit fullscreen mode

First edit Bluetooth service in /etc/systemd/system/dbus-org.bluez.service
Add the following lines

  ExecStart=/usr/lib/bluetooth/bluetoothd -C
  ExecStartPost=/usr/bin/sdptool add SP
Enter fullscreen mode Exit fullscreen mode

Reload systemd units

$ sudo systemctl daemon-reload
Enter fullscreen mode Exit fullscreen mode

Enable Bluetooth service

$ sudo systemctl enable --now bluetooth
Enter fullscreen mode Exit fullscreen mode

Edit /etc/modules-load.d/modules.conf to load rfcomm module automatically
Add the following line

rfcomm
Enter fullscreen mode Exit fullscreen mode

Reboot the system

Pair with HC-05 module

Access to Bluetooth console

$ sudo bluetoothctl 
Enter fullscreen mode Exit fullscreen mode

Pair with Bluetooth module

[bluetooth]# agent on
[bluetooth]# scan on
  Discovery started
  [NEW] Device 98:D3:31:50:4A:C1 98-D3-31-50-4A-C1
  [CHG] Device 98:D3:31:50:4A:C1 LegacyPairing: no
  [CHG] Device 98:D3:31:50:4A:C1 Name: ARDUINOBT
  [CHG] Device 98:D3:31:50:4A:C1 Alias: ARDUINOBT

[bluetooth]# scan off
  [CHG] Controller B8:27:EB:80:2D:06 Discovering: no
  Discovery stopped

[bluetooth]# pair 98:D3:31:50:4A:C1
  Attempting to pair with 98:D3:31:50:4A:C1
  [CHG] Device 98:D3:31:50:4A:C1 Connected: yes
  Request PIN code
  [agent] Enter PIN code: 1379
  [CHG] Device 98:D3:31:50:4A:C1 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
  [CHG] Device 98:D3:31:50:4A:C1 ServicesResolved: yes
  [CHG] Device 98:D3:31:50:4A:C1 Paired: yes
  Pairing successful
  [CHG] Device 98:D3:31:50:4A:C1 ServicesResolved: no
  [CHG] Device 98:D3:31:50:4A:C1 Connected: no

[bluetooth]# trust 98:D3:31:50:4A:C1
  [CHG] Device 98:D3:31:50:4A:C1 Trusted: yes
  Changing 98:D3:31:50:4A:C1 trust succeeded

[bluetooth]# exit
Enter fullscreen mode Exit fullscreen mode

Create a serial device

$ sudo rfcomm bind rfcomm0 <device's MAC>
Enter fullscreen mode Exit fullscreen mode

If everything works, connect with picocom and test communication in both sides

check-connection

Install pyserial library for python3

$ sudo pip3 install pyserial
Enter fullscreen mode Exit fullscreen mode

Copy pythonClient dir to raspberry pi and execute client.py script

$ python pythonClient/client.py
Enter fullscreen mode Exit fullscreen mode

Arduino Setup

Physical connections

Connections for HC-05 module

  • GND -> GND Arduino
  • VCC -> VCC Arduino
  • RX -> D14 Arduino
  • TX -> D15 Arduino
  • EN -> N/C

Compile and upload the sketch

Upload the code to arduino board, considering serial port of arduino micro is /dev/ttyACM0

$ arduino-cli compile -b arduino:avr:micro -u -p /dev/ttyACM0 arduinoBT-HC05/
Enter fullscreen mode Exit fullscreen mode

Test Communications

test-arduino-connection

Raspberry pi output example

developer@raspberrypi:~ $ python pythonClient/client.py
  Enter your message below.
  Insert "exit" to leave the application.
  You message >> hi from raspberry pi
  Server Response >> hi

  You message >> test connection
  Server Response >> test connection from arduino

  You message >> exit
Enter fullscreen mode Exit fullscreen mode

Arduino Output example

$ picocom -b 115200 /dev/ttyACM0
  Terminal ready
  Server response: hi from raspberry pi
  You response -> hi
  Server response: test connection
  You response -> test connection from arduino

  Terminating...
  Skipping tty reset...
  Thanks for using picocom
Enter fullscreen mode Exit fullscreen mode

Source code

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (4)

Collapse
 
csar_0de0f149ffa6c8756e7 profile image
César

Hola Iván! Estaba siguiendo la guía bien, hasta que en el paso de

"First edit Bluetooth service in /etc/systemd/system/dbus-org.bluez.service
Add the following lines

ExecStart=/usr/lib/bluetooth/bluetoothd -C
ExecStartPost=/usr/bin/sdptool add SP"

me da un error a la hora de intentar guardar el archivo editado:
Image description

Collapse
 
csar_0de0f149ffa6c8756e7 profile image
César

I was finally able to edit the text file by opening it from the console and editing it using nano. The problem was I had no permission to edit the file, so I used "sudo nano file.txt" to gain the neccesary permissions.

Collapse
 
joeoliveri profile image
Joe-Oliveri

I was following along until
"Copy pythonClient dir to raspberry pi and execute client.py script"

What is pythonClient and where does it come from? Why do I need to copy it to my Pi? Or do you mean to copy it to the raspberry pi root directory? There does not appear to be a "pythonClient" directory anywhere on my Pi currently

Collapse
 
joeoliveri profile image
Joe-Oliveri

Nevermind, I found it in your GitHub Repo: github.com/ivanmorenoj/rpi-bluetoo...

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs