用蓝牙控制树莓派
原来蓝牙也能ssh连接,我又孤陋寡闻了......
这是什么奇怪的需求...:
1.由于特殊原因树莓派和电脑并不在一个网段内。(树莓派挂在二级路由器上,电脑连接wifi在三级路由器。)这导致没办法远程控制树莓派,场面一堆十分僵硬。
2.网络速度过慢的情况可能也能用得到。(比蓝牙还慢可能该换路由器了)
实际使用下来完全足够满足正常的操作了。ssh基本没有延迟,甚至VNC也基本能用,完美解决问题。
原理
这需要使用bluetooth pan这种技术,即蓝牙局域网。【说白了还是要组网】蓝牙局域网可被应用成group ad-hoc networking(组网) 和 networking accesspoint(接入点模式)(可视为10BASE-T的网络)。接入点模式下计算机通过接入点共享网络资源。
简单来说:组网可以使多个蓝牙设备组成一个局域网,接入点提供进入因特网的功能。且两种实现方式都和TCP/IP无缝衔接。以树莓派为例,其他机器可以使用蓝牙连接树莓派的接入点从而进入树莓派的局域网,同时树莓派和接入设备(如windows电脑)仍可以自由联网。因此所谓的蓝牙ssh实际上就是在树莓派的局域网中使用ssh。
操作
使用大佬提供的方案来部署:raspbian - How can I set up a bluetooth PAN connection with a Raspberry Pi and an iPod? - Raspberry Pi Stack Exchange
【1】更新工具,配置网络环境。添加一个pan0的网络,桥接模式。
sudo -i
apt install bluez bluez-firmware bluez-tools dnsmasq
vim /etc/systemd/network/pan0.netdev
//添加以下代码
[NetDev]
Name=pan0
Kind=bridge
【2】配置蓝牙pan接口
vim /etc/systemd/network/pan0.network
[Match]
Name=pan0
[Network]
Address=127.20.20.1/24 //随意指定,一般用24位的掩码内网网址就行了
DHCPServer=yes
【3】创建蓝牙服务
vim /etc/systemd/system/bt-agent.service
//添加代码
[Unit]
Description=Bluetooth Auth Agent
[Service]
ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
Type=simple
[Install]
WantedBy=multi-user.target
【4】创建蓝牙网络服务
vim /etc/systemd/system/bt-network.service
//添加代码
[Unit]
Description=Bluetooth NEP PAN
After=pan0.network
[Service]
ExecStart=/usr/bin/bt-network -s nap pan0
Type=simple
[Install]
WantedBy=multi-user.target
【5】完成了,直接开始运行,并且设置开机自运行
sudo systemctl enable systemd-networkd
sudo systemctl enable bt-agent
sudo systemctl enable bt-network
sudo systemctl start systemd-networkd
sudo systemctl start bt-agent
sudo systemctl start bt-network
【6】打开蓝牙发现,开始匹配(匹配完成之后可以关掉)
sudo bt-adapter --set Discoverable 1
连接windows电脑
【1】蓝牙连接树莓派,检查是否能ping通,如ping 172.20.20.1 如果不能ping通说蓝牙连接有问题,或设置有问题。
【2】选择树莓派作为接入点即可 控制面板——设备(设备和打印机)——树莓派——右键,选择为接入点——DONE
【3】连接ssh,愉快操作了。
【其他】此时ssh可以连接树莓派,用的是ip地址,如127.20.20.1。如果要访问树莓派上的服务,应该使用hostname.如访问520端口的服务:raspberrypi:520。而非127.20.20.1:520。比如我配置了pi-dashboard。默认应该是ip/pi-dashboard。此时树莓派网络默认raspberrypi。所以使用raspberrypi/dashboard即可连接。