Got bluetooth talking over a serial port
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Bluetooth on the Raspberry Pi Zero W (1 or 2)
|
||||
The Zero W series has Bluetooth capability because of the Wifi chip on the board.
|
||||
**Warning: This is a work in progress!!!**
|
||||
|
||||
# Reference
|
||||
- "Exploring Raspberry Pi" by Derek Molloy pg 537-544
|
||||
- [Connecting to a Headless Raspberry Pi using Bluetooth](https://medium.com/@tomw3115/connect-to-a-headless-raspberry-pi-using-bluetooth-0e61c05e1b68)
|
||||
- https://github.com/sorah/bluetooth-getty
|
||||
- [Use dbus insteadd of sdptool](https://linuxvox.com/blog/bluez-adding-services-attributes-and-profiles-without-sdptool-command/)
|
||||
|
||||
# Getting Bluetooth working
|
||||
1. Login to the pi via a USB-serial port or monitor-keyboard-mouse. Configuring bluetooth can sometimes kick you off the wifi.
|
||||
1. Tell `rfkill` to unblock bluetooth. Perhaps this is a security thing?
|
||||
```
|
||||
sudo rfkill unblock bluetooth
|
||||
```
|
||||
1. Restart the bluetooth service and check it's status
|
||||
```
|
||||
sudo systemctl restart bluetooth
|
||||
sudo systemctl status bluetooth
|
||||
```
|
||||
1. Figure out the address using `hcitool`
|
||||
```
|
||||
hcitool dev
|
||||
```
|
||||
1. If you have a laptop set to be discoverable, you can check if bluetooth is working
|
||||
```
|
||||
hcitool scan
|
||||
```
|
||||
1. You can then query that device for what services it offers
|
||||
```
|
||||
sdptool browse ADDRESS
|
||||
```
|
||||
1. Now we want to make the Pi discoverable to our phone, tablet, or laptop
|
||||
```
|
||||
sudo hciconfig hci0 piscan
|
||||
sudo hciconfig hci name RaspberryPi
|
||||
```
|
||||
1. A Serial Port Profile(SPP) is needed for our serial port
|
||||
```
|
||||
sudo sdptool add SP
|
||||
```
|
||||
1. For some reason, we have to put the bluetooth daemon in compatibility mode. (True as of 2016-2026 --foley). Find the line with `ExecStart` and put `--compat` at the end
|
||||
```
|
||||
sudo nano /lib/systemd/system/bluetooth.service
|
||||
```
|
||||
1. Test the SPP is setup
|
||||
|
||||
```
|
||||
sudo sdptool browse local
|
||||
```
|
||||
1. Time to pair it with a device
|
||||
```
|
||||
sudo bluetoothctl
|
||||
discoverable on
|
||||
agent on
|
||||
pairable on
|
||||
scan on
|
||||
```
|
||||
and once you have paired it
|
||||
```
|
||||
discoverable off
|
||||
exit
|
||||
```
|
||||
|
||||
1. If this works, you can install the `bluetooth.services` and `rfcomm.service` files to automate some of this setup.
|
||||
```
|
||||
sudo cp bluetooth.service /etc/systemd/system/bluetooth.target.wants/.
|
||||
sudo cp rfcomm.service /etc/systemd/system/.
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable rfcomm
|
||||
sudo reboot
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
# Discussion
|
||||
Apparently Bluez's `sdptool` is now depricated and they are telling people to use this new GATT via `busctl` or `dbus-send`. [linuxvox article on depricated sdptool](https://linuxvox.com/blog/bluez-adding-services-attributes-and-profiles-without-sdptool-command/)
|
||||
Reference in New Issue
Block a user