Skip to content

Primary Git Repository for the Zephyr Porting to ESP32-S3-Box3

License

Notifications You must be signed in to change notification settings

notionext/zephyr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

131,851 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Zephyr RTOS Port for ESP32-S3-BOX-3 πŸš€

This repository branch provides board support and reference samples for running Zephyr RTOS on the ESP32-S3-BOX-3 platform.

The port focuses on enabling display, touch, Wi-Fi, Bluetooth, persistent storage, and LVGL-based user interfaces on the ESP32-S3-BOX-3 while keeping all changes aligned with upstream Zephyr design principles.

Branch 🌿

  • Branch name: zephyr-esp32s3-box-3
  • Base: Upstream Zephyr main

All changes are maintained on top of upstream Zephyr with minimal divergence and clear separation between board, driver, and sample code.

Hardware Overview πŸ”§

ESP32-S3-BOX-3 features:

  • πŸ–₯️ ESP32-S3 dual-core MCU
  • πŸ“Ί SPI-connected LCD panel
  • πŸ‘† Capacitive touch controller
  • πŸ“Ά Wi-Fi (802.11 b/g/n)
  • πŸ“‘ Bluetooth Low Energy (BLE)
  • πŸ’Ύ External flash with MCUboot support

Supported Features βœ…

The following functionality is enabled and validated in this port:

  • πŸ“‹ ESP32-S3-BOX-3 board definition
  • 🎨 LVGL graphics stack
  • πŸ“Ί SPI LCD display support
  • πŸ‘† Capacitive touch controller integration
  • πŸ“‘ Bluetooth Low Energy (BLE)
  • πŸ“Ά Wi-Fi station mode
  • πŸ”— BLE-based Wi-Fi provisioning
  • πŸ’Ύ NVS-backed persistent storage
  • πŸ₯Ύ MCUboot-compatible flash partitioning
  • βš™οΈ Application CPU and LP core partition layout

Board Support πŸ› οΈ

Board files are located under:

boards/espressif/esp32s3_box3/

Board documentation is available in:

boards/espressif/esp32s3_box3/README.md

Custom devicetree overlays are used by samples to enable additional features such as custom flash partitioning and NVS storage without modifying the base board devicetree.

Flash Partitioning πŸ’Ύ

Some samples use a custom flash layout provided via devicetree overlay:

  • πŸ₯Ύ MCUboot boot partition
  • πŸ”„ Dual application image slots
  • βš™οΈ App CPU and LP core partitions
  • πŸ’Ύ Dedicated NVS storage partition
  • πŸ”„ Scratch partition for image swap
  • πŸ› Coredump partition

The NVS partition is automatically mounted at /nvs using Zephyr's fstab mechanism for persistent application data.

Build Instructions πŸ”¨

Prerequisites:

  • πŸ› οΈ Zephyr SDK installed
  • 🌿 West tool initialized
  • πŸ”§ ESP32 toolchain available
  • 🐍 Python 3.x

Initialize the workspace:

west init -m https://github.com/notionext/zephyr
west update

Build a sample:

west build -b esp32s3_box3 samples/boards/espressif/wifi_ble_lvgl

Flash to device:

west flash

Monitor the output:

west espressif monitor

Usage Instructions πŸ“‹

Device Operation:

  1. Power On πŸ”Œ: Device shows "WiFi BLE Provisioning Ready" on white background

  2. Auto-Connect πŸ”„: If credentials are stored, device automatically connects to WiFi

  3. Manual Provisioning πŸ“±:

    • Connect to device via BLE (advertised as "ESP32_S3_BOX3_BLE")
    • Write to WiFi credentials characteristic (UUID: 12345678-1234-1234-1234-123456789abd)
    • Send JSON format:
    {
      "ssid": "YourWiFiSSID",
      "password": "YourWiFiPassword",
      "save_credentials": true
    }

Service UUIDs:

  • πŸ”§ Service: 12345678-1234-1234-1234-123456789abc

  • πŸ”‘ Credentials Characteristic: 12345678-1234-1234-1234-123456789abd

  • πŸ“Š Status Characteristic: 12345678-1234-1234-1234-123456789abe

    WiFi BLE LVGL Success State

Python Provisioning Script 🐍

The included provision_wifi.py script provides a complete provisioning solution:

Installation:

pip install bleak

Usage:

# Basic usage
python3 provision_wifi.py --ssid "MyNetwork" --password "MyPassword"

# Don't save credentials to device storage
python3 provision_wifi.py --ssid "MyNetwork" --password "MyPassword" --no-save

# Scan for devices only
python3 provision_wifi.py --scan-only
  1. Success State βœ…: "WiFi Connected Successfully!" appears in green with "DEVICE IP" button

    WiFi BLE LVGL Success State
  2. View IP 🌐: Touch "DEVICE IP" to see the assigned IP address

    WiFi BLE LVGL Success State
  3. Navigation ⬅️: Use "BACK" button to return to main screen

Notes on Bluetooth and Wi-Fi πŸ“‘

  • πŸ“‘ BLE is used for provisioning and control-plane communication
  • πŸ“Ά Wi-Fi operates in station mode
  • πŸ” Credentials are stored securely in NVS
  • πŸ”„ BLE and Wi-Fi can operate concurrently with LVGL UI

Status πŸ“Š

This port is intended for:

  • πŸ” Platform evaluation
  • βœ… Feature validation
  • πŸš€ Product prototyping
  • πŸ“– Reference implementation for ESP32-S3-BOX-3

Some components may still be under active development and are not yet submitted upstream.

References πŸ“Š

  • samples/boards/espressif/lcd_lvgl
  • samples/boards/espressif/lcd_lvgl_touch
  • samples/boards/espressif/wifi_ble_lvgl

License πŸ“„

This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.

About

Primary Git Repository for the Zephyr Porting to ESP32-S3-Box3

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 90.1%
  • Python 4.6%
  • CMake 2.9%
  • Linker Script 0.8%
  • Shell 0.6%
  • Assembly 0.5%
  • Other 0.5%