ESP32-P4-MINI-A 使用教程

说明

产品简介

ESP32-P4-Mini是一款spotpear设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。此外,支持 USB OTG 2.0 HS,并板载 40PIN GPIO 扩展接口,兼容部分树莓派 Pico HAT 扩展板,实现更广泛的应用适配。ESP32-P4 采用 400MHz 双核 RISC-V 处理器,支持最大 32MB PSRAM,具备 USB 2.0、MIPI-CSI / DSI 和 H.264 编码等外设,满足低成本、高性能和低功耗的多媒体开发需求。此外,ESP32-P4 集成数字签名外设和专用密钥管理单元,确保数据与操作安全。ESP32-P4-WIFI6 专为高性能和高安全应用设计,满足嵌入式系统在人机交互、边缘计算和 IO 扩展等方面的需求。

产品特性

  • 处理器
    • 搭载 RISC-V 32 位双核与单核处理器的高性能 MCU
    • 搭载RISC-V 32位单核处理器(LP系统)
    • 搭载ESP32-C6 WIFI/BT协处理器,通过SDIO拓展WIFI 6/Bluetooth 5(BLE)等功能
  • 存储器
    • 128 KB的高性能(HP)系统只读存储器(ROM)。
    • 16 KB的低功耗(LP)系统只读存储器(ROM)。
    • 768 KB的高性能(HP)L2内存(L2MEM)。
    • 32 KB的低功耗(LP)SRAM。
    • 8 KB的系统紧密耦合内存(TCM)。
    • 封装内叠封32/16 MB PSRAM,QSPI接口连接32MB/16MB Nor Flash
  • 外设接口
    • 板上引出排针,引出全部可编程 GPIO,支持丰富的外围设备
    • 板载 USB 2.0 OTG 接口、SDIO3.0 SD卡槽、Type-C UART烧录口,方便不同场景使用
    • 板载扬声器接口、麦克风,可使用Codec芯片和功放芯片实现理想的音频功能需求
    • 板载MIPI-CSI高清摄像头接口,支持全高清1080P画面采集及编码,集成图像信号处理器(ISP)、H264视频编码器,支持H.264 & JPEG 视频编码(1080P @30fps),方便应用到计算机视觉、机器视觉等领域
    • 板载MIPI-DSI高清屏显接口,集成像素处理加速器(PPA)、2D 图形加速控制器(2D DMA),支持JPEG 图像解码(1080P @30fps),为高清屏显和流畅的HMI体验提供了强大支持,方便应用到智能家居中控屏、工业中控屏、自动贩卖机等场景

硬件说明


  1. RST按键
  2. Type-C 接口
  3. BOOT按键
  4. RGB彩灯
  1. ESP32-P4
  2. Flash


  1. Type-C 接口
  2. 贴片陶瓷天线
  3. ESP32-C6
  4. CH334
  1. 摄像头接口
  2. 通道切换IC
  3. 显示屏接口
  4. 电源IC
  5. 双排排母
  6. 5V显示屏供电口

引脚定义


产品尺寸


使用说明

本教程旨在指导用户搭建 ESP32-P4 硬件开发的软件环境,通过简单的示例展示如何使用 ESP-IDF 配置菜单,并编译、下载固件至 ESP32-P4 开发板等步骤。

  • 准备工作
    • 硬件
      • ESP32-P4-MINI 开发板
      • USB数据线(Type-A转Type-C,按需准备)
      • 电脑(Windows、Linux或macOS)
    • 软件(推荐使用集成开发环境安装ESP-IDF,如果你熟悉ESP-IDF可以直接从ESP-IDF终端出发,以下开发方式任选其一即可)
      • VSCode + ESP-IDF插件推荐
      • Eclipse + ESP-IDF插件(Espressif-IDE)
      • Arduino IDE

ESP-IDF

ESP-IDF 简介及环境搭建(VSCode专栏)

ESP-IDF(Espressif IoT Development Framework)是乐鑫(Espressif)推出的开源物联网开发框架,专门用于其ESP32系列芯片的开发。ESP-IDF提供了构建物联网应用的必要工具和库,包括Wi-Fi、蓝牙、外设驱动、文件系统、网络协议栈、加密、安全和实时操作系统(FreeRTOS)等。

下面描述只适用于使用VSCode + ESP-IDF环境搭建

  • PS:
    • 如若希望使用Eclipse 编辑器来作为主力开发环境,请点击链接下载Espressif-IDE安装,并替换ESP-IDF版本≥v5.3.1
    • 若下述安装ESP-IDF过程中出现TSL Error、Network Error等报错、异常等情况,请重新清理目录文件夹、确保网络环境稳定无代理污染等并重新进行安装。所需时间较长,请耐心等待。

