升级后,Raspberry Pi 3 B + BLE扫描失败(使用拉伸)

时间:2018-08-06 03:06:28

标签: python bluetooth-lowenergy raspberry-pi3 ibeacon

在经过apt-get更新/升级后,使用已知的有效Python示例进行的BLE扫描在全新的Raspberry Pi 3 B +(金属罐CPU)上失败。要重新创建,请使用NOOBS 2.8.2,设置Pi并执行apt-get更新和升级,并接受所有建议的更改。然后使用this sample code扫描BLE设备。作为诊断的一部分,命令:

hcitool lescan

用于查看是否可以打开hci0设备。这导致了错误:

hcitool lescan Set scan parameters failed: Input/output error

此变通办法成功解决了该错误:

hciconfig hci0 down
hciconfig hci0 up
hcitool lescan

但是只有在'hcitool lescan'开始成功运行之后。尚不清楚我们是否必须真正捕获白名单中的已扫描设备才能使扫描成功完成(很快就赶上并停止了)。

在这些新的系统版本上,示例代码失败:

ii  bluez                           5.43-2+rpt2+deb9u2           armhf        Bluetooth tools and daemons
ii  bluez-firmware                  1.2-3+rpt6                   all          Firmware for Bluetooth devices
ii  bluez-hcidump                   5.43-2+rpt2+deb9u2           armhf        Analyses Bluetooth HCI packets
ii  libbluetooth-dev                5.43-2+rpt2+deb9u2           armhf        Development files for using the BlueZ Linux Bluetooth library
ii  libbluetooth3:armhf             5.43-2+rpt2+deb9u2           armhf        Library to use the BlueZ Linux Bluetooth stack
ii  pi-bluetooth                    0.1.8                        all          Raspberry Pi 3 bluetooth
ii  python-bluez                    0.22-1                       armhf        Python wrappers around BlueZ for rapid bluetooth development

但是可以在该系统上运行,请升级回一个版本:

ii  bluez                           5.43-2+rpt2+deb9u2           armhf        Bluetooth tools and daemons
ii  bluez-firmware                  1.2-3+rpt5                   all          Firmware for Bluetooth devices
ii  libbluetooth-dev                5.43-2+rpt2+deb9u2           armhf        Development files for using the BlueZ Linux Bluetooth library
ii  libbluetooth3:armhf             5.43-2+rpt2+deb9u2           armhf        Library to use the BlueZ Linux Bluetooth stack
ii  pi-bluetooth                    0.1.7                        all          Raspberry Pi 3 bluetooth
ii  python-bluez                    0.22-1                       armhf        Python wrappers around BlueZ for rapid bluetooth development

编辑:btmon命令的输出(新的无效单元):

Bluetooth monitor ver 5.43
= Note: Linux version 4.14.52-v7+ (armv7l)                                                                                         0.695265
= Note: Bluetooth subsystem version 2.22                                                                                           0.695276
= New Index: B8:27:EB:A0:39:EC (Primary,UART,hci0)                                                                          [hci0] 0.695279
= Open Index: B8:27:EB:A0:39:EC                                                                                             [hci0] 0.695281
= Index Info: B8:27:EB:A0:39:EC (Broadcom Corporation)                                                                      [hci0] 0.695284
@ RAW Open: python (privileged) version 2.22                                                                       {0x0003} [hci0] 0.695289
@ RAW Open: hcitool (privileged) version 2.22                                                                      {0x0002} [hci0] 0.695291
@ MGMT Open: bluetoothd (privileged) version 1.14                                                                         {0x0001} 0.695294
@ MGMT Open: btmon (privileged) version 1.14                                                                              {0x0004} 0.695367
> HCI Event: LE Meta Event (0x3e) plen 40                                                                                   [hci0] 2.692582
      LE Advertising Report (0x02)
        Num reports: 1
        Event type: Scannable undirected - ADV_SCAN_IND (0x02)
        Address type: Random (0x01)
        Address: 51:46:AD:CA:4C:2F (Resolvable)
        Data length: 28
        16-bit Service UUIDs (complete): 1 entry
          Google (0xfe9f)
        Service Data (UUID 0xfe9f): 0000000000000000000000000000000000000000
        RSSI: -84 dBm (0xac)

较旧的工作单位:

Bluetooth monitor ver 5.43
= Note: Linux version 4.14.34-v7+ (armv7l)                                                                                         0.396738
= Note: Bluetooth subsystem version 2.22                                                                                           0.396744
= New Index: B8:27:EB:31:E6:62 (Primary,UART,hci0)                                                                          [hci0] 0.396746
= Open Index: B8:27:EB:31:E6:62                                                                                             [hci0] 0.396748
= Index Info: B8:27:EB:31:E6:62 (Broadcom Corporation)                                                                      [hci0] 0.396749
@ RAW Open: python (privileged) version 2.22                                                                       {0x0002} [hci0] 0.396752
@ MGMT Open: bluetoothd (privileged) version 1.14                                                                         {0x0001} 0.396753
@ MGMT Open: btmon (privileged) version 1.14                                                                              {0x0003} 0.396800
> HCI Event: LE Meta Event (0x3e) plen 42                                                                                   [hci0] 0.534168
      LE Advertising Report (0x02)
        Num reports: 1
        Event type: Non connectable undirected - ADV_NONCONN_IND (0x03)
        Address type: Public (0x00)
        Address: 0C:F3:EE:B3:B8:53 (EM Microelectronic)
        Data length: 30
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Company: Apple, Inc. (76)
          Type: iBeacon (2)
          UUID: a6ffa91b-91f4-f2ad-0f4a-6dcf5444232f
          Version: 0.256
          TX power: -76 dB
        RSSI: -70 dBm (0xba)

3 个答案:

答案 0 :(得分:1)

因此,您的扫描似乎已经处于活动状态(因为它发送了广告包)? lescan命令首先设置扫描参数,然后开始扫描。如果已经在进行扫描,则HCI禁止使用set scan parameters命令。

答案 1 :(得分:0)

当前,我通过使用python扫描仪之前调用脚本(找到here)来解决此问题。

我将此脚本的持续时间称为1s:

bash lescan.sh 1s /dev/null

答案 2 :(得分:0)

  1. 使用以下代码在/ home / pi / scripts中创建一个新文件(0755),例如lescan.sh:
start C:\\MyTemplate.dotx
  1. #!/bin/sh sudo hciconfig hci0 down sudo hciconfig hci0 up sudo timeout -s INT 1s hcitool lescan cd / cd home/pi/proPi/ sudo timeout -s INT 1s python *detectAll.py* (replace with your Phyton script name) cd / 并添加以下内容:sudo crontab -e