Tutorial 10 of 10

Waveshare LCD 1.47B

Draw on the exact B-version display and use its onboard pixel.

Difficulty
Beginner hardware
Time
25 min
Review baseline
App 0.2.0 beta · firmware 0.6.0 · PBLE/1

Prerequisites

  • An exact Waveshare ESP32-S3-LCD-1.47B provisioned with its exact profile

Outcomes

  • Use the frozen display runtime and fixed board wiring
  • Run bounded display examples for the exact B version
  • Control the exact board's GPIO38 onboard pixel separately

Release-aware guidance

Compatibility

The review baseline above is not a promise about the installer currently being served. Confirm the active version, exact profile, and enabled action on the current firmware and flash page before provisioning or changing hardware.

Qualified firmwaredescribes firmware evidence. The table below describes this lesson's scope; it does not turn designed compatibility into hardware validation.

Lesson scope for the five firmware profiles
Firmware profileLesson scope
Classic ESP32 (4 MiB)esp32-4mbNot applicable
ESP32-S3 N16R8 · lean genericesp32-s3-n16r8Not applicable
Waveshare ESP32-S3-LCD-1.47Bwaveshare-esp32-s3-lcd-147bExact board only
ESP32-C3 (4 MiB)esp32-c3-4mbNot applicable
Raspberry Pi Pico 2 Wrpi-pico2-wNot applicable

This is an exact-board-only lesson. The lean ESP32-S3 N16R8 image does not include the display runtime, companion, fixed carrier wiring, or onboard-pixel claim.

Before you begin

Remove external wiring, complete Hardware safety, and inspect the exact board label and schematic. The non-B LCD-1.47 and other ESP32-S3 carriers use different wiring; a shared MCU family does not make them compatible with this lesson.

Actual Waveshare ESP32-S3-LCD-1.47B displaying the PyBLE v0.5.0 boot splash and app QRReal hardware
Actual board · PyBLE firmware v0.5.0Opt-in boot splash and app QR on the B-version 172 × 320 display.

Exact immutable sources

These four entries are development-only and not HIL-validated. Their immutable source remains in the examples repository.

Follow in order

Tutorial steps

  1. Verify the complete B-version identity

    Read the physical product marking and confirm the exact Waveshare ESP32-S3-LCD-1.47B B-version with 16 MiB flash and 8 MiB Octal PSRAM. Confirm your own installer record names waveshare-esp32-s3-lcd-147b, then verify board ID, agent firmware, chip, and MicroPython are consistent. DeviceInfo does not report the provisioning profile, and ESP32-S3 identity cannot distinguish this exact carrier from the lean generic S3 target.

    Stop if: the label omits the B suffix, the memory topology or installer record differs, or any reported identity field is inconsistent with the recorded installation.

  2. Confirm the exact runtime before touching display pins

    The exact image bundles pyble_st7789 and the named pyble_waveshare_lcd147b companion. The example checks the companion before configuring GPIO. An import failure is an identity or firmware problem, not a reason to paste the modules onto another image.

    Expected: the exact profile exposes both modules before the reviewed example performs any display setup.

  3. Review the fixed display wiring

    The built-in panel uses fixed display wiring: SPI1 at 40 MHz with SCLK GPIO40, MOSI GPIO45, CS GPIO42, D/C GPIO41, reset GPIO39, and active-high backlight GPIO46. Its visible ST7789V3 surface is 172 × 320 with X offset 34. Do not edit these GPIO values or connect external hardware to them.

    Stop if: your schematic, exact board label, or selected firmware disagrees with any fixed role.

  4. Import and inspect Waveshare LCD Hello

    Pin the examples repository to the reviewed commit, browse the exact Waveshare LCD Hello folder, and import its Python file into a disposable child directory. Read the exact-board guard, fixed setup, hold-time bound, draw function, and cleanup before Run.

    Expected: the imported file remains closed until you open it and the review shows a finite three-second frame with backlight-off cleanup.

  5. Run one bounded display frame

    Verify identity again, choose Run explicitly, and watch both display and Console. The backlight should turn on only after the frame is ready. At completion or Stop, the example turns the backlight off and deinitializes the display.

    Expected: a bounded PyBLE hello frame appears on the exact panel, then the backlight turns off and display resources are released.

  6. Change one safe visual value

    Try the documented hold-time change or alter one word or color inside the draw function. Do not change fixed GPIO, geometry, offset, SPI mode, or cleanup. Save and Run explicitly, then confirm the screen finishes dark.

    Stop if: the edit changes fixed board setup, removes duration validation, retains the framebuffer, or leaves the backlight on.

  7. Treat the onboard pixel as a separate exact surface

    The board's onboard WS2812-compatible pixel uses GPIO38; the display runtime does not initialize it. Review the Onboard Pixel example, verify its exact-board confirmation remains required, keep each channel dim and its sequence finite, then ensure cleanup writes off and leaves GPIO38 low.

    Expected: the onboard pixel shows only the bounded dim sequence and finishes off without changing display wiring.

Need recovery help?

Stop at the current step, record the exact profile, board identity, app and firmware versions, and the first useful error. Then use the PyBLE support and recovery guide.