example

Example of the component espp/m5stack-tab5 v1.1.7
# M5Stack Tab5 BSP Example

This example demonstrates the comprehensive functionality of the M5Stack Tab5 development board using the `espp::M5StackTab5` BSP component. It showcases all major features including display, touch, audio, camera, IMU, power management, and communication interfaces.

<img width="715" height="949" alt="image" src="https://github.com/user-attachments/assets/124ae37f-c27f-4805-aa5b-79951d069b99" />

## Features Demonstrated

### Core Systems
- **5" 720p MIPI-DSI Display**: Initialization and brightness control
- **GT911 Multi-Touch Controller**: Touch event handling with callbacks
- **Dual Audio System**: ES8388 codec + ES7210 AEC with recording/playback.
  The on-screen audio row (bottom-left) records from the microphones, plays
  the recording back through the speaker, and adjusts the speaker /
  microphone volumes; the recording buffer prefers PSRAM and the measured
  capture rate is logged when a recording stops. Because the speaker is
  mono, the recorded stereo (mic 1 / mic 2) is downmixed to both channels
  before playback, and the per-channel peak amplitude is logged so you can
  tell a silent capture (peak near 0) from a playback issue.
- **BMI270 6-axis IMU**: Real-time motion sensing
- **MIPI-CSI Camera (SC202CS)**: The **Camera** tab shows the live camera feed.
  The BSP brings up the camera via Espressif's `esp_video` (V4L2) pipeline
  (CSI + ISP, RAW8 -> RGB565) and streams frames to a capture task; each frame is
  downscaled and rotated to the current display orientation by the PPA, then the
  example copies it into an `lv_canvas` on the Camera tab. The managed
  `espressif/esp_video` + `espressif/esp_cam_sensor` components are declared as
  dependencies of the `m5stack-tab5` BSP (see
  `components/m5stack-tab5/idf_component.yml`) and fetched transitively, so this
  example builds with the IDF component manager enabled. The ISP pipeline
  controller (auto exposure / white balance) is enabled so the feed is correctly
  white-balanced.
  - **Known upstream quirks (both benign, image unaffected):**
    - The stock SC202CS auto color-correction sometimes computes a CCM value
      beyond the ESP32-P4 ISP's `+/-4.0` limit under certain lighting. The ISP
      safely rejects it and keeps the previous CCM, but the pipeline logs the
      rejection every frame - enough blocking UART logging to drop frames - so
      the BSP's `initialize_camera()` silences those ISP/CCM log tags. See the
      comment in `components/m5stack-tab5/src/camera.cpp`.
    - You may also see occasional `ISP: gamma xcoord error` lines (a few at
      startup, then rarely on big scene-brightness changes). The precompiled
      auto-enhancement (AEN) hands the ISP a gamma table the hardware rejects;
      the ISP keeps the previous gamma, so the picture is fine and no frames are
      dropped. It is logged from an ISR (`ESP_EARLY_LOGE`), which ignores the
      runtime log-level controls, so it cannot be silenced the way the CCM spam
      is without also hiding real errors - it is left as-is.
- **Battery Management**: INA226 power monitoring with charging control

### Communication Interfaces
- **microSD Card**: File system support with SDIO interface
- **Real-Time Clock**: RX8130CE with alarm and wake-up features

## Configuration notes

This example raises some espp BSP task stack sizes above their component
defaults via `sdkconfig.defaults`, because the example does more work in
those tasks than the defaults assume:

- **Interrupt / touch task stack (`CONFIG_M5STACK_TAB5_INTERRUPT_STACK_SIZE` = 8192, up from the 4 KB
  BSP default).** The interrupt task services the touch controller over
  I2C; if an I2C transaction errors, the error is logged through espp's
  `fmt`-based (colorized) logger, whose formatting path needs several KB of
  stack. With only 4 KB this can overflow and corrupt memory. If you base
  your own project on this example (or reproduce its functionality), keep
  this override in your `sdkconfig` / `sdkconfig.defaults`.

## Hardware Requirements

- M5Stack Tab5 development board
- microSD card (optional)
- NP-F550 battery (included depending on your Tab5 Kit selection)
- USB-C cable for programming and power

## How to Build and Flash

### Prerequisites

- ESP-IDF 5.5 or later with ESP32-P4 support
- Configured ESP-IDF environment

### Build Steps

Build the project and flash it to the board, then run monitor tool to view
serial output:

```
idf.py -p PORT flash monitor
```

(Replace PORT with the name of the serial port to use.)

(To exit the serial monitor, type ``Ctrl-]``.)

See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.

## Example Output

<img width="1001" height="1110" alt="CleanShot 2025-10-26 at 23 19 57" src="https://github.com/user-attachments/assets/dbb48431-6d0e-424d-a673-c12d8f10d12d" />

To create a project from this example, run:

idf.py create-project-from-example "espp/m5stack-tab5=1.1.7:example"

or download archive (~35.91 KB)