ESP32 包含两个 I2S 外设. 这些外设可配置为通过 I2S 驱动程序输入和输出样本数据.
I2S 标准总线定义了三种信号:时钟信号 BCK、声道选择信号 WS 和串行数据信号 SD.一个基本的 I2S 数据总线有一个主机和一个从机.主机和从机的角色在通信过程中保持不变.ESP32 的 I2S 模块包含独立的发送和接收声道,能够保证优良的通信性能.
I2S 外设支持 DMA,这意味着它可以传输使用样本数据流,而无需 CPU 读取或写入每个样本.
I2S 输出也可以直接路由到数字/模拟转换器输出通道(GPIO 25 和 GPIO 26),直接产生模拟输出,而不是通过外部 I2S 编解码器.
对于高精度时钟应用,APLL 时钟源可与.use_apll = true 一起使用,ESP32 将自动计算 APLL 参数.
>如果 use_apll = true 且 fixed_mclk> 0,则 I2S 的主时钟输出固定且等于 fixed_mclk 值. 音频时钟速率(LRCK)始终为 MCLK 除数,`0
图 1 I2S 系统框图
图 1 是 ESP32 I2S 模块的结构框图,图中 “n” 对应为 0 或 1,即 I2S0 或 I2S1.每个 I2S 模块包含一个独立的发送单元(Tx) 和一个独立的接收单元(Rx).发送和接收单元各自有一组三线接口,分别为时钟线 BCK,声道选择线 WS 和串行数据线 SD.其中,发送单元的串行数据线固定为输出,接收单元的串行数据线固定为接收.发送单元和接收单元的时钟线和声道选择线均可配置为主机发送和从机接收.在 LCD 模式下,串行数据线扩展为并行数据总线.I2S 模块发送和接收单元各有一块宽 32 bit、深 64 bit 的 FIFO.此外,只有 I2S0 支持接收/发送 PDM 信号并且支持片上 DAC/ADC 模块.
图 1 右侧为 I2S 模块的信号总线.Rx 和 Tx 模块的信号命名规则为: I2SnA_B_C.其中 “n” 为模块名,表示 I2S0 或 I2S1;“A” 表示 I2S 模块的数据总线信号的方向,“I” 表示输入,“O” 表示输出;“B” 表示信号功能;“C” 表示该信号的方向,“in” 表示该信号输入I2S 模块,“out” 表示该信号自 I2S 模块输出.各信号总线的具体描述见表 1.除 I2Sn_CLK 信号外,其他信号均需要经过 GPIO 交换矩阵和 IO_MUX 映射到芯片的管脚.I2Sn_CLK 信号需要经过 IO_MUX 映射到芯片管脚.
表 1 I2S 信号总线描述
I2S 模式
-
可配置高精度输出时钟;
-
支持全双工和半双工收发数据;
-
支持多种音频标准;
-
内嵌 A 律压缩/解压缩模块;
-
可配置时钟;
-
支持 PDM 信号输入输出;
-
收发数据模式可配置.
LCD 模式
-
支持外接 LCD;
-
支持外接 Camera;
-
支持多种 LCD 模式;
-
支持连接片上 DAC/ADC 模式.
I2S 中断
esp-idf 中提供了完整的 I2S 示例:
peripherals/i2s
.
I2S 配置的简短示例:
#include "driver/i2s.h"
#include "freertos/queue.h"
static const int i2s_num = 0;
static const i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_TX,
.sample_rate = 44100,
.bits_per_sample = 16,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB,
.intr_alloc_flags = 0,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false
static const i2s_pin_config_t pin_config = {
.bck_io_num = 26,
.ws_io_num = 25,
.data_out_num = 22,
.data_in_num = I2S_PIN_NO_CHANGE
...
i2s_driver_install(i2s_num, &i2s_config, 0, NULL);
i2s_set_pin(i2s_num, &pin_config);
i2s_set_sample_rates(i2s_num, 22050);
i2s_driver_uninstall(i2s_num);
配置 I2S 以使用内部 DAC 进行模拟输出的简短示例:
#include "driver/i2s.h"
#include "freertos/queue.h"
static const int i2s_num = 0;
static const i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN,
.sample_rate = 44100,
.bits_per_sample = 16,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S_MSB,
.intr_alloc_flags = 0,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false
...
i2s_driver_install(i2s_num, &i2s_config, 0, NULL);
i2s_set_pin(i2s_num, NULL);
i2s_set_sample_rates(i2s_num, 22050);
i2s_driver_uninstall(i2s_num);
使用
I2S 并行
模式 DMA 驱动 HUB75 LED 显示器的
ESP32 (esp-idf) 组件
这是用于
ESP32的 ESP-IDF [1] 的 LED 显示屏组件。 它可用于驱动 HUB75 LED 显示器(又名“Px 显示器”)。 它目前适用于以下显示器:32x16 1/8 扫描、32x32 1/16 扫描、64x32 1/16 扫描和 64x64 1/32 扫描。 它目前不适用于 32x16 1/4 扫描、32x32 1/8 扫描、64x32 1/8 扫描。
有关 API,请参阅 。
此代码用于将
ESP32 直接连接到显示器(可能通过电平转换器或缓冲器)。 引脚配置可通过 sdkconfig(“make menuconfig”)获得。 有关默认值,请参阅 。
有关的更多信息、概念和代码来源的参考以及版权和许可信息,请参见 。
示例目录中有一个示例( )。
常见的 LCD 接口类型有哪些?
SPI LCD 接口、MCU 并行接口、RGB(TTL)接口、LVDS、UART/RS232/RS485 接口、HDMI 、MIPI DSI 接口等。这些接口区别于信号的类型(种类),也区别于信号内容。
【TFT LCD 接口-技术】
通常 TFT LCD 接口主要由特定的分辨率来决定。
【面板大小】4.3 寸,屏幕对角线长度
1 英寸 = 2.54 厘米 ;4.3 寸 = 2.54 x 4.3 = 10.922 厘米
【分辨率】800 x 480 ;即 800
本指南概述了为 MicroPython 项目开发的新 MicroPython I2S类的功能。I2S 类适用于 ESP32 处理器,并使用 Espressif 的ESP-IDF API实现。要将 I2S 与 MicroPython 一起使用,您需要进行自定义 MicroPython 构建并将拉取请求集成到构建中。或者,使用预构建的固件二进制文件之一下载和编程您的 ESP32 板。
使用给定的参数构造并返回一个新的 I2S 对象:
id指定 I2S 外设实例
位时钟输出的bck引脚对象
用于单词选择输出的ws pin 对象
用于串行数据输入的sdin引脚对象(可选)
用于串行数据输出的sdout引脚对象(可选)
I2S 外设使用的标准协议(可选)
模式指定接收或发送
dataformat每个样本中的位数
channelformat指定音频格式,例如立体声、单声道
samplerate音频采样率 (samples/s)
dmacount链接的 DMA 缓冲区的数量(可选)
更多详情、使用方法,请下载后阅读README.md文件
此ESP32 Arduino / IDF库用于HUB75 / HUB75E连接器类型64x32 RGB LED 1/16扫描或64x64 RGB LED 1/32扫描LED矩阵面板,使用ESP32的I2S``LCD模式''提供的DMA功能。
低CPU开销-初始化的像素数据一旦通过DMA引擎直接从内存中泵送到矩阵输入
快速-更新像素数据仅涉及DMA缓冲存储器上的按位逻辑,无需管脚操作或阻塞IO
全屏BCM-库利用二进制代码调制在整个矩阵上渲染像素颜色深度/亮度
可变的色彩深度-根据所需的矩阵大小/刷新率,最多可以输出TrueColor 24位
CIE 1931亮度校正(又名自然LED调光)
Adafruit GFX API-可以使用Adaf
i2s总线理解与运用I2S总线基础概念I2S概念PCM音频数据转换成PCM格式的三个参数采样频率(声音周期量化)采样位数(声音的幅度量化)声道数(单声道,立体声)I2S总线通讯方式I2S总线引脚esp32从ES8311分析i2s驱动如何去写原理图例程代码分析主函数i2s初始化es8311初始化播放音频
I2S总线基础概念
I2S概念
I2S(Inter-IC Sound)总线, 又称集成电路内置音频总线,最早是由现在的恩智浦半导体公司针对数字音频设备之间的音频数据传输而制定的总线标准。该总线专门用于阴平设备
Arduino ESP32是一款基于32位处理器的开源硬件平台,可以用于构建各种物联网和嵌入式系统。其中的I2S(Inter-IC Sound)是一种用于音频数据传输的接口标准。借助ESP32的I2S接口,我们可以实现录音功能。
上位机是指与ESP32通过串口或网络连接的设备或计算机。通过将ESP32与上位机连接,我们可以将录音的音频数据传输到上位机进行后续处理或保存。
要实现Arduino ESP32 I2S录音上位机,我们需要进行以下步骤:
1. 配置ESP32的I2S接口:通过编程,我们需要设置ESP32的I2S接口以适配录音功能。这包括设置I2S的输入/输出模式、数据位宽、采样率等参数。
2. 连接麦克风或音频输入设备:将麦克风或音频输入设备连接到ESP32的I2S输入引脚,以便接收音频数据。
3. 实时读取音频数据:在ESP32上运行的代码应该包含对I2S接口的实时读取,以便获取音频数据。
4. 通过串口或网络传输音频数据到上位机:将音频数据传输到上位机可以通过使用ESP32的串口功能或通过无线网络连接,例如WiFi或蓝牙。
5. 上位机处理或保存音频数据:上位机可以使用音频处理软件(如MATLAB或Audacity)进行音频数据处理或保存到计算机上。
总结起来,实现Arduino ESP32 I2S录音上位机需要配置ESP32的I2S接口,连接音频输入设备,通过I2S接口读取音频数据,并将数据传输到上位机进行处理或保存。这样,我们可以利用ESP32及其I2S接口进行音频录制,并在上位机上对音频数据进行后续操作。