Files
sunflower-girl/README.md

5.2 KiB

ESP32-S3-LCD-1.47 Sound & Picture Player

This repository contains a responsive, dual-core firmware application developed for the Waveshare ESP32-S3-LCD-1.47 development board.

The application reads PNG images and compressed MP3 / uncompressed WAV audio files from a microSD card, renders the images on the onboard ST7789 LCD display, and plays matching soundbites over an external I2S audio DAC.


🚀 Key Features

  • WiFi Web Upload Interface: Hosts a local WiFi network and web server so you can upload pictures and audio files directly to the microSD card from your phone or computer.
  • Alpha-Numeric Media Pairing: Scans the root of the microSD card for PNG images and audio files (.wav or .mp3), sorting and matching them alphabetically (e.g., 01_image.png pairs with 01_sound.mp3).
  • Dual-Core Software Decoding: Spawns a background task pinned to Core 0 running the ESP32-audioI2S decoding loop. This prevents audio dropouts or stutters during heavy display updates on Core 1.
  • Interactive Multi-Click Gestures: You can control slide progression, audio status, and volume from the board's single physical button:
    • Single Click: Next photo/audio pair.
    • Double Click: Toggle Pause / Resume audio playback.
    • Triple Click: Previous photo/audio pair.
    • Quadruple Click: Cycle volume through levels 4, 8, 12, 16, and 20 (on a 0-21 scale).
    • Long Press (>1.5s): Toggle Autoplay slideshow mode.
  • Visual Status Indicators: Disabled on this Touch board version to prevent SCLK (GPIO 38) line contention.

🌐 WiFi Upload Interface Setup

To upload new files to your photo frame over WiFi:

  1. Connect your phone, tablet, or computer to the WiFi network hosted by the board:
    • SSID: love
    • Password: love
  2. Open your browser and navigate to: http://192.168.4.1
  3. Choose a file (.png, .mp3, or .wav) and click Upload to Frame.
  4. The file will be saved directly to the microSD card. The board will automatically re-scan the card, and the new files will be indexed and ready to play!

🔌 Hardware Connections (External I2S DAC)

Because the Waveshare ESP32-S3-Touch-LCD-1.47 does not have built-in audio amplification or a speaker, you must connect an external I2S DAC/Amplifier (e.g., MAX98357A or PCM5102) to the exposed headers.

Configure the pin connections as follows:

Board Pin (Header) ESP32-S3 GPIO Function
GPIO 1 1 I2S BCLK (Bit Clock)
GPIO 2 2 I2S LRCK / WS (Frame Clock)
GPIO 4 4 I2S DIN / SD (Data Out from ESP)
3V3 / VBUS (5V) VCC Power Supply
GND GND Ground Reference

Note: The physical BOOT button is permanently connected to GPIO 0 and acts as the input control.


📁 Repository Structure

├── sound_picture_app/         # Custom Application Source
│   ├── sound_picture_app.ino  # Main coordinator, button click gesture parser, state machine
│   ├── Display_ST7789.h/.cpp  # Waveshare display initialization & backlight control
│   ├── Display_PNG.h/.cpp     # PNGdec utility for decoding and drawing images
│   ├── SD_Card.h/.cpp         # SD_MMC mount and folder retrieval helpers
│   ├── Audio_Player.h/.cpp    # background ESP32-audioI2S player task wrapper
│   └── Web_Server.h/.cpp      # local SoftAP WiFi file upload panel
├── ESP32-S3-LCD-1.47-Demo/    # Waveshare Official Reference Demos
└── README.md                  # This file

💾 microSD Card Setup

  1. Format a microSD card to FAT32.
  2. Place your images in the root directory:
    • Extension: .png
    • Resolution: Sized to 172 x 320 pixels.
  3. Place your sound files in the root directory:
    • Extension: .mp3 or .wav
    • Format: Compressed MP3 or uncompressed PCM WAV.
  4. Ensure file names map alphabetically:
    • photo1.png <--> sound1.mp3
    • photo2.png <--> sound2.wav

🛠️ Software Setup & Flashing (Arduino IDE)

1. Board Package Installation

Make sure you have the official Espressif board package installed:

  • Go to File > Preferences > Additional Boards Manager URLs and add: https://espressif.github.io/arduino-esp32/package_esp32_index.json
  • Go to Tools > Board > Boards Manager, search for esp32 (by Espressif Systems), and install version 3.0.2 or higher.

2. Install Required Libraries

You need to install the following two libraries in the IDE via Sketch > Include Library > Manage Libraries...:

  1. PNGdec (by Larry Bank): Decoding and drawing PNGs.
  2. ESP32-audioI2S (by Wolle / schreibfaul1): Asynchronous MP3/WAV decoding.

3. Select Board Configurations

Go to the Tools menu and set the following variables:

  • Board: ESP32S3 Dev Module
  • USB CDC On Boot: Enabled (Required to see print logs over the native USB port)
  • Upload Speed: 921600
  • Flash Size: 16MB (128Mb)
  • Partition Scheme: 16MB Flash (3MB APP/9.9MB FATFS)

4. Upload

  1. Connect your board to your computer via USB.
  2. Select the corresponding COM Port under Tools > Port.
  3. Click Upload (or press Ctrl+U).