我正在为我的汽车开发一个平台,该平台可以自动连接任何试图通过蓝牙连接到Pi的设备。当前,它需要Pi接受配对,但是在这种情况下,将没有屏幕,因此它将需要自动进行。我该怎么做?
我正在为我的汽车开发一个平台,该平台可以自动连接任何试图通过蓝牙连接到Pi的设备。当前,它需要Pi接受配对,但是在这种情况下,将没有屏幕,因此它将需要自动进行。我该怎么做?
Answers:
(请注意,由于bluez删除了bluetooth-agent命令,因此从Raspbian Jessie开始,此答案不再起作用)
因此,当前您声明可以很好地连接到Pi,但需要一个用于配对过程的监视器。
注意:接受任何连接是一个非常不安全的想法,如果您仅使用有限的一组设备,将它们设置为受信任的设备将更加有意义,因为这将限制与Mac地址的连接,但是不允许新的连接。无需监视器即可添加的设备
但是无论如何,下面列出了您需要运行的命令,以接受与Pi进行的所有连接,使其可被发现并设置可预测的引脚:
注意:您可能需要将零输入更改为hci0
设备的蓝牙编号。
hciconfig hci0 up
hciconfig hci0 sspmode 1
hciconfig hci0 piscan
sudo bluetooth-agent 1234
现在,在运行这些命令并查看它们是否按预期运行后,我们可以继续进行设置,以在您的Pi引导上启动。
sudo nano mohammadIsAmazing.sh
现在,我们在该文件中输入以下内容:
#!/bin/sh
sleep 20
hciconfig hci0 up
hciconfig hci0 sspmode 1
hciconfig hci0 piscan
sudo bluetooth-agent 1234
现在,我们使用来保存并关闭文件 control key and x
我们/etc/rc.local
使用以下命令打开文件:
Sudo nano /etc/rc.local
现在我们输入命令以运行我们的bash脚本到 /etc/rc.local
sudo /path/to/script/mohammadIsAmazing.sh &
注意:您必须将命令放在/etc/rc.local的最后一行之前,该行包含: exit 0
现在,我们保存并关闭该文件,然后重新启动Pi。
附带说明:一定要选择一个随机的引脚以略微提高安全性
另一方面:如果您想更改蓝牙设备名称,则需要创建一个名为的文件/etc/machine-info
,其中应包含以下内容:
PRETTY_HOSTNAME=device-name
然后运行service bluetooth restart
后
&
在rc.local
文件行的末尾-如果没有它,则RPi可能无法完成引导,因为外壳程序会/path/to/script/mohammadIsAmazing.sh
在继续执行脚本之前等待脚本完成执行-如果未完成引导,您将无法ssh
进入为了解决问题...!
apt-get install bluetooth bluez
然后告诉我是否适合您。
bluetooth-agent
,但也找不到。安装软件包无法修复它。
根据我的理解,您需要一个从属蓝牙模块。您可以使用流行的HC-06模块,并通过电平转换器将其连接到树莓派,使其与Pi上的TX和RX引脚连接,并使用python脚本读取串行数据并根据需要进行处理
systemd
了,您大概必须配置它以特定的方式运行。
我不会讨论安全隐含性,但这是我的方法:
#!/bin/bash
bt-adapter --set Powered 1
bt-adapter --set DiscoverableTimeout 0
bt-adapter --set Discoverable 1
bt-adapter --set PairableTimeout 0
bt-adapter --set Pairable 1
/path/to/python_script.py >/dev/nul 2>dev/nul &
list=""
bt-device -l | grep -E -o '[[:xdigit:]]{2}(:[[:xdigit:]]{2}){5}' | { while read line
do
list="$list connect $line
"
done
bluetoothctl << EOF
$list
EOF
}
#!/usr/bin/python3
from __future__ import absolute_import, print_function, unicode_literals
#import gobject
from gi.repository import GObject as gobject
import re
import dbus
import dbus.mainloop.glib
import subprocess
relevant_ifaces = [ "org.bluez.Adapter1", "org.bluez.Device1" ]
def property_changed(interface, changed, invalidated, path):
iface = interface[interface.rfind(".") + 1:]
for name, value in changed.iteritems():
val = str(value)
print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val))
def interfaces_added(path, interfaces):
for iface in interfaces:
if not(iface in relevant_ifaces):
continue
try:
found = re.search('dev\_(..\_..\_..\_..\_..\_..)', path).group(1)
except AttributeError:
found = '' # apply your error handling
mac=found.replace("_",":")
cmd='echo -e "trust '+mac+' \\nconnect '+mac+' \\nquit" | bluetoothctl'
subprocess.call(cmd, shell=True)
def interfaces_removed(path, interfaces):
for iface in interfaces:
if not(iface in relevant_ifaces):
continue
print("{Removed %s} [%s]" % (iface, path))
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
bus.add_signal_receiver(interfaces_added, bus_name="org.bluez", dbus_interface="org.freedesktop.DBus.ObjectManager", signal_name="InterfacesAdded")
bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez", dbus_interface="org.freedesktop.DBus.ObjectManager", signal_name="InterfacesRemoved")
mainloop = gobject.MainLoop()
mainloop.run()
这是怎么做的:
将设备设置为始终可发现。
当设备与之配对时,它将自动在受信任的设备上标记它并连接到它。
每次启动时,它将遍历已知设备列表,并尝试连接到它们。
请注意,这种方法直接与任何类型的安全性背道而驰,但是在某些情况下,您可能想要达到此目的。
在Raspberry Pi3 Model B中,蓝牙和wifi很有用。使用OBEX服务器,您可以从其他设备接收文件,而无需每次都询问配对请求。您必须第一次与该设备配对并建立一个目录,因为这些文件一直都在接收。
只需按照以下链接的步骤。
https://www.raspberrypi.org/forums/viewtopic.php?p=963751#p963751