diff --git a/bluetooth.md b/bluetooth.md new file mode 100644 index 0000000..12392f1 --- /dev/null +++ b/bluetooth.md @@ -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/)