←back to thread

233 points bahaaador | 1 comments | | HN request time: 0s | source

Hi HN! I built Bluetooth USB Peripheral Relay, a tool that lets Bluetooth devices (like keyboards and mice) connect to USB-only hosts using a Raspberry Pi Zero W.

Why? My friend needed a way to use his Bluetooth mouse and keyboard on a PC with Bluetooth disabled due to policy restrictions. This tool acts as a bridge, relaying Bluetooth input over USB. It also lets you use Bluetooth peripherals with older devices that only support USB input.

Tech: Written in Go, optimized for Raspberry Pi Zero W.

I love HN’s community and often lurk here—I’m hoping this project is useful or at least sparks some interesting discussions. Feedback and contributions are welcome!

Show context
imhoguy ◴[] No.42126183[source]
Cool stuff! Actually that tempts me to start a new rabbit hole research: could we do BT -> Internet -> BT. I would have so many uses to that.
replies(3): >>42126302 #>>42126373 #>>42127248 #
trklausss ◴[] No.42126373[source]
Well, you need a frame converter that sends it to an IP address/DNS server, and on the receiving side something that receives that packet on a specific port and translates it to a BT command.

I would say the most complicated part would be the TCP/IP stack, and binding/publishing your address, but if you are running something with Embedded Linux it is doable :)

replies(2): >>42126437 #>>42126803 #
mtucker502 ◴[] No.42126437[source]
ESPHome has this feature (called btproxy). It works well with BTLE devices. I use it for remote temperature sensors and a few other IoT btle devices.

https://esphome.io/components/bluetooth_proxy.html

replies(1): >>42130319 #
1. g1sm ◴[] No.42130319{3}[source]
This seems to be specific to Home Assistant:

> Note that while this component is named bluetooth_proxy, only BLE devices (and their Home Assistant integrations) are supported.

One specific use-case I have in mind is controlling a Chromecast over the internet. So a smartphone should have its bluetooth signal relayed over an IP network. I haven’t found anything that would allow me to do that yet.