• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

Linux平台用c语言的蓝牙编程

Tremm 2018-07-23 浏览量:2980
刚接触蓝牙,对其协议很是不懂,l2cap什么的,我想在Linux平台用c语言的蓝牙相关库来实现蓝牙音箱使其播放音乐,在网上没有找到什么资料,现在连个思路都没有,各路大佬知道如何实现嘛
8 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 请问你用的是蓝牙的哪个版本的,蓝牙不同的版本的对应的协议栈,公司有对应的协议栈的安装软件,里面就有各种各样的例子。但是在你说的Linux上面编程,我没有听说过。

    蓝牙也是一种通信协议,也有对应的层。就我先前是用的蓝牙4.0来说,BLE协议栈里面包括这各种各样的配置文件,就是说比如你要实现主机你要怎么配置,你要实现从机你要怎么配置。

    关于层,有大概这几个层:

    控制器部分包括: 物理层(PHY)、 链路层(LL)、控制接口层(HCI)

    主机部分包括: 裸机链路控制及自适应协议层(L2CAP)、 安全管理层(SM)、 属性协议层(ATT)、 通用访问配置文件层(GAP), 通用属性配置文件层(GATT)。  

    蓝牙相当于一门新的东西,也是一个新的芯片,所以说得重新学起,但是如果仅仅是串口配置,就没有这么复杂了,你可以在网上看看配置流程和参数。

    • 发布于 2018-07-23
    • 举报
    • 评论 3
    • 10
    • 0
Tremm 回复了 进阶小菜鸟:不不不,我的目标只是在树梅派3b+上用c语言编写一个程序用来连接普通的蓝牙音箱 回复
Tremm 回复了 进阶小菜鸟:不不不,我的目标只是在树梅派3b+上用c语言编写一个程序用来连接普通的蓝牙音箱 回复
Tremm 回复了 进阶小菜鸟:不不不,我的目标只是在树梅派3b+上用c语言编写一个程序用来连接普通的蓝牙音箱 回复

其他答案 数量:12
  • 先写蓝牙的底层驱动,需要了解蓝牙的协议栈;对Linux平台而言,用蓝牙就是调用API,将蓝牙作为一种设备使用
    • 发布于2018-07-24
    • 举报
    • 评论 0
    • 9
    • 0

  • 低层的蓝牙驱动要写好了

    Linux系统通过调用低层驱动来进行蓝牙连接,上层应用再调用Linux的API函数

    • 发布于2018-07-24
    • 举报
    • 评论 0
    • 8
    • 0

  • 是写蓝牙的驱动吗 这官方没有对应的库 而且版本不同驱动也不一样 
    • 发布于2018-07-24
    • 举报
    • 评论 0
    • 5
    • 0

  • 是说使用树莓派么,其实不用你开发的,树莓派上的蓝牙本来就是可以连接音箱的
    • 发布于2018-07-24
    • 举报
    • 评论 0
    • 5
    • 0

  • 这个平台是啥,如果是树莓派的话直接用自动的蓝牙模块就可以进行连接的
    • 发布于2018-07-27
    • 举报
    • 评论 0
    • 3
    • 0

  • 可以先从蓝牙串口模块开始,熟悉一下蓝牙开发的流程。
    • 发布于2018-07-27
    • 举报
    • 评论 0
    • 3
    • 0

  • 蓝牙有多种通信方式,比如SPP,比如音频,在这几种模式下面都有相应的API
    • 发布于2018-07-30
    • 举报
    • 评论 0
    • 2
    • 0

  • python 一句话的事儿你非要用 C 写...

    那么你需要:
    安装一堆编译环境例如essential啊 cmake啊..然后要安装 linux 头文件.

    1.  sudo apt install linux-headers

    安装蓝牙开发库 里面也有头文件.
    2. sudo apt-get install libbluetooth-dev

    3. 然后搞一段代码 像下面这样:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <bluetooth/bluetooth.h>
    #include <bluetooth/hci.h>
    #include <bluetooth/hci_lib.h>
    
    int main(int argc char **argv)
    {
        inquiry_info *ii = NULL;
        int max_rsp num_rsp;
        int dev_id sock len flags;
        int i;
        char addr[19] = { 0 };
        char name[248] = { 0 };
    
        dev_id = hci_get_route(NULL);
        sock = hci_open_dev( dev_id );
        if (dev_id < 0 || sock < 0) {
            perror("opening socket");
            exit(1);
        }
    
        len  = 8;
        max_rsp = 255;
        flags = IREQ_CACHE_FLUSH;
        ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
    
        num_rsp = hci_inquiry(dev_id len max_rsp NULL &ii flags);
        if( num_rsp < 0 ) perror("hci_inquiry");
    
        for (i = 0; i < num_rsp; i++) {
            ba2str(&(ii+i)->bdaddr addr);
            memset(name 0 sizeof(name));
            if (hci_read_remote_name(sock &(ii+i)->bdaddr sizeof(name) 
                name 0) < 0)
            strcpy(name "[unknown]");
            printf("%s  %s\n" addr name);
        }
    
        free( ii );
        close( sock );
        return 0;
    }
    4. 然后编译:

    gcc -o simplescan simplescan.c -lbluetooth
    ​当然这里面只是简单扫描的 你要再写一些音乐播放的啊 远程通信的啊什么的...


    • 发布于2018-08-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 树莓派是自带蓝牙的,可以用蓝牙直接连接设备进行通信
    • 发布于2018-08-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 跟你的平台有很大的关系,不同的平台操作也是不一样的,所使用的指令也不一样
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 要在找对应平台下的指令,然后用指令进行控制操作
    • 发布于2018-08-21
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

Linux平台用c语言的蓝牙编程