先决条件

  1. 如果您使用的是 Mac 或 Linux,请安装以下ESP-IDF 先决条件。如果您使用的是 Windows,请忽略此步骤。

安装VSCode

  1. 打开VSCode官网的下载页面,选择对应系统和系统位数进行下载

  2. 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项

    • 第一、二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验
    • 第三项开启后,选择打开方式时,可以直接选择VSCode

安装ESP-IDF插件

  1. 打开VSCode,点击插件管理器,并搜索ESP-IDF进行下载安装,如图:

  2. 安装好后左侧工具栏有Espressif的Logo就是插件,点击进入插件(会有一小段时间用于加载程序),选择“EXPRESS”进行快速安装,如图:

安装ESP-IDF开发环境

  1. 进入EXPRESS安装界面,确认好ESP-IDF 版本≥v5.3.1发布版本、ESP-IDF 目录和ESP-IDF 工具目录后,点击Install,耐心等待安装步骤完成,如图:

  2. 如果是国内用户,可以选择下载服务器为Espressif,安装过程比较缓慢,确保网络状态良好,可耐心等待安装完成,

  3. 安装过程展示:

  4. 安装完成标志:

入门(Getting Start)

本wiki不间断更新ESP32-P4示例程序,部分应用程序所需ESP-IDF版本依赖,需要一定时间测试更新,请耐心等待。

学习一门语言或开发环境的最好方式是从入门开始,在本章节详细介绍如何创建项目、从现有项目开发、以及嵌入式经典教程HelloWorld和常用接口I2C的使用

一个ESP-IDF项目的基本结构介绍

  • 打开ESP-IDF插件,点击New project,选择ESP-IDF示例——>sample_project——>点击创建

  • 新建并在窗口中打开可以查看到VSCode的结构如
├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c
└── README.md                  

ESP-IDF工程项目详解

  • 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
    • 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语音基础,引入库是通过CMakeLists.txt进行配置和定义的。
    • 当我们使用在线组件时,通常使用idf.py add-dependency <componetsName>来为项目添加在线组件,这会生成一个idf_component.yml文件用于管理组件。
    • CmakeLists.txt的作用:ESP-IDF编译时编译工具CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。编译过程如:


VSCode 用户界面底部工具栏说明

当我们打开一个ESP-IDF工程时,底部会自动加载环境,对于ESP32-P4-WIFI6的开发,底部工具栏也是一个非常重要的,如图示: 


  1. ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
  2. 设备烧录COM口,选择以将编译好的程序烧录进芯片上
  3. set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-WIFI6需要选择esp32p4为目标芯片
  4. menuconfig,点击修改sdkconfig配置文件内容
  5. fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
  6. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
  7. flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
  8. monitor开启烧录口监控,当一个工程Build——>Flash后,可通过点击此按钮查看烧录、调试口输出的log,以便观察应用程序是否正常工作
  9. Build Flash Monitor 一键按钮,用于连续执行Build——>Flash——>Monitor,常被称作小火苗

HelloWorld 示例

了解完VSCode 用户界面底部工具栏说明后,通过Hello World工程可以快速入门和了解ESP32开发环境的基础项目。它演示了如何使用ESP-IDF来创建一个基本的应用程序,并且涵盖了ESP32的开发流程,包括编译、烧录和监视器调试的步骤。

  1. 打开示例工程HelloWorld后,设置好目标端口、芯片类型(此处注意,选择好芯片类型时右下角有加载动作,这是ESP-IDF正在执行idf.py set-target esp32p4的操作指令,它需要从包管理器拉取对应芯片的架构包环境,需要一定时间处理,请一定要耐心等待,如果此时点击构建等操作会有报错!!!)
  2. 通过底部工具一键构建、烧录、监视,可以查看到终端输出Hello World!

  3. 代码内容解析
    1. 代码中仅有一个app_main主函数,通过条件判断来确定打印内容输出,并在末尾添加了循环,实现10s重启芯片。
    2. app_main函数是ESP-IDF(Espressif IoT Development Framework)开发框架中用户应用程序的入口点。它是ESP-IDF项目的核心函数,相当于C语言标准程序中的main函数。在ESP32开发中,app_main函数是由实时操作系统(FreeRTOS)调度的第一个任务,这也是用户代码执行的起始点。

I2C

