android - 如何通过蓝牙唤醒处于蓝牙待机状态的设备(如 avr Sony STR-DN1080)

标签 android bluetooth raspberry-pi avr sony

我想了解我的 AVR STR-DN1080 如何使用树莓派而不是我的 Android 手机通过蓝牙唤醒。 让我解释: - 我的 AVR Sony STR-DN1080 可以进入蓝牙待机模式。在这种情况下,我可以使用我的安卓手机,在配对的设备中搜索,找到我的“STR DN1080 XXXX”设备,只需点击它,手机就会开始做一些事情,几秒钟后,我的 AVR 就会唤醒并打开。 - 所以我想我可以使用我的 Raspberry PI 3B + 来使用它的蓝牙并在需要时远程唤醒我的 AVR .. - 我的 PI 正在运行 Stretch,它的蓝牙似乎工作正常(见下文)。但是一旦我将 AVR 置于待机状态,我就无法使用 PI 命令连接到设备(它看不到设备)。 我还注意到,当 AVR 处于待机状态时,我的手机在 Activity 设备中看不到它,因此它必须使用来自“已配对设备”的信息。

所以我相信我不明白蓝牙唤醒的工作原理..

在我的 Raspberry PI 上,当 AVR 打开并处于 Activity 状态时,我可以执行并检查以下内容:

(我使用 sudo,因为在我的 Stretch 上只有 sudo 使 bluetoothctl 工作,否则,我会收到错误消息,如“没有可用的默认 Controller ”。为了保密,我更改了 MAC 地址。)

sudo bluetoothctl
[bluetooth]# pair AA:BB:CC:DD:EE:FF
Attempting to pair with AA:BB:CC:DD:EE:FF
[CHG] Device AA:BB:CC:DD:EE:FF Connected: yes
[CHG] Device AA:BB:CC:DD:EE:FF Modalias: bluetooth:v0046p0802d0903
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110a-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110b-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110c-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 0000110e-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 00001200-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF UUIDs: 00001800-0000-1000-8000-00805f9f9f9b
[CHG] Device AA:BB:CC:DD:EE:FF ServicesResolved: yes
[CHG] Device AA:BB:CC:DD:EE:FF Paired: yes
Pairing successful
所以它似乎工作和配对。 但是一旦我将其置于待机状态,“扫描”命令就不会显示我的 AVR,并且以下命令不起作用:

[bluetooth]# connect AA:BB:CC:DD:EE:FF
Attempting to connect to AA:BB:CC:DD:EE:FF
Failed to connect: org.bluez.Error.Failed
[bluetooth]# pair AA:BB:CC:DD:EE:FF
Attempting to pair with AA:BB:CC:DD:EE:FF
Failed to pair: org.bluez.Error.AlreadyExists
同时,在我的 android 手机上,AVR 没有在手机的 Activity 蓝牙设备中列出,但是如果我点击我的 AVR 内存的“配对设备”,它就会正确唤醒它。

所以我很想知道这是如何在蓝牙工作时唤醒的。是否还有其他要运行的命令(如 WOL 机制?)?我怎么能在树莓派上做到这一点?

非常感谢, Ricorico94

最佳答案

要通过蓝牙唤醒设备,我只需连接到“RFCOMM”端口 2 即可唤醒设备。 用Python编写的示例代码代码(只需将host更改为您设备的设备地址):

import bluetooth

name = "STR-DN 1080 EU"
host = "AA:BB:CC:DD:EE:FF"
port = 2

print(f"connecting to \"{name}\" on {host}")

sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((host, port))
sock.close()

我确实遇到了连接超时,但设备正在唤醒:

bluetooth.btcommon.BluetoothError: (110, 'Connection timed out')

或者如果设备已经唤醒则拒绝连接:

bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

关于android - 如何通过蓝牙唤醒处于蓝牙待机状态的设备(如 avr Sony STR-DN1080),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54162833/

相关文章:

php - 我们如何在 Android 和 iPhone 的移动应用程序中对用户进行身份验证?

蓝牙 GATT 服务 uuid 概述

linux - 树莓派上的内存

android - debug-apk 工作正常但在主要 Activity 上签名 apk 发布崩溃

java - android-是否可以直接从zip文件夹中播放swf文件而无需解压缩

android - 通过服务使用存储的 MAC 地址连接到蓝牙设备

python - 树莓派的官方 V4L2 驱动程序,如何将 lrt 标志添加到 makefile?

embedded-linux - 为 Raspberry Pi 构建一个最小的 Linux

android - 无法为抽象类 'GoogleServicesTask' 创建代理类。与 'com.google.gms:google-services:4.3.4'

ios - iPhone EAAccessoryManager 返回一个空的 NSArray