NodeMCU-32S-内部DAC音频输出测试

2023-10-27

NodeMCU-32S-内部DAC音频输出测试

前言

一直想玩玩ESP32的蓝牙音频功能,手上面有一个NodeMCU-32S,还没有办法直接测试音频。最近在逛CDSN时发现一个将NodeMCU-32S作为音乐电台的小项目,点进去看了下,学到了一些内容,下面记录一下。
其实在这里我学到的仅仅是将音频通过ESP32内部的DAC输出,这样刚好只用一个NodeMCU-32S和一个小喇叭就能够测试啦。

注意:本次测试仅仅用于DAC输出验证,无它

硬件说明

ESP32内置的DAC对应的外部引脚是GPIO25和GPIO26,相应的在原理图上的位置如下图所示。
sch

为了能够进行快速测试验证,笔者就直接将一个4欧姆的喇叭接到了ESP32的DAC输出引脚上,其中喇叭一个引脚接GPIO25,另外一个引脚接地。
audiotest

软件编译

在 ESP-IDF 中已经为我们提供了一个蓝牙音频的测试demo,项目名字是 a2dp_sink ,不过这个项目默认的音频输出是 External I2S Codec,我们在编译之前,在 make menuconfig 中要将其修改为 Internal DAC。如下所示。
menuconfig1menuconfig2menuconfig3
软件编译完成之后,执行 make flash monitor 进行测试。

测试

软件运行起来之后,就可以使用手机蓝牙连接ESP32了,在手机蓝牙中搜索,会找到一个 ESP_SPEAKER 名称的蓝牙,配对之后,打开音乐播放器,放一首歌曲。就能在喇叭中听到声音了,然后再看串口的日志输出,能够看到音频数据包的序号,如下。

W (310372) BT_APPL: new conn_srvc id:19, app_id:0
I (310382) BT_AV: A2DP connection state: Connected, [38:a5:ed:94:5a:36]
I (310732) BT_LOG: bta_av_link_role_ok hndl:x41 role:1 conn_audio:x1 bits:1 features:x824b

I (310742) BT_AV: A2DP audio state: Started
E (310782) BT_APPL: bta_dm_pm_btm_status hci_status=26
I (310782) BT_AV: AVRC conn_state evt: state 1, [38:a5:ed:94:5a:36]
I (310782) BT_AV: AVRC remote features 4b
I (310822) BT_AV: A2DP audio state: Suspended
I (310842) BT_AV: AVRC metadata rsp: attribute id 0x1, 借我
I (310842) BT_AV: AVRC metadata rsp: attribute id 0x2, 谢春花
I (310852) BT_AV: AVRC metadata rsp: attribute id 0x4, 算云烟
I (310852) BT_AV: AVRC metadata rsp: attribute id 0x20, 
I (311142) BT_LOG: bta_av_link_role_ok hndl:x41 role:1 conn_audio:x1 bits:1 features:x824b

E (311142) BT_APPL: bta_dm_pm_btm_status hci_status=31
I (311142) BT_AV: A2DP audio state: Started
I (312782) BT_AV: Audio packet count 100
I (314232) BT_AV: Audio packet count 200
I (315692) BT_AV: Audio packet count 300
I (317152) BT_AV: Audio packet count 400
I (318602) BT_AV: Audio packet count 500
I (320062) BT_AV: Audio packet count 600
I (321572) BT_AV: Audio packet count 700
I (323022) BT_AV: Audio packet count 800

额外补充一点,这个内部DAC是8位的,而且我这次测试使用的是杜邦线 + 排针,然后接到了一个4Ω的喇叭上,所以输出的音频基本是没办法听的,噪音非常严重。该测试仅仅作为一次内部DAC音频的调试,如果要实现蓝牙音频输出,还是推荐外接音频输出芯片。而不是直接使用内部DAC… :)

ESP32-DAC参考链接

用你的 ESP32 做一个音乐电台

ESP32 学习笔记(五)DAC - Digital To Analog Converter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NodeMCU-32S-内部DAC音频输出测试 的相关文章

  • Python编程:通讯录(文件读取)

    描述 读取附件中的csv文件 通讯录信息 放入字典中 后两项以列表形式做为字典的值 并依次输出其中的信息 文件内数据不需要修改 输出时数据之间以空格间隔 编码格式使用GBK 输入 A 时 按行输出文件信息 输入 D 时 直接输出字典内容 输
  • vue3 props属性基本使用梳理

    前言 vue2中props属性的使用是比较统一的基本就一种方式 但是vue3中其实方式是比较多的 因此就打算梳理一下 会按照选项式和组合式进行梳理 包括属性的定义 取值以及属性的监听 应该是叫单文件组件和组合式API 不知道vue官方是根据
  • 递归->栈->队列面试题

    本文所有程序均已测试通过 测试结果图就不一个一个再截图了 读者可以自己copy验证一下 后期我会把思路图补出来 1 行走机器人问题 货架N个 机器人初始位置在pos 经过minutes分钟后到达T有多少种方案 行走机器人问题 货架N个 机器
  • 使用Hexo从0到1搭建个人博客详细教程(超详细,超简单)

    看完这篇 轻轻松松搭建个人博客 校花 班花 额 额 看了就会的博客搭建教程 一 搭建前的软件准备 git node 二 安装hexo 完成简单本地页面展示 三 将Hexo部署到Github 1 Github创建个人仓库 2 生成ssh添加到
  • WebStorm功能特点以及使用指南

    WebStorm功能特点以及使用指南 首先看看WebStorm合其他的IDE有什么特别之处 1 自动保存 不需要你一次又一次地ctrl s啦 所有的操作都直接存储 当然 万一键盘误操作也会被立即存储 不过我们可以通过本地版本控制解决这个问题
  • 创建型模式-建造者模式理解

    1 前言 首先建造者模式适合下面的场景 进行使用 假设不同的对象有着基本的共同特点 或者配合前端进行页面布局 进行构建一个复杂的对象 那么可以参考工厂方法模式进行抽取对象 并进行解耦 达到一个设计符合要求的对象的过程 eg 1 保险产品 前
  • python自适应图片大小_python – 如何在Pygame中将图像缩放到屏幕尺寸

    您可以使用pygame transform scale缩放图像 import pygame picture pygame image load filename picture pygame transform scale picture
  • 小世界网络和复杂网络+python代码实现

    文章目录 小世界网络 复杂网络的特性 平均路径长度L 聚集系数C 度及度分布 小世界效应 规则网络 随机网络 小世界网络 无标度网络 python 代码 生成小世界网络 规则网络 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲
  • 头文件重复定义问题解决“C1014错误“

    比如现在有三个文件 两个头文件 一个 cpp文件 header1 h include header2 h int fun2 header2 h include header1 h int fun main cpp include heade
  • Git学习笔记----基础运用

    安装Git Windows 进入官网下载或百度网盘下载 Git V2 23 x64 提取码 uf2x Ubuntu sudo apt get install git 安装完成之后打开git命令行 Ubuntu命令行即可操作 输入以下代码 查
  • Linux内核设计与实现 第六章 内核数据结构

    目录 1 单向链表和双向链表 编辑 编辑 2 环形链表 3 沿链表移动 4 Linux内核中的实现 5 操作链表 6 遍历链表 6 2队列 1 kfifo 2 创建队列 3 推入队列数据 4 摘取队列数据 5 获取队列数据 6 重置和撤销队
  • hook控制浏览器的方法_一个用于监听 dom 节点尺寸变化的 Hook

    平时写项目应该经常会遇见表格动态高度适应不同屏幕和浏览器调整窗口大小的问题 一般解决办法就是使用 resize 事件来监听窗口改变 如果我要监听 textarea 的大小来做些效果 resize 事件就没办法了 因为它不能监听 DOM 的改
  • flex 初学

    flex direction 主轴的排列方向 box flex direction row row reverse column column reverse justify content 项目在主轴上的对其方式 box justify
  • 02-JVM内存模型深度剖析与优化

    一 JDK体系结构 JDK JDK提供了编译 运行Java程序所需的各种资源和工具 包括Java编译器 Java运行时环境 JRE 开发工具包括编译工具 javac exe 打包工具 jar exe 等 JRE 即JAVA运行时环境 JVM
  • Linux磁盘管理

    目录 一 建立磁盘分区 查看磁盘信息 扫盘操作 选择磁盘设备进行操作 格式化文件系统并挂载 二 LVM 逻辑卷的创建过程 1 PV Physical Volume 物理卷 2 VG Volume Group 卷组 3 LV Logical
  • 转:windows消息传递机制

    Windows是一个消息 Message 驱动系统 Windows的消息提供了应用程序之间 应用程序与Windows系统之间进行通信的手段 应用程序想要实现的功能由消息来触发 并且靠对消息的响应和处理来完成 必须注意的是 消息并非是抢占性的

随机推荐

  • js货币格式化

    我们都知道 当显示价格时都会有一个格式 比如 666 66 00 或者是 666 66 00 在网上可以搜到好多种方法 我这里就做下笔记 以免以后用到 下面 附上代码 function formatMoney number places s
  • 正则表达式入门

    基础语法 代表任意字符 号代表前面的字符必须至少出现一次 1次或多次 号代表字符可以不出现 也可以出现一次或者多次 0次 或1次 或多次 问号代表前面的字符最多只可以出现一次 0次 或1次 将下一个字符标记为或特殊字符 或原义字符 或向后引
  • Uniapp 从入门到进阶

    作者介绍 阿面 资深前端 现任职于广州某电商公司 上线过多款小程序和 app 对移动开发 Hybrid 和 Node js 等方向有较深研究 拥有十年以上的前端开发和架构经验 热爱开源 热爱分享 掘金 阿面 GitHub monw3c 小册
  • 一道面试算法题

    给定一个整数数组和一个整数 返回两个数组的索引 这两个索引指向的数字的加和等于指定的整数 需要最优的算法 分析算法的空间和时间复杂度 参考答案 java实现 c 用字典应该也行吧 publicint twoSum int nums int
  • Windows7中搭建Android x86_64及armv8-a操作步骤

    1 从https developer android com tools sdk ndk index html 下载android ndk r10d windows x86 64 exe 和 android ndk r10d linux x
  • 瑞吉外卖开发梳理及重点知识讲解

    一 项目导读 瑞吉外卖是一个单体架构 整体的业务逻辑也较为简单 如果刚学SpringBoot技术 想要通过项目练手 那这是一个很好的选择 不仅可以练习SpringBoot技术 还可以学习Mybatis Plus Redis 项目部署 服务器
  • 网络基础:子网划分

    目录 一 理论 1 IP地址结构 2 子网掩码 3 网络地址 二 实验 1 中国移动10 0 0 0 8 为32个省分配各自的子网 一 理论 1 IP地址结构 IP地址就是一个唯一标识 是一段网络编码 二进制 IP地址由两部分组成 一部分为
  • XXXXRockey4ND加密狗复制

    一 加密狗复制的前提条件 1 有所使用的软件 2 有所需的原加密狗 3 同型号的加密狗 二 所需环境 1 windows 2 所需加密狗的软件正常安装 三 复制步骤 1 将Rockey4ND加密狗读狗工具中的Hid dll放置在所需加密狗的
  • 测试人员职业发展之路

    在我们开始尝试为大家描述软件测试工作的多种可能性之前 先来看看在现在所知最近代的开发模式中 测试人员还会继续存在吗 因为如果连测试工作本身都不存在了 我们也没必要进行后续的讨论了 很多做测试的朋友问过这样一个问题 现在敏捷开发模式中 自动化
  • Spring Boot 序列化和反序列化

    Spring Boot 开发一个web应用程序时 你可以通过使用嵌入式tomcat jetty Undertow 或者Netty来实现内置http Server 在spring boot中 只需要添加spring boot starter
  • Android 软件测试日志文件抓取

    http zzhhui i sohu com blog view 242248931 htm 1 log文件分类简介 实时打印的主要有 logcat main logcat radio logcat events tcpdump 还有高通平
  • Lodash 一个著名的javascript原生库

    Ldash官网 https lodash com 简介 Lodash是一个内部封装了诸多对字符串 数组 对象等常见的数据类型的处理函数的一套工具库 它使用延迟计算 使得其性能大大提升 延迟计算意味着在我们的链式方法在显示或者隐藏式的valu
  • 全栈之前端

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 原文地址 全栈之前端 1 CSS3必备基础知识学习前面跟随着 WeiyiGeeker 作者 全栈工程师修炼指南 公众号一起学习了前端基础的知识以及HTML标签 属性 事件 字符集系列教程
  • 计算机图形图像知识梳理,计算机图形学知识点总结

    第一章 计算机图形学概论 1 比较计算机图形学与图象处理技术相同点和不同点 Computer Graphics 计算机图形学 和Computer Vision 计算机图像识别 是同一过程的两个方向 Computer Graphics将抽象的
  • Node.js学习笔记--npm命令

    npm命令 本章学习npm的命令 1 基础命令 1 npm v 查看版本 2 npm version 查看所有模块版本 3 npm search 包名搜索 4 npm install i 包安装 5 npm remove r 包移除 6 n
  • 【C进阶】指针(一)

    大家好 我是深鱼 前言 指针的主题 在初阶指针章节已经接触过了 我们知道了指针的概念 1 指针就是个变量 用来存放地址 地址的唯一标识一块内存空间 指针变量 内存单元是由编号的 编号 地址 指针 2 指针 地址 指针变量的大小是固定的4 8
  • Doxygen使用介绍

    Doxygen的主页为http doxygen nl 它的license为GPL 最新发布版本为1 8 17 源代码存放在https github com doxygen doxygen 它支持的语言包括C C Objective C C
  • matlab求解普通函数的导数问题(diff函数的用法)

    目录 一元函数的导数 MATLAB函数语法 应用举例 例1 普通函数求导 例2 复合泛函求导 例3 矩阵函数求导 多元函数的偏导数 MATLAB函数语法 应用举例 例1 求偏导并绘图 例2 三元函数求偏导 一元函数的导数 MATLAB函数语
  • matlab RANSAC拟合二次多项式曲线(详细过程版)

    目录 一 算法概述 二 代码实现 三 结果展示 四 相关链接 一 算法概述 RANSAC是一种鲁棒性较强的拟合算法 可以用于估计数据集中的模型参数 对于拟合二次多项式曲线 RANSAC算法的步骤如下 1 随机选择一小部分数据点 假设它们是符
  • NodeMCU-32S-内部DAC音频输出测试

    NodeMCU 32S 内部DAC音频输出测试 文章目录 NodeMCU 32S 内部DAC音频输出测试 前言 硬件说明 软件编译 测试 ESP32 DAC参考链接 前言 一直想玩玩ESP32的蓝牙音频功能 手上面有一个NodeMCU 32