I2C是一个较常用的串行通信总线,它可以通过两条线进行通信,一根数据线(SDA, Serial Data)和一根时钟线(SCL, Serial Clock),并支持多主多从模式。在ESP32-P4上一共有2个I2C总线接口,芯片内部通过 GPIO 交换矩阵可配置使用任意 GPIO 管脚,这个特性可以让我们自由的使用任意 GPIO 作为I2C的引脚控制,当然ESP32-P4 I2C支持Slave、Master模式,以下主要使用 I2C 主机(Master)模式,用于 ESP32-P4 启动通信、控制并向从设备(可以是任何I2C接口的传感器)发送数据请求或接收数据。 ESP32-P4-WIFI6的I2C引脚默认使用SCL(GPIO8)SDA(GPIO7)

ESP-IDF中,I2C总线需要i2c_master_bus_config_t指定配置:

  • i2c_master_bus_config_t::clk_source选择 I2C 总线的源时钟,使用默认I2C时钟源(通常都使用默认时钟源)则为I2C_CLK_SRC_DEFAULT即可
  • i2c_master_bus_config_t::i2c_port设置控制器使用的 I2C 端口,正如上述说明,ESP32-P4的I2C是有两个的,当有两个不同的I2C需要同时启用,则需要使用其来区分
  • i2c_master_bus_config_t::scl_io_num设置串行时钟总线 (SCL) 的 GPIO 编号,在ESP32-P4-WIFI6上,为 8
  • i2c_master_bus_config_t::sda_io_num设置串行数据总线 (SDA) 的 GPIO 编号,在ESP32-P4-WIFI6上,为 7
  • i2c_master_bus_config_t::glitch_ignore_cnt设置 Master Bus 的 Glitch Period,如果线路上的 Glitch Period小于此值,可以过滤掉,通常值为 7
  • i2c_master_bus_config_t::enable_internal_pullup启用内部 pullups,在ESP32-P4-WIFI6上,已经有额外的I2C上拉,无需启用内部上拉

经上所述,I2C配置为:

   i2c_master_bus_config_t i2c_bus_config = {
       .clk_source = I2C_CLK_SRC_DEFAULT,
       .i2c_port = I2C_NUM_0,
       .scl_io_num = 8,
       .sda_io_num = 7,
       .glitch_ignore_cnt = 7,
       .flags.enable_internal_pullup = false,
   };
  1. 打开i2c_tools工程,选择好COM口和芯片型号,点击进入设置,这里会打开一个新的标签:SDK Configuration editor也就是menuconfig,我们直接在搜索栏中搜索I2C,看到此时内容已经检索,并且示例例程中的SCL GPIO Num、SDA GPIO Num已经对应上了SCL(GPIO8)SDA(GPIO7)
  2. 接下来可以直接通过点击编译、烧录、监视,完成后会在终端查看到命令菜单,当我们执行i2cdetect后,会打印出所有的I2C地址,如果有设备存在则会显示数字(I2C地址 18 设备是板载的ES8311 Codec音频芯片,此芯片会在I2S部分详细说明),如图:

  3. 上述步骤已经实现了I2C设备通信的基础,在I2C通信协议设备中,常常需要通过I2C总线向对应地址的设备写寄存器配置以实现I2C设备的功能,此时我们需要在程序中写好I2C设备的初始化程序以便驱动I2C设备。不同的I2C设备存在不同的I2C地址,在开发中我们可以通过i2ctools工具查询接入的I2C地址,然后通过阅读其芯片手册查询寄存器、配置等内容实现I2C总线的通信。

进阶(Intermediate)

本wiki不间断更新ESP32-P4示例程序,部分应用程序所需ESP-IDF版本依赖,需要一定时间测试更新,请耐心等待。

WIFI联网示例

ESP32-P4本身不带WIFI/BT功能,而ESP32-P4-WIFI6 通过 SDIO 连接了一块ESP32-C6 模组来拓展WIFI功能。ESP32-C6作为Slave,通过一系列指令集支持 ESP32-P4 作为 Host 通过SDIO 来使用WIFI 6/BT 5功能,通过添加两个组件后,可以做到无缝使用esp_wifi

// 在一个WIFI工程下,通过ESP-IDF组件管理工具添加下述两个组件
idf.py add-dependency "espressif/esp_wifi_remote"
idf.py add-dependency "espressif/esp_hosted"
  1. 打开wifistation工程,进行组件的添加

  2. 如上图所示,是添加组件的具体步骤
    1. 打开ESP-IDF Terminal。
    2. 在 Terminal 里将所需要的组件进行添加
    3. 成功添加后,在工程项目中的main文件夹中会多出一个idf_component.yml,此文件的作用已经在ESP-IDF工程目录章节说明过是用于管理项目组件的
    4. 打开后,可以看到已经添加上了espressif/esp_hosted: "*"espressif/esp_wifi_remote: "*"两个组件,在构建项目时,它们会被添加到项目中
  3. 接下来可以通过点击 打开设置,输入Example检索,这里设置好要连接WIFI的ssidpassword注意ESP32-C6是支持2.4GHz的WiFi-6,在选择目标WiFi时要确认好频率是2.4GHz的,修改完之后需要保存,否则会出错!

  4. 接下来可以直接通过点击编译、烧录、监视,完成后会在终端查看到如下结果,此时ESP32-P4-WIFI6已经接入WIFI并且联网了:

MIPI-DSI点屏示例

ESP32-P4-WIFI6使用ESP32-P4NRW32芯片,具有以下新特性:

  • 符合MIPI-DSI协议,使用 D-PHY v1.1 版本,最高 2-lane x 1.5Gbps(共3Gbps)
  • 支持RGB888、RGB565、YUV422输入
  • 支持RGB888、RGB666、RGB565输出
  • 使用 video mode 输出视频流,支持输出固定图像 pattern

MIPI-DSI图像处理还可以使用2D-DMA控制器处理,支持PPA和JPEG编解码外设。

MIPI-DSI LCD驱动原理


所需硬件

  • 10.1寸显示屏及其配件
  • ESP32-P4-MINI【主机】

点屏步骤

  1. 7寸屏幕驱动已封装为组件,组件位置位于ESP Component Registry
  2. 打开工程后,选择esp32p4核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕已经点亮刷新色条了:


高级(Advanced)

本wiki不间断更新ESP32-P4示例程序,部分应用程序所需ESP-IDF版本依赖,需要一定时间测试更新,请耐心等待。

LVGL HMI人机交互

本示例展示了ESP32-P4通过MIPI DSI接口将LVGL图像显示,可充分体现ESP32-P4强大的图像处理能力

所需硬件

  • 10.1寸显示屏及其配件
  • ESP32-P4-MINI【主机】

点屏步骤

  1. 7寸屏幕驱动已封装为组件,组件位置位于ESP Component Registry
  2. 打开工程后,选择esp32p4核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕:


综合玩法(Expert Techniques)

本wiki不间断更新ESP32-P4示例程序,部分应用程序所需ESP-IDF Master版本依赖,需要一定时间测试更新,请耐心等待。

ESP-Phone

本示例基于 ESP_Brookesia,展示了一个类似 Android 的界面,其中包含许多不同的应用程序。该示例使用了开发板的 MIPI-DSI 接口、MIPI-CSI 接口、ESP32-C6、SD 卡和音频接口。基于此示例,可以基于 ESP_Brookesia 创建一个使用案例,从而高效开发多媒体应用程序。

所需硬件

  • 配套10.1寸显示屏及其配件
  • OV5647或SC2336摄像头及排线
  • 8Ω 2W 喇叭
  • ESP32-P4-MINI【主机】

点屏步骤

  1. 配套10.1寸屏幕驱动已封装为组件,组件位置位于ESP Component Registry
    使用idf.py add-dependency "waveshare/esp_lcd_jd9365_10_1"来向你的工程中添加组件。
  2. 打开工程后,选择esp32p4核心,接下来可以直接通过点击编译、烧录、监视,完成后可以查看屏幕:

资料

原理图

示例程序

数据手册

软件

FAQ

问题:希望程序得到更多库支持?

可以订阅该存储库,并提出issue说明需求,工程师收到需求后会第一时间进行评估: ESP32-display-support


问题:使用WiFi时,为何加上了WiFi的组件后编译报错?

1.此问题复现在使用VS Code插件的情况下,在部分情况下VS Code插件安装的ESP-IDF存在bug,现有的解决方式是换为IDF工具执行编译烧录。


问题:为何现在的CPU频率只能设置360MHz宣传不是有400MHz?

1.当前芯片SDK还未开放拉满ESP32-P4 HP 核心速率,等SDK成熟后会更新在ESP-IDF中


问题:是否有其他应用场景的示例代码?

1.在功能和验证方案的工作当中我们验证过很多功能,目前有一些应用如使用Cat-4模组来为P4供网、使用P4的MIPI-DSI来拓展主机屏幕等功能都有一些进度,但出于稳定性需求,目前还未提供相关示例程序,待功能和方案完善后会补充至wiki中
2.如果有一些好的idea或是有一些已经有经过部分验证的场景应用,可以分享给我们来评估可行的方案


问题:可以使用PlatformIO、MicroPython开发吗?

1.出于稳定性要求,PlatformIO支持ESP32-P4还需要PlatformIO社区支持Arduino-esp32 SDK V3.1x版本
2.在开发过程中,我们尝试过使用MPY固件来开发ESP32-P4,可以简单的运行一些指令;但这只是验证阶段,实际接口、外设应用还未适配,待完全适配稳定后,将推出ESP32-P4在MicroPython中的使用案例。

技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841