代码之家  ›  专栏  ›  技术社区  ›  TrueY

Net::蓝牙无法发现设备

  •  1
  • TrueY  · 技术社区  · 6 年前

    我试着连接到我的 LegoBoost Perl Debian 4.9.110-3+deb9u4 。它是一种低能耗蓝牙(BLE)设备。我可以使用 gatttool hci* 实用程序,但我没有Perl的运气。我尝试了以下代码:

    use Net::Bluetooth;
    use Data::Dumper;
    
    print "Get remote devices...\n";
    my $rDevice = get_remote_devices();
    print Dumper $rDevice;
    
    my $addr = "00:16:53:A5:3E:50";
    print "SDP search...\n";
    my @spd = sdp_search($addr, "", ""); # LegoBoost
    print Dumper \@spd;
    

    回报 undef [undef]

    我还尝试连接到该设备:

    print "Connect to device...\n";
    my $obj = Net::Bluetooth->newsocket("RFCOMM");
    defined($obj) or die "socket error $!\n";
    print "Socket got ", Dumper $obj;
    system 'lsof', '-p', $$;
    
    my $port = 14;
    if($obj->connect($addr, $port) != 0) { die "connect error: $!\n";}
    print "Connected...\n";
    sleep 5;
    
    #### create a Perl filehandle for reading and writing
    my $fd = $obj->perlfh();
    print Dumper $fd;
    close $fd or die;
    

    Connect to device...
    Socket got $VAR1 = bless( {
                     'PROTO' => 'RFCOMM',
                     'SOCK_FD' => 4
                   }, 'Net::Bluetooth' );
    connect error: Host is down
    

    任何想法都是值得赞赏的!

    提前谢谢你!

    1 回复  |  直到 6 年前
        1
  •  1
  •   TrueY    6 年前

    看来 Net::Bluetooth 适用于普通蓝牙设备,不适用于BLE。我阅读了Perl包的源代码 Net-Bluetooth-0.41 get_remote_devices sub定义于 Bluetooth.c 作为一个C函数。它叫 hci_get_route (在 libbluetooth.so )一开始打电话来 hci_inquiry ,它查询蓝牙设备,但不查询BLE设备。:(