Bluetooth経由でPiに接続しようとするデバイスを自動的に接続する車用のプラットフォームを開発したいと考えています。現在、Piによるペアリングの受け入れが必要ですが、この場合は画面がないため、自動的に行う必要があります。どうすればこれを達成できますか?
Bluetooth経由でPiに接続しようとするデバイスを自動的に接続する車用のプラットフォームを開発したいと考えています。現在、Piによるペアリングの受け入れが必要ですが、この場合は画面がないため、自動的に行う必要があります。どうすればこれを達成できますか?
回答:
(bluezがbluetooth-agentコマンドを削除したため、この回答はRaspbian Jessieの時点で機能しなくなっていることに注意してください。)
したがって、現在、Piには問題なく接続できますが、ペアリングプロセスにはモニターが必要であると述べています。
注:接続を受け入れることは信じられないほど安全ではないアイデアであり、限られたデバイスセットのみを使用している場合、信頼できるデバイスとして設定すると、Macアドレスへの接続が制限されますが、新しいデバイスは許可されませんモニターなしで追加されるデバイス
しかし、とにかく、Piに対して行われているすべての接続を受け入れ、Piを検出可能にし、予測可能なピンを設定するために実行する必要があるコマンドは以下のとおりです。
注:hci0
デバイスのBluetooth番号のゼロを変更する必要がある場合があります。
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を再起動します。
副次的な注意事項:セキュリティをわずかに高めるために、ランダムピンを選択してください
別の注意事項:Bluetoothデバイス名を変更する場合/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
としましたが、見つかりませんでした。パッケージをインストールしても修正されませんでした。
私があなたが必要とするものを理解していることに基づいて、スレーブのBluetoothモジュールがあります。一般的なHC-06モジュールを使用し、レベルシフターを介してPiのTXおよびRXピンにラズベリーpiに接続し、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には、bluetoothとwifiに障害があります。OBEXサーバーを使用すると、毎回ペアリング要求について尋ねることなく、他のデバイスからファイルを受信できます。ファイルが常に受信されるという点で、最初にそのデバイスとペアリングを行い、1つのディレクトリを作成する必要があります。
以下のリンクの手順に従ってください。
https://www.raspberrypi.org/forums/viewtopic.php?p=963751#p963751