es8311_driver

ES8311 audio codec I2C configuration driver for MicroPython

1.0.0 leezisheng 更新时间: 2026-07-23
安装包
本地安装
mpremote mip install https://upypi.net/pkgs/es8311_driver/1.0.0
远程安装
mip.install("https://upypi.net/pkgs/es8311_driver/1.0.0")
版本选择
README

ES8311 音频编解码器 MicroPython 驱动

目录

简介

ES8311 是 Everest Semiconductor 推出的低功耗音频编解码器(Codec),集成单声道 ADC 和单声道 DAC,支持 I2C 控制接口和 I2S/PCM 数字音频接口。本驱动是对 ES8311 的 I2C 寄存器配置层封装,负责通过 I2C 配置芯片的时钟方案、音频格式、采样率和音量等参数。实际的 I2S 音频数据传输由应用层的 machine.I2S 完成。

驱动代码参考了 M5Stack UIFlow MicroPython 开源项目(m5stack/uiflow-micropython),将原多文件模块结构合并为单文件并进行了规范化。

仅静态检查通过,未硬件验证。

主要功能

  • 完整的 I2C 寄存器映射常量(寄存器地址宏定义)
  • 丰富的采样率支持(8kHz / 11.025kHz / 12kHz / 16kHz / 22.05kHz / 24kHz / 32kHz / 44.1kHz / 48kHz / 64kHz / 88.2kHz / 96kHz)
  • 多种 MCLK 主时钟频率适配(1.024MHz ~ 18.432MHz)
  • 支持多种音频分辨率(16/18/20/24/32 位)
  • MCLK / SCLK 极性配置
  • MCLK 来源选择(MCLK 引脚 / BCLK 引脚)
  • DAC 音量控制(0-100 级,自动钳位)
  • 模拟麦克风和数字 PDM 麦克风模式切换
  • I2C 通信异常自动包装为 RuntimeError
  • 调试日志开关,库默认静默

硬件要求

推荐测试硬件 说明
M5Stack CoreS3 / ATOM Echo 集成 ES8311 的开发板
ES8311 模组 + 任意 MicroPython 开发板 I2C + I2S 接线
引脚 功能描述
VCC 电源正极(3.3V)
GND 电源负极
SCL I2C 时钟线
SDA I2C 数据线
MCLK I2S 主时钟(可选,也可由 BCLK 提供)
BCLK I2S 位时钟
LRCK I2S 字选择(左右声道时钟)
DOUT I2S 数据输出(DAC 播放)
DIN I2S 数据输入(ADC 录音)

软件环境

项目 说明
MicroPython 固件 v1.23.0 及以上
驱动版本 v1.0.0
依赖库 无外部依赖(仅使用 machine、time 内置模块)

文件结构

├── code/
   ├── es8311.py        # 核心驱动I2C 寄存器配置
   └── main.py          # 测试示例 I2S 使用演示
├── package.json         # 包配置文件
└── README.md            # 说明文档

文件说明

文件 用途
code/es8311.py ES8311 I2C 配置驱动核心代码,包含寄存器映射常量、时钟系数查找表、ES8311ClockConfig 配置容器和 ES8311 驱动类
code/main.py 完整测试示例,演示 I2C 初始化、芯片 ID 验证、编解码器初始化和 I2S 音频接口的创建与使用
package.json mip 包配置文件,支持 mip.install 安装

快速开始

步骤 1:复制文件

code/es8311.pycode/main.py 复制到 MicroPython 设备的 / 根目录或 /lib/ 目录。

步骤 2:接线

根据硬件要求表格连接 I2C 和 I2S 引脚。main.py 中使用的默认引脚如下(请根据实际硬件修改):

引脚常量 默认值 说明
SCL_PIN 22 I2C 时钟
SDA_PIN 21 I2C 数据
I2S_BCK_PIN 5 I2S 位时钟
I2S_WS_PIN 25 I2S 字选择
I2S_DOUT_PIN 26 I2S 数据输出
I2S_DIN_PIN 35 I2S 数据输入

步骤 3:运行测试

# 方式一:直接运行 main.py
import main

# 方式二:最小示例
from machine import I2C, Pin
from es8311 import ES8311, ES8311ClockConfig

i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
codec = ES8311(i2c, address=0x18)

# 构建时钟配置
clk_cfg = ES8311ClockConfig(
    mclk_inverted=False,
    sclk_inverted=False,
    mclk_from_mclk_pin=False,
    mclk_frequency=0,
    sample_frequency=48000,
)

# 初始化编解码器
codec.init(clk_cfg, ES8311.ES8311_RESOLUTION_16, ES8311.ES8311_RESOLUTION_16)

# 设置音量
codec.voice_volume_set(80)

# 配置模拟麦克风
codec.microphone_config(digital_mic=False)

# 释放资源
codec.deinit()

注意事项

类别 限制与说明
驱动范围 本驱动仅负责 I2C 寄存器配置,不包含 I2S 数据传输功能。音频播放和录音由 machine.I2S 在应用层处理
代码来源 基于 M5Stack UIFlow MicroPython(MIT License)改编
验证状态 仅静态检查通过,未硬件验证
I2C 地址 默认地址 0x18,可通过 address 参数修改
采样率限制 仅支持系数表中列出的 MCLK/采样率组合,不匹配时静默跳过
音量范围 0-100,超出范围自动钳位,0 为静音
依赖注入 I2C 实例由外部传入,驱动类内部不创建硬件对象

版本记录

版本号 日期 作者 修改说明
v1.0.0 2026-07-23 M5Stack Technology CO LTD, FreakStudio 初始版本(规范化后的单文件驱动)

联系方式

许可协议

MIT License

Copyright (c) 2026 M5Stack Technology CO LTD, FreakStudio

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

文件列表
Name Size Type
LICENSE 1.0KB File
README.md 6.4KB Doc
es8311.py 32.6KB Python
main.py 7.9KB Main
package.json 470B Conf