ARM板上的蓝牙对讲功能

news2024/11/27 1:17:09

1)ARM+RTL8723 或RTL8821

RTL8723是USB接口的邮票芯片,集成了wifi和BT。前面已经完成了wifi的处理,这次主要说一下蓝牙语音方面。

蓝牙功能,我们主要是使用Bluez5协议栈.结合alsa使用(pulseaudio也是可以的,体积大一点)

bluez5_utils-5.62

bluez-alsa-3.1.0

先编译,我们都是利用文件系统一性编译出来。

2)驱动方面

RTL8821的驱动,加到内核里时,会出现加载失败的问题。改成ko方式,在启动后,手动加载。

/lib/firmware/下面有2个文件,rtl8821cu_config  rtl8821cu_fw  。最后,再加载一下编译出来rtk_btusb.ko。

3)结合bluetoothctl, alsa等工具,打通语音功能。

先运行 dbus-daemon --system,再启动bluetoothd。

配置好/etc/asound.conf后,运行  bluealsa -p a2dp-source -p xxx 。

最后,调用bluetoothctl是比较好用的,配置对设备,连接设备,都可以。

4)

bluealsa-aplay的使用,正常运行,它可以列出playback,capture等设备。当前出现的问题,就是一直没有capture ,这是bluetoothd的编译问题导致,漏了选项。还有当初一直提示not found PCM,先从硬件上排除了问题,板子是没有任何其他语音模块的。

[root@localhost:~]# bluealsa-aplay -l
**** List of PLAYBACK Bluetooth Devices ****
hci0: 0C:52:C0:70:08:3C [BT51], trusted audio-card
  SCO (CVSD): S16_LE 1 channel 8000 Hz
  A2DP (SBC): S16_LE 2 channels 48000 Hz
**** List of CAPTURE Bluetooth Devices ****
hci0: 0C:52:C0:70:08:3C [BT51], trusted audio-card
  SCO (CVSD): S16_LE 1 channel 8000 Hz
[root@localhost:~]# 

5)测试使用aplay,arecord。整个流程完成

arecord -D bluealsa   -r48000 -f S32_LE  | aplay -D bluealsa -r48000    

这样就可以边播放,边录入的声音。

6)经过上面5步,蓝牙功能基本上就没有问题了。我们的任务当然不只是这些。下面,还是通过RTP协议,录音上送,播放下发。

RTP一般都是使用G711A,但是蓝牙是不能直接播放这个格式的,需要进一步转换。

对方喊话时,通过RTP负载G711A语音流,一般采用长度是320字节。这时要把320字节的进行处理之后,aplay才能播放出来。

int main(int argc, char *argv[]) {

  btplay_init();
  printf("btplay init done\n");
  int ret;

  int fd;
  unsigned char in_buf[1024] = {0};

  fd = open("/tmp/PLAY", O_RDONLY);
  if (fd < 0) {
    printf("fopen PLAY fail! error\n");
    return -1;
  }
  printf("before play\n");

  std::thread th1(&play);
  th1.detach();

  while (1) {
    ret = read(fd, in_buf, 1000);
    if (ret > 0)
    {  
            //printf("read size %d\n", ret);
    }
    else {
      usleep(100);
      continue;
    }
    mtx.lock();
    sBuf += std::string((char *)in_buf, ret);
    mtx.unlock();
  }

  btplay_deinit();

  return 0;
}

同样,蓝牙的录音,捕获到之后,我们也需要处理,然后封装RTP包,发送到对方。

这要一来一去,就完成了蓝牙的对讲功能。

7)海康卫视的球机,我们拆开看过,它竟然使用现成的串口蓝牙模组,增加了很多成本。

功能代码资源

https://download.csdn.net/download/proing/87786214

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM学习(四)

1. JAVA IO/NIO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内 核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c…

Class 02 - R语言Rstudio的安装

Class 02 - R语言&Rstudio的安装 下载和安装R安装前准备下载R语言安装R语言开始使用R语言 下载和安装RStudio安装前准备下载RStudio安装RStudio开始使用RStudio如何编写代码 下载和安装R 在这个部分中&#xff0c;你将完成在计算机上下载和安装R语言程序。当安装完成后&am…

嫌视频背景杂乱或单调?如何去除视频杂乱背景

录制视频时&#xff0c;有时候视频背景会十分杂乱或单调&#xff0c;这会对用户的视觉体验和注意力产生负面影响。 背景杂乱或单调的场景可能会影响您的观感。这种情况通常发生在自然光线不足或拍摄环境不理想的情况下。如果您想改变视频的背景或者是去除视频杂乱的背景&#…

硬件I2C读写MPU6050代码

1、接线图 SDA接在B11,SCL接在B10 &#xff0c;软件IIC的两个引脚可以任意更改的&#xff0c;因为都是开漏输出&#xff0c;硬件接在哪个引脚上&#xff0c;程序中就对应操作哪个引脚 但是硬件IIC&#xff0c;通信引脚是不可以任意指定的&#xff0c;查表&#xff0c;由于PB6、…

2023年Android开发者路线-第4部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第4部分 在上一篇博文中&#xff0c;我们讨论了现代 Android 开发的基本要素&#xff0c;包括 Fragments、…

2023年Android开发者路线-第3部分

2023年Android开发者路线-第1部分 2023年Android开发者路线-第2部分 2023年Android开发者路线-第3部分 2023年Android开发者路线-第4部分 2023年Android开发者路线-第3部分 在上一篇文章中&#xff0c;我们讨论了 Android 主要组件的重要元素&#xff0c;包括 Intents 和 …

【C++初阶】类与对象(中)之你必须掌握的三个重要默认成员函数 --- 构造函数 +析构函数 + 拷贝构造函数

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

chatgptH5源码开发

hatGPTH5源码开发需要以下步骤&#xff1a; 确定需求&#xff1a;在开发ChatGPTH5应用之前&#xff0c;需要明确用户的需求和目标&#xff0c;以便进行合理的设计和开发。 技术选型&#xff1a;选择适合的前端技术框架和工具&#xff0c;如React、Vue、Angular等&#…

Flink从入门到精通之-10容错机制

Flink从入门到精通之-10容错机制 流式数据连续不断地到来&#xff0c;无休无止&#xff1b;所以流处理程序也是持续运行的&#xff0c;并没有一个明确的结束退出时间。机器运行程序&#xff0c;996 起来当然比人要容易得多&#xff0c;不过希望“永远运行”也是不切实际的。因…

WritingGPT: 基于ChatGPT和AutoGPT打造个人写作团队

本文介绍了如何通过定义多个GPT角色&#xff0c;以自动化流水线的方式打造个人写作团队&#xff0c;让AI帮助我们完成文章写作、修改、SEO等所有流程。原文: How I Built WritingGPT, a Fully Automated AI Writing Team ChatGPT是AI内容创造领域的巨大飞跃&#xff0c;但当我们…

8 种「Python 程序」定时执行方式

在日常工作中&#xff0c;我们常常会用到需要周期性执行的任务&#xff0c;一种方式是采用 Linux 系统自带的 crond 结合命令行实现&#xff0c;另外一种方式是直接使用Python。 最近我整理了一下 Python 定时任务的实现方式&#xff0c;建议收藏后学习。 利用while True: sle…

pro如何添加定时任务

Pro v2.4版本开始后台可以开关控制定时任务&#xff0c;那如何添加新的定时任务呢&#xff1f; 第一步&#xff1a;设置定时任务名称及标识&#xff1b; 文件app\controller\admin\v1\system\SystemTimer中task_name()方法 /**定时任务名称及标识 * return mixed */ public fu…

25岁,本科学历,待业,如何成为优秀的数据分析师,值得关注!

25岁&#xff0c;本科学历&#xff0c;待业&#xff0c;如何成为优秀的数据分析师&#xff0c;值得关注&#xff01; 你是在工作几年后确定自己的职业方向的呢&#xff1f;还是一直都是处于迷茫&#xff0c;随波逐流的状态&#xff1f;都说谁的青春不迷茫&#xff0c;但时间是最…

服务限流方案总结

流控作用 一般的做后台服务的&#xff0c;都会接触到流控&#xff0c;一般的场景就是在流量异常&#xff0c;比如遭受攻击的时候&#xff0c;保障服务不过载&#xff0c;在可支持的范围内提供稳定的服务。比如我们的服务支持100QPS&#xff0c;当一下子来了1000个请求的时候&a…

全景 I 0基础学习VR全景制作,平台篇第22篇 热点功能—作品功能操作

本期为大家带来蛙色VR平台&#xff0c;热点功能—作品功能操作。 功能位置示意 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的交互&#xff0c;增加用户的多元化体验。 作品热点&#xff0c;即全景项目跳转热点&#xff0c;可与…

您使用的ChatGPT错了!以下是如何领先于 99% 的 ChatGPT 用户

我们大多数人都错误地使用了 ChatGPT&#xff1a; 错误1&#xff1a;不在提示中包含示例。 错误2&#xff1a;忽略通过角色控制 ChatGPT 的行为。 错误3&#xff1a;让 ChatGPT 猜测内容&#xff0c;而不是向它提供一些信息。 通过3类有用的prompt工程掌握 ChatGPT的使用。 …

leetcode 1259. 不相交的握手

1259. 不相交的握手 提示 困难 33 company 字节跳动 company 苹果 Apple company 亚马逊 偶数 个人站成一个圆&#xff0c;总人数为 num_people 。每个人与除自己外的一个人握手&#xff0c;所以总共会有 num_people / 2 次握手。 将握手的人之间连线&#xff0c;请你返回连线…

十二、Feign客户端整合Hystrix服务保护

目录 1、项目pom文件中引入feign客户端依赖 2、编写feign客户端接口&#xff0c;并配置fallback回调方法的类 3、编写controller&#xff0c;使用feign客户端进行RPC远程过程调用 4、实现feign客户端接口方法&#xff0c;并实现feign客户端接口中的每个接口方法作为fallbac…

十一、Hystrix服务保护

目录 服务雪崩相关概念简述 服务的雪崩效应 造成服务雪崩的原因 服务雪崩最终的结果 防止服务雪崩的方法 一、服务降级 1、引入Hystrix 服务保护依赖 2、基于注解HystrixCommand使用Hystrix 2.1、在需要进行服务保护的方法上添加注解HystrixCommand&#xff0c;并指定…

公有云云硬盘(EBS)有效范围内扩容/存储规格变更指导手册

一、背景 某公有云环境中,云主机直连的云硬盘存储某数据库数据,随着数据的积累,大约10亿多条数据,云硬盘急需扩容,但前期规划云硬盘未开启lvm卷,且当前存储容量未达EBS容量限制,最大可达32T,因此觉得采用EBS规格变更的方式来实现主机存储的扩容; 二、注意点: 1)过…