这是一个面向 LILYGO T5-P4 E-Paper 开发板的纯 ESP-IDF 示例仓库。
examples/:ESP-IDF示例工程docs/:补充说明和调试记录firmware/:板载ESP32-C6相关固件hardware/:原理图和芯片资料
如果你是第一次接触这个项目,建议先从 examples/pca9535 或 examples/i2c_tools 开始确认串口、下载和 I2C 是否正常。
根目录的 examples/ 是纯 ESP-IDF 示例,适合:
- 已经在用 Espressif 官方工具链
- 想看更底层的初始化和驱动写法
- 想做正式项目集成
当前示例包括:
pca9535:IO 扩展芯片读取i2c_tools:I2C 工具示例sgm38121:电源相关芯片示例sd_card_test:uSD 卡类型、容量、文件读写校验示例es8311_mic_speak/es8311_spiffs:音频相关示例fastEPD_lvgl_demo/hdmi_video_renderer/hdmi_video_renderer_lvgl:显示相关示例c6_wifi_scan:通过板载ESP32-C6扫描 WiFicamera_id_detect:读取摄像头 ID 并识别SC2336/OV2710/OV5645camera_wifi_stream:通过 WiFi 输出摄像头 MJPEG 画面usb_host_hid_basic:通过 USB OTG 验证外接 USB 键盘和鼠标的基础 Host 输入
文档目录里放的是补充说明,建议优先看这几个:
docs/esp-hosted-c6-Slave.md:板载ESP32-C6的esp-hosted从机说明docs/pinmap.md:引脚和硬件说明docs/camera-sensor-power.md:摄像头供电和上电顺序说明
firmware/ 里放的是配套固件,例如板载 ESP32-C6 使用的 esp-hosted slave 固件。运行 examples/c6_wifi_scan 前,需要先确认 C6 端固件已经烧录好。
硬件目录里有原理图和芯片资料,遇到硬件问题时很有用。
常用文件:
hardware/T5-P4 E-paper V0.1.pdfhardware/IT8951_D_V0.2.4.3_20170728.pdfhardware/lt8912.pdfhardware/pca9535.pdf
如果你只是想确认板子和工具链通了,推荐先跑这两个 ESP-IDF 示例:
examples/pca9535examples/i2c_tools
这两个示例依赖少,最适合确认串口、下载、I2C 是否正常。
推荐顺序:
- 先看
docs/esp-hosted-c6-Slave.md - 先给板载
ESP32-C6烧录esp-hostedslave 固件 - 再运行
examples/c6_wifi_scan
注意:c6_wifi_scan 不是开箱即用,它依赖 C6 端固件已经准备好。
先进入一个简单示例目录,比如:
cd examples/pca9535然后执行:
idf.py set-target esp32p4
idf.py build
idf.py -p <PORT> flash monitor如果你想测试 WiFi 扫描:
cd examples/c6_wifi_scan
idf.py set-target esp32p4
idf.py build
idf.py -p <PORT> flash monitor前提是板载 ESP32-C6 已经刷好 esp-hosted slave 固件。
如果你完全是第一次接触这块板子,建议按这个顺序来:
- 先确认串口和下载正常
- 跑一个最简单的
I2C或PCA9535示例 - 再尝试
C6 WiFi - 最后再碰音频、HDMI、LVGL、摄像头这些依赖更多的功能
下面这些引脚是最常用、最值得先记住的:
| 功能 | 引脚 |
|---|---|
| I2C SDA | 7 |
| I2C SCL | 8 |
| SPI MISO | 44 |
| SPI SCK | 45 |
| SPI MOSI | 46 |
| SD CS | 47 |
| Touch INT | 3 |
| HDMI INT | 4 |
| PCA9535 INT | 5 |
| XL9555 INT / ALL_INT | 6 |
| HDMI DDC SDA/SCL | 9 / 10 |
| C6 SDIO D0/D1/D2/D3 | 14 / 15 / 16 / 17 |
| C6 SDIO CLK/CMD | 18 / 19 |
| C6 RST/EN | XL9555 P13 |
| C6 WAKEUP | XL9555 P14 |
| EPD STV | 48 |
| Frontlight PWM1/PWM2 | 53 / 54 |
| HDMI RST / EN | XL9555 P10 / P11 |
V0.2 里新增了 XL9555,触摸复位、音频控制、HDMI 控制、C6 复位/唤醒都已经从旧 PCA9535 映射迁到 XL9555。如果你需要完整引脚定义,请看 docs/pinmap.md 或具体示例代码。
- 根目录
examples/需要ESP-IDF 5.4左右环境 idf.py set-target必须设为esp32p4
优先检查:
- 板载
ESP32-C6是否已经烧录esp-hostedslave 固件 - 是否使用了正确的
esp32p4目标 - 串口日志里是否出现
esp_wifi_remote/Received Slave ESP Init
这块板子的屏幕和部分启动相关引脚有耦合,某些情况下会影响下载模式进入。
如果你遇到反复下载失败:
- 先确认供电稳定
- 尽量先跑最简单的示例排除软件问题
- 再结合原理图和硬件资料排查
你可以按自己的目标继续看:
- 想做纯 IDF:从
examples/开始 - 想接入板载 C6 WiFi:先看
docs/esp-hosted-c6-Slave.md - 想接入摄像头:先看
docs/camera-sensor-power.md和examples/camera_id_detect - 想查引脚和芯片:看
docs/和hardware/
如果只是想“先跑起来一个东西”,推荐从 examples/pca9535 或 examples/i2c_tools 开始。
// Shared I2C
#define BOARD_I2C_SDA (7)
#define BOARD_I2C_SCL (8)
// I2C devices
#define BOARD_I2C_ADDR_ES8311 (0x18)
#define BOARD_I2C_ADDR_PCA9535 (0x20) // EPD/TPS only on V0.2
#define BOARD_I2C_ADDR_XL9555 (0x22) // V0.2 control expander
#define BOARD_I2C_ADDR_SGM38121 (0x28)
#define BOARD_I2C_ADDR_TOUCH (0x5D) // GT911
#define BOARD_I2C_ADDR_BQ27220 (0x55)
#define BOARD_I2C_ADDR_TPS651851 (0x68)
#define BOARD_I2C_ADDR_BQ25896 (0x6B)
#define BOARD_I2C_ADDR_LT8912B_MAIN (0x48)
#define BOARD_I2C_ADDR_LT8912B_CEC (0x49)
#define BOARD_I2C_ADDR_LT8912B_AVI (0x4A)
// Direct GPIO
#define BOARD_TOUCH_INT (3)
#define BOARD_HDMI_INT (4)
#define BOARD_PCA9535_INT (5)
#define BOARD_XL9555_INT (6) // ALL_INT
#define BOARD_HDMI_DDC_SDA (9)
#define BOARD_HDMI_DDC_SCL (10)
#define BOARD_BOOT (35)
// SD Card / SPI
#define BOARD_SD_MISO (44)
#define BOARD_SD_SCK (45)
#define BOARD_SD_MOSI (46)
#define BOARD_SD_CS (47)
// E-paper display
#define BOARD_EPD_D0 (27)
#define BOARD_EPD_D1 (28)
#define BOARD_EPD_D2 (29)
#define BOARD_EPD_D3 (30)
#define BOARD_EPD_D4 (31)
#define BOARD_EPD_D5 (32)
#define BOARD_EPD_D6 (33)
#define BOARD_EPD_D7 (34)
#define BOARD_EPD_CKV (13)
#define BOARD_EPD_CKH (24)
#define BOARD_EPD_STH (25)
#define BOARD_EPD_LEH (26)
#define BOARD_EPD_STV (48)
#define BOARD_FRONTLIGHT_LED1_PWM (53)
#define BOARD_FRONTLIGHT_LED2_PWM (-1)
// ESP32-C6 SDIO
#define BOARD_C6_D0 (14)
#define BOARD_C6_D1 (15)
#define BOARD_C6_D2 (16)
#define BOARD_C6_D3 (17)
#define BOARD_C6_CLK (18)
#define BOARD_C6_CMD (19)
#define BOARD_C6_RST (54)
// ES8311 audio
#define BOARD_ES8311_I2S_DOUT (39) // ESP32 -> ES8311 DSDIN
#define BOARD_ES8311_I2S_LRCK (40)
#define BOARD_ES8311_I2S_DIN (41) // ES8311 ASDOUT -> ESP32
#define BOARD_ES8311_I2S_SCLK (42)
#define BOARD_ES8311_I2S_MCLK (43)
// XL9555 IO expander, I2C address 0x22.
// Values below are zero-based IO indexes used by the BSP; comments show chip port names.
#define BOARD_XL_IO_TOUCH_RST (0) // P00, T_RST
#define BOARD_XL_IO_CC_SW0 (1) // P01
#define BOARD_XL_IO_CC_SW1 (2) // P02
#define BOARD_XL_IO_LR_RST (3) // P03
#define BOARD_XL_IO_NRF_CE (4) // P04
#define BOARD_XL_IO_AUDIO_SHUTDOWN (6) // P06, Power amplifier, HIGH the effective rate.
#define BOARD_XL_IO_AUDIO_SEL (7) // P07, AUDIO_SEL, LOW the effective rate.
#define BOARD_XL_IO_HDMI_RST (8) // P10, HDMI_RST
#define BOARD_XL_IO_HDMI_EN (9) // P11, HDMI_EN
#define BOARD_XL_IO_SENSOR_IRQ (10) // P12, SEN_IRQ
#define BOARD_XL_IO_C6_RST (11) // P13, C6_RST/EN
#define BOARD_XL_IO_C6_WAKEUP (12) // P14, C6_WAKEUP
// PCA9535 IO expander, I2C address 0x20.
// V0.2 keeps PCA9535 for EPD/TPS control only.
#define BOARD_PCA_IO_EPD_OE (8) // IO1_0, EP_OE
#define BOARD_PCA_IO_EPD_MODE (9) // IO1_1, EP_MODE
#define BOARD_PCA_IO_TPS_PWRUP (11) // IO1_3, TPS_PWRUP
#define BOARD_PCA_IO_VCOM_CTRL (12) // IO1_4, VCOM_CTRL
#define BOARD_PCA_IO_TPS_WAKEUP (13) // IO1_5, TPS_WAKEUP
#define BOARD_PCA_IO_TPS_PWR_GOOD (14) // IO1_6, TPS_PWR_GOOD
#define BOARD_PCA_IO_TPS_INT (15) // IO1_7, TPS_INT
// HDMI / LT8912B
#define BOARD_HDMI_SDA BOARD_I2C_SDA
#define BOARD_HDMI_SCL BOARD_I2C_SCL
#define BOARD_HDMI_RST BOARD_XL_IO_HDMI_RST
#define BOARD_HDMI_EN BOARD_XL_IO_HDMI_EN
// Expansion header GPIO changes in V0.2
#define BOARD_EXT_LR_IRQ_GPS_PPS (2)
#define BOARD_EXT_NFC_IRQ (11)
#define BOARD_EXT_NRF_IRQ_7682_DTR (12)
#define BOARD_EXT_LR_CS_GPS_TX (20)
#define BOARD_EXT_LR_BUSY_GPS_RX (21)
#define BOARD_EXT_NFC_CS (22)
#define BOARD_EXT_CC_GDO2_7682_TXD (23)
#define BOARD_EXT_CC_GDO0_7682_RXD (49)
#define BOARD_EXT_CC_CS_7682_RST (50)
#define BOARD_EXT_NRF_CS_7682_RI (51)
#define BOARD_EXT_MODULE_EN_POWER_KEY (52)examples/usb_host_msc_example:把外接 USB U 盘挂载到/usb,并通过http://192.168.4.1提供网页文件管理。- 硬件前提:T5-P4 的 USB OTG 口连接 U 盘,板载 ESP32-C6 已刷
esp-hostedslave 固件。 - 与
examples/usb_device_msc_wireless_disk的区别:前者是 Host 访问外设 U 盘,后者是把开发板自身暴露成 USB 磁盘。 - 与
examples/usb_host_hub_dual_camera的区别:前者面向 MSC 存储设备,后者面向 UVC 摄像头。
examples/usb_host_hid_basic:通过 T5-P4 的 USB OTG 口连接外接 USB 键盘或鼠标,在串口打印键盘输入以及鼠标位移和按键状态。- 硬件前提:T5-P4 的 USB OTG 口直连目标 USB HID 设备或带供电的 USB Hub,USB Host 信号使用
GPIO49/50。 - 与
examples/usb_host_msc_example的区别:这里演示的是 HID 输入设备验证,不做 U 盘挂载和网页文件管理。