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 • Updated on

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

Top comments (2)

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...