ARM板上的蓝牙对讲功能

2023-10-10 10:30
文章标签 功能 arm 蓝牙 板上

本文主要是介绍ARM板上的蓝牙对讲功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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-cardSCO (CVSD): S16_LE 1 channel 8000 HzA2DP (SBC): S16_LE 2 channels 48000 Hz
**** List of CAPTURE Bluetooth Devices ****
hci0: 0C:52:C0:70:08:3C [BT51], trusted audio-cardSCO (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

这篇关于ARM板上的蓝牙对讲功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179839

相关文章

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep