0){ if(gb2312DataLen gb2312Data[64]=''; printf("%s,len:%drn",gb2312Data,strlen(gb2312Data)); GUI_Write16CnCharMatrix(10,10,gb2312Data,LCD_COLOR_RGB565(255,255,255),LCD_COLOR_RGB565(255,0,0)); } } break; 大" />
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

安信可Ai-M61系列模组实现蓝牙歌词播放功能

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2025-02-26 14:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下作品由安信可社区用户

sujingliang制作

Ai-M61 系列模组是由安信可科技开发的 Wi-Fi6 & 蓝牙双模模组,搭载BL618芯片作为处理器,支持Wi-Fi 802.11b/g/n/ax协议和BLE 5.3协议。BL618芯片内置低功耗的32位RISC-V CPU,最高主频可达320M. 丰富的外围接口,包括DVP、MJPEG、Dispaly、Audio Codec、USB2.0、SDU、以太网(EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP和GPIO等。可广泛应用于音视频多媒体、物联网(IoT)、移动设备、可穿戴电子设备、智能家居等领域。

Ai-M61系列模块的核心BL618确实支持传统蓝牙功能,然而,由于博流官方(BL618芯片制造商)尚未正式发布针对这一功能的SDK,开发者在使用M61进行传统蓝牙开发时面临诸多挑战。

GitHub上虽然可以找到博流官方的SDK,但其中关于传统蓝牙的代码非常有限,且基于Zephyr蓝牙栈的官方代码缺乏具体的例程,这无疑增加了开发的难度。

1论坛里有大佬实现了BTstack port

使用BTstack测试M61

https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44962&fromuid=14007

(出处: 物联网开发者社区-安信可论坛)

也就是说可以用BTstack开源协议栈来开发M61模块传统蓝牙功能。

2本文想实现的蓝牙歌词播放功能

看到有蓝牙歌词播放器在卖,感觉很神奇,用ESP32实现一下

https://bbs.21ic.com/icview-3414880-1-1.html?fromuser=sujingliang

(出处: 21ic电子技术开发论坛)

为了达到目标,需要完成以下工作:

1、驱动一个屏幕,可以是LED、LCD,这个决定最终的显示效果。
2、需要一个GBK汉字字模库,用来获取显示汉字。
3、需要一个UTF转GBK的函数,因为AVRCP是UTF-8格式的,需要转换成GBK格式才能通过GBK汉字字模库获取字模。
4、读懂A2DP例程,加入适当的功能。(btstack编程

3关于LCD驱动和字库驱动(不是本重点)

【外设移植】+LCD_ST7735+M61开发板+GB2312字库

https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44421&fromuid=14007

(出处: 物联网开发者社区-安信可论坛)

4关于UTF转GBK的函数

UTF汉字不能直接转换为GBK,需要先将UTF转换为unicode,再将unicode通过查表法转换为GBK。

这部分不用自己实现,网上有现成的。https://gitee.com/zhangkt1995/my ... /utf8_gb2312_switch

5btstack编程

可参考前面大佬提供的btstack_test工程。

git clone https://github.com/bouffalolab/bouffalo_sdk.git
cd ./bouffalo_sdk/examples
git clone https://github.com/O2C14/btstack_test.git
cd ./btstack_test
rm -rf ./btstack
git clone https://github.com/bluekitchen/btstack.git -b v1.6.1
在CMakeLists.txt中设置使用a2dp_sink_demo.c这个例子。
set(EXAMPLE "a2dp_sink_demo")
a2dp_sink_demo.c中在 case
AVRCP_SUBEVENT_NOW_PLAYING_TITLE_INFO增加如下内容
case AVRCP_SUBEVENT_NOW_PLAYING_TITLE_INFO:
if (avrcp_subevent_now_playing_title_info_get_value_len(packet) > 0){
memcpy(avrcp_subevent_value, avrcp_subevent_now_playing_title_info_get_value(packet), avrcp_subevent_now_playing_title_info_get_value_len(packet));
printf("AVRCP Controller: Title %sn", avrcp_subevent_value);
memset(gb2312Data,'',sizeof(gb2312Data));
size_t gb2312DataLen = utf8_to_gb2312((uint8_t *)avrcp_subevent_value, strlen(avrcp_subevent_value), (uint8_t *)gb2312Data, sizeof(gb2312Data));
if(gb2312DataLen>0){
if(gb2312DataLen<256)gb2312Data[gb2312DataLen]='';
gb2312Data[64]='';
printf("%s,len:%drn",gb2312Data,strlen(gb2312Data));
GUI_Write16CnCharMatrix(10,10,gb2312Data,LCD_COLOR_RGB565(255,255,255),LCD_COLOR_RGB565(255,0,0));
}
}
break;

大概就是在AVRCP收到TITLE事件后,获取title(歌词)信息avrcp_subevent_value;通过utf8_to_gb2312将utf8格式转为GB2312格式;然后在LCD上显示出来。

AVRCP_SUBEVENT_NOTIFICATION_TRACK_CHANGED中增加对avrcp_controller_get_now_playing_info的调用,就是在TRACK发生改变时调用获取playing_info函数,进而触发AVRCP_SUBEVENT_NOW_PLAYING_TITLE_INFO。

6使用效果

手机打开蓝牙,和M61配对连接,然后可以断开连接

wKgZPGe-sb6Aa3_JAACIjCrWKBQ963.jpg

●在手机蓝牙断开连接的情况下,通过串口工具发出btstack c命令使M61发送AVRCP连接命令,

缺省会触发订阅AVRCP_NOTIFICATION_EVENT_TRACK_CHANGED
avrcp_controller_enable_notification(a2dp_sink_demo_avrcp_connection.avrcp_cid, AVRCP_NOTIFICATION_EVENT_TRACK_CHANGED);

这时手机和M61会自动连接上。

wKgZO2e-sb-AR62xAAGoZs81VPo384.jpg

●打开手机上的音乐播放软件

wKgZPGe-sb-ADCs_AAC-mFEhjfQ977.jpg

手机上的歌词变化,LCD上也会相应变化

wKgZO2e-scCAKPW7AAAgv7tzLek771.jpg

7总结

使用了BTstack下的a2dp_sink_demo例程,这个例程好像是mcu这边连接手机发送A2DP、AVRCP连接和订阅才能获取歌词信息,而通过手机连接MCU就不能。尝试改成手机端主动连接实现相同功能,但没有成功,还是对btstack了解太少。而且从MCU端连接需要提供手机蓝牙的MAC地址,这个比较头晕了,打个比方:想用蓝牙耳机连接手机听歌需要先知道手机蓝牙MAC,这完全不具有操作性。

类似下面的报错时不时就发生,然后程序就挂了,非常不稳定。

exception_entry
mcause=38000007
mepc:a0004732
mtval:00000000
Store/AMO access fault

不是每个手机都可以建立AVRCP连接,手头2个手机,1个可以,1个不行。

归根到底利用AVRCP协议获取歌词信息,实现的方案还是存在不少问题。主要是因为接触传统蓝牙时间比较短,而且蓝牙协议栈还是太复杂,好多东西都不懂,慢慢学习。

8原贴地址

Ai-M61实现蓝牙歌词播放功能 - 电子DIY - 物联网开发者社区-安信可论坛 - Powered by Discuz!​bbs.ai-thinker.com/forum.php?mod=viewthread&tid=45524&_dsign=3bc296c7

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙
    +关注

    关注

    119

    文章

    6221

    浏览量

    177495
  • wi-fi
    +关注

    关注

    15

    文章

    2378

    浏览量

    128874
  • 安信可
    +关注

    关注

    0

    文章

    216

    浏览量

    4945
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高性能、低功耗、驱屏,Ai-M61系列模组驱屏能力介绍

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式无线通信模组,该模组搭载BL618 芯片作为核心处理器,BL618 芯片系统包含带 FPU 和 DSP 的
    的头像 发表于 05-22 11:47 2554次阅读
    高性能、低功耗、<b class='flag-5'>可</b>驱屏,<b class='flag-5'>Ai-M61</b><b class='flag-5'>系列</b><b class='flag-5'>模组</b>驱屏能力介绍

    Ai-M61/62系列的固件烧录指导

    本文介绍Ai-M61/62系列模组/开发板的固件烧录。
    的头像 发表于 07-02 11:23 2827次阅读
    <b class='flag-5'>Ai-M61</b>/62<b class='flag-5'>系列</b>的固件烧录指导

    Ai-WB2系列模组概述

    Ai-WB2系列模组科技开发的Wi-Fi&BT模组
    的头像 发表于 09-09 10:01 2228次阅读

    Ai-WB2系列模组基于TCP的MQTT连接服务器使用示例

    Ai-WB2系列模组基于TCP的MQTT连接服务器使用示例
    的头像 发表于 10-16 10:21 2011次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai</b>-WB2<b class='flag-5'>系列</b><b class='flag-5'>模组</b>基于TCP的MQTT连接服务器使用示例

    Ai-M61/Ai-M62系列连接AWS亚马逊云

    本文介绍Ai-M61/Ai-M62系列模组/开发板连接亚马逊云方法。 Ai-M61 系列
    的头像 发表于 02-04 15:51 1647次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-M61</b>/<b class='flag-5'>Ai-M</b>62<b class='flag-5'>系列</b>连接AWS亚马逊云

    推出Wi-Fi 6+BLE5.3模组Ai-M62-M2-I

    随着Wi-Fi标准的演进,Wi-Fi6已走向大规模商用阶段。去年通过长期研发设计及反复打磨,推出WiFi 6+BLE5.3+X模组——Ai-M
    的头像 发表于 02-25 09:54 1870次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>推出Wi-Fi 6+BLE5.3<b class='flag-5'>模组</b><b class='flag-5'>Ai-M62-M</b>2-I

    小尺寸,高性能!WiFi 6+BLE 5.3, Ai-M62-M2-I模组发布

    随着Wi-Fi标准的演进,Wi-Fi6已走向大规模商用阶段。去年通过长期研发设计及反复打磨,推出WiFi 6+BLE5.3+X模组——Ai-M
    的头像 发表于 02-26 11:42 1930次阅读
    小尺寸,高性能!WiFi 6+BLE 5.3, <b class='flag-5'>Ai-M62-M</b>2-I<b class='flag-5'>模组</b>发布

    “WiFi 6+BLE5.3+Thread”,Ai-M61系列模组选型

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式无线通信模组,该模组搭载BL618 芯片作为核心处理器,BL618 芯片系统包含带 FPU 和 DSP 的
    的头像 发表于 03-12 16:22 1414次阅读
    “WiFi 6+BLE5.3+Thread”,<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-M61</b><b class='flag-5'>系列</b><b class='flag-5'>模组</b>选型

    基于Ai-M61模组打造一个智能鱼缸水质监测系统

    要保证合理的光照,水氧才能让小鱼顺利成长,这些对新手来说太难了!! 正好小安发现手头上的Ai-M61模组,可以打造一个智能鱼缸水质检测系统。来看看怎么做?   小安先查询了下产品的介绍: Ai-M61
    的头像 发表于 03-29 11:04 1181次阅读

    【雷达灯控】 Rd-03E+ 灯 + Ai-M61

    的相关产品。产品的资料有很多,不过感觉有些文件的内容有些重复,上位机软件的各个参数可能是因为涉及到内部逻辑所以没有详细说明。模块资料链接:Rd-03 系列模组 |
    的头像 发表于 06-07 09:45 1167次阅读
    【雷达灯控】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b> Rd-03E+ 灯 + <b class='flag-5'>Ai-M61</b>

    智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯

    上一篇我们介绍了MQTT设备如何接入HomeAssistant(打卡智能家居之旅(2):设备接入HomeAssistant的方法),这一篇就给大家讲一下Ai-M61/M62 开发板或者模组怎么通过
    的头像 发表于 06-07 10:07 1455次阅读
    智能家居之旅(3):<b class='flag-5'>Ai-M61</b>/<b class='flag-5'>M</b>62 接入HomeAssistant <b class='flag-5'>实现</b>点灯

    Ai-M61/M62系列模组支持CAN接口了?

    hello,小伙伴们,经过一段时间的开发和测试,Ai-M61/M62模组可以支持CAN接口
    的头像 发表于 12-27 10:59 1265次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-M61</b>/<b class='flag-5'>M</b>62<b class='flag-5'>系列</b><b class='flag-5'>模组</b>支持CAN接口了?

    能和Ai-M61模组对话了?手搓一个ChatGPT 语音助手

    起猛了, Ai-M61模组能说话了! 超低延迟实时秒回 ,对话超丝滑的那种,先来看一段VCR: 小安派+ChatGPT语音实测:对话
    的头像 发表于 03-12 11:57 9944次阅读
    能和<b class='flag-5'>Ai-M61</b><b class='flag-5'>模组</b>对话了?手搓一个ChatGPT 语音助手

    BLE + Mesh ,蓝牙模组从可穿戴到智慧照明全覆盖场景

    消费电子、智能家居、健康穿戴等领域的高性能产品。 蓝牙模块主要分为PB系列、TB系列、TG
    的头像 发表于 05-28 11:16 917次阅读

    AI语音模组】自制小智管家?Ai-WV01-32S测试体验

    项目名:默语小智管家 模组支持: 科技 AI语音模组 作者:
    的头像 发表于 11-19 16:06 207次阅读
    【<b class='flag-5'>AI</b>语音<b class='flag-5'>模组</b>】自制小智管家?<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai</b>-WV01-32S测试体验