Linux 端蓝牙调试工具

Linux 端蓝牙调试

@(嵌入式)[BLE]

毕业大半年一直从事Ble外设开发,发现linux上可以使用bluez进行蓝牙开发,更加便捷的是,有一个python模块对bluez接口进行封装,叫bluepy,给开发测试带来更多便捷。

获取 & 安装

开发平台 ubunt 14.04

$ sudo apt-get install git build-essential libglib2.0-dev
$ git clone https://github.com/IanHarvey/bluepy.git
$ cd bluepy
$ python setup.py build
$ python setup.py install

个人测试脚本库mybluepy, 没怎么写过python,供参考。

使用 hcitool & gatttool

安装了bluez协议栈后提供的工具,简单操作如下。

  • 查看蓝牙pc的设备
hcitool dev
  • 扫描ble
hcitool lescan
  • 设置gatttool
 gatttool  -b 76:66:44:33:22:72 -I

-I : 进入交互模式

  • 在gatttool下, 开始连接设备 : connect 输入 : help查看其他指令
  • 输入characteristics 查看特征值信息,结果大概如下
handle: 0x0022, char properties: 0x1a, char value handle: 0x0023, uuid: 0000a802-0000-1000-8000-00805f9b34fb

如上, handle 0x0023 写数据, 向0x0023+1 写 0x0100,设置监听,写0取消监听

bluepy 脚本

模块文档 提供一个简单的例子:

#!/usr/bin/python

from __future__ import print_function
import sys
import binascii
import btle
import os

ble_conn = None

class MyDelegate(btle.DefaultDelegate):

    def __init__(self, conn):
        btle.DefaultDelegate.__init__(self)
        self.conn = conn

    def handleNotification(self, cHandle, data):
        data = binascii.b2a_hex(data)
        print("Notification:", str(cHandle), " data ", data)

    def handleDiscovery(self, dev, isNewDev, isNewData):
        if isNewDev:
            pass
        elif isNewData:
            print("\\nDiscovery:", "MAC:", dev.addr, " Rssi ", str(dev.rssi))
            
            
def ble_connect(devAddr):
    global ble_conn
    if not devAddr is None and ble_conn is None:
        ble_conn = btle.Peripheral(devAddr, btle.ADDR_TYPE_PUBLIC)
        ble_conn.setDelegate(MyDelegate(ble_conn))
        print("connected")

def ble_disconnect():
    global ble_conn
    ble_conn = None
    print("disconnected")


if __name__ == '__main__':

    ble_mac == "66:55:44:33:22:11"
   
    # scan 
    scanner = btle.Scanner().withDelegate(MyDelegate(None))
    timeout = 10.0
    devices = scanner.scan(timeout)
    for dev in devices:
        if dev.addr == ble_mac:
            print("\\nDiscovery:", "MAC:", dev.addr, " Rssi ", str(dev.rssi))
            for (adtype, desc, value) in dev.getScanData():
                print ("  %s(0x%x) = %s" % (desc, int(adtype), value))
            break
   
    # connect  
    ble_connect(ble_mac)
    # write , set listen
    snd_content_str = """\\x01\\x00"""
    ble_conn.writeCharacteristic(handle, snd_content_str)
    
    # wait notification  
    ble_conn.waitForNotifications(2.0)
    
    # disconnect 
    ble_disconnect()

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『高级篇』docker之了解kubernetes(31)

PS:(梳理概念)pod里面包括N个容器,service里面包括pod,Deployment可能包括service或者是pod。

16840
来自专栏安恒网络空间安全讲武堂

【译】Cromos – 下载并注入代码到谷歌 Chrome 浏览器扩展中

? cromos是一个用于下载Chrome网页商店合法扩展的工具,还可以在应用程序背景下注入代码。并且举例而言,cromos通过PowerShell创建可执行...

24060
来自专栏lgp20151222

傻瓜式的go modules的讲解和代码

国内关于gomod的文章,哪怕是使用了百度 -csdn,依然全是理论,虽然golang的使用者大多是大神但是也有像我这样的的弱鸡是不是?

57720
来自专栏伪君子的梦呓

如何备份一些容易看不到的文章

386100
来自专栏Laoqi's Linux运维专列

mariadb galera集群配置

42440
来自专栏小怪聊职场

Java|网络IO之同步、异步、阻塞、非阻塞

44870
来自专栏QQ音乐技术团队的专栏

全民K歌后台编译优化:从40分钟到30秒

编者注 :全民K歌上线1年半的从0发展到1.5亿,用户越来越多,后台代码库越来越大,编译速度也与日俱慢,编译一下整个工程需要30-40分钟,如何实现秒编至关重要...

43570
来自专栏飞雪无情的博客

使用AlarmManager设置的定时服务在Android4.4上可能不准确了

Android4.4在前天发布了,随着Android4.4的源代码的放出,相信会有更多的手机会慢慢的升级到Android4.4,作为苦逼的Android开发人员...

11130
来自专栏逸鹏说道

当GitHub把我当成DDos攻击者拉进了黑名单中。。。

Github黑名单自救+快速稳定FQ 异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 原...

36480
来自专栏FreeBuf

OpenSSH曝高危漏洞,Linux主机面临暴力破解威胁

OpenSSH软件被爆出一个简单却高危的漏洞,攻击者可以在短时间内进行数千次的登录尝试。 ? OpenSSH是最流行的Linux系统进行远程控制的软件。一般来说...

32870

扫码关注云+社区

领取腾讯云代金券