User Tools

Site Tools


guides:ble-serial

The following are instructions for connecting a Bluetooth device for serial communication using BlueZ 5.31. (adapted from https://gist.github.com/0/c73e2557d875446b9603)

Prerequisites

The following packages are required:

  • `bluez`: `bluetoothd`
  • `bluez-utils`: `bluetoothctl`, `rfcomm`

Pair

  • Start daemon: `systemctl start bluetooth`
  • Pair using `bluetoothctl`:
 power on
 agent on
 scan on
 ... wait ...
 scan off
 pair <dev>
  • Create serial device: `rfcomm bind 0 <dev>`

You should now have `/dev/rfcomm0`.

Unpair

  • Remove serial device: `rfcomm release 0`
  • Unpair using `bluetoothctl`:
 remove <dev>
 power off
  • Stop daemon: `systemctl stop bluetooth`

Troubleshooting

Check `rfkill list` to make sure that the Bluetooth device is not blocked.

Accessing from Folk

The folk user needs to be able to open the serial port - make sure the folk user is a member of the dialout group.

Folk program to read from the serial port (in this case a n M5StickC running the following program: https://github.com/naninunenoy/AxisOrange):

Start process {

    Wish $::thisProcess shares statements like \
      [list /someone/ claims the m5stickC has quaternion /q/]

    set serial [open /dev/rfcomm0 r+]
    chan configure $serial -mode "115200,n,8,1"
    chan configure $serial -blocking 0 -buffering none -translation binary

    while {1} {
        set data [read $serial]             ;# read ALL incoming bytes
        set size [string length $data]      ;# number of received byte, may be 0
        if { $size } {
            #puts "received $size bytes: $data"
            # parse header
            binary scan $data {su su iu f3 f3 f4} dataId dataLen t a g q
            #puts "$dataId $dataLen $t $a $g $q"
            Retract $::thisProcess claims the m5stickC has quaternion /q/
            Assert $::thisProcess claims the m5stickC has quaternion $q
        } else {
           #puts "<no data>"
        }
        Step
    }
}
guides/ble-serial.txt · Last modified: 2023/12/02 14:31 by discord

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki