Supported Targets ESP32 ESP32-C2 ESP32-C3 ESP32-C6 ESP32-H2 ESP32-P4 ESP32-S2 ESP32-S3

OpenIris-ESPIDF

Firmware and tools for OpenIris on ESP32/ESP32S3 — WiFi, UVC streaming, and a handy Python setup CLI.

Short, friendly, and practical.


Whats inside

  • ESPIDF firmware (C/C++) with modules for Camera, WiFi, UVC, REST/Serial commands, and more
  • Python tools to make setup easy over USB serial:
    • tools/switchBoardType.py — choose a board profile (loads the right sdkconfig)
    • tools/openiris_setup.py — interactive CLI for WiFi, MDNS/Name, Mode, LED PWM, Logs, and a Settings Summary
    • tools/wifi_scanner.py — optional WiFi scanner

Prerequisites

  • ESPIDF installed and available in your terminal (idf.py works)
  • Python 3.10+ with pip
  • USB cable to your board
  • Optional: install Python dependencies for the tools

Windows (cmd):

python -m pip install -r tools\requirements.txt

macOS/Linux (bash):

python3 -m pip install -r tools/requirements.txt

Note for Windows: If emojis dont render nicely, its only cosmetic — everything still works.


First-time setup on Windows (VS Code + ESPIDF extension)

If youre starting fresh on Windows, this workflow is smooth and reliable:

  1. Install tooling
  1. Get the source code
  • Create a folder where you want the repo (e.g., D:\OpenIris-ESPIDF\). In File Explorer, rightclick the folder and choose “Open in Terminal”.
  • Clone and open in VS Code:
git clone https://github.com/lorow/OpenIris-ESPIDF.git
cd OpenIris-ESPIDF
code .
  1. Install the ESPIDF VS Code extension
  1. Set the default terminal profile to Command Prompt
  • Press Ctrl+Shift+P → search “Terminal: Select Default Profile” → choose “Command Prompt”.
  • Restart VS Code from its normal shortcut (not from Git Bash). This avoids running ESPIDF in the wrong shell.
  1. Configure ESPIDF in the extension
  • On first launch, the extension may prompt to install ESPIDF and tools — follow the steps. It can take a while.
  • If you see the extensions home page instead, click “Configure extension”, pick “EXPRESS”, choose “GitHub” as the server and version “v5.3.3”.
  • Then open the ESPIDF Explorer tab and click “Open ESPIDF Terminal”. Well use that for builds.
  1. Default board profile and switching
  • The project ships with multiple board profiles; one default may target internal “Project Babble” boards.
  • If you have a Seeed XIAO ESP32S3 (or another board), switch the profile with the helper script:
python .\tools\switchBoardType.py --board xiao-esp32s3 --diff
  • You can rerun this anytime to switch boards; --diff shows the changes.

After this, youre ready for the Quick start below.


Quick start

1) Pick your board (loads the default configuration)

Windows (cmd):

python .\tools\switchBoardType.py --board xiao-esp32s3 --diff

macOS/Linux (bash):

python3 ./tools/switchBoardType.py --board xiao-esp32s3 --diff
  • Set --board to your target board
  • --diff shows what changed in the config

2) Build & flash

  • Set the target (e.g., ESP32S3):
idf.py set-target esp32s3
  • Build, flash, and open the serial monitor:
idf.py -p COM15 flash monitor

Replace COM15 with your port (Windows: COM…, Linux: /dev/ttyUSB…, macOS: /dev/cu.usbmodem…). Exit the monitor with Ctrl+].

Configure the device conveniently over USB serial.

Windows (cmd):

python .\tools\openiris_setup.py --port COM15

macOS/Linux (bash):

python3 ./tools/openiris_setup.py --port /dev/ttyUSB0

What the CLI can do:

  • WiFi menu: automatic (scan → pick → password → connect → wait for IP) or manual (scan, show, configure, connect, status)
  • Set MDNS/Device name (also used for the UVC device name)
  • Switch mode (WiFi / UVC / Auto)
  • Adjust LED PWM
  • Show a Settings Summary (MAC, WiFi status, mode, PWM, …)
  • View logs

Tip: On start, the CLI keeps the device in a setup state so replies are stable.


Serial number & MAC

  • Internally, the serial number is derived from the WiFi MAC address.
  • The CLI displays the MAC by default (clearer); its the value used as the serial number.
  • The UVC device name is based on the MDNS hostname.

Common workflows

  • Fast WiFi setup: in the CLI, go to “WiFi settings” → “Automatic setup”, then check “status”.
  • Change name/MDNS: set the device name in the CLI, then replug USB — UVC will show the new name.
  • Adjust brightness/LED: set LED PWM in the CLI.
  • Quick health check: run “Get settings summary” after flashing to verify the device state.

Project layout (short)

  • main/ — entry point
  • components/ — modules (Camera, WiFi, UVC, CommandManager, …)
  • tools/ — Python helper tools (board switch, setup CLI, scanner)

If you want to dig deeper: commands are mapped via the CommandManager under components/CommandManager/....


Troubleshooting

  • No device/port found?
    • Pass --port explicitly (e.g., --port COM15).
    • Right after reset, the device emits heartbeats for a short time; the CLI finds it fastest during that window.
  • UVC doesnt appear on the host?
    • Switch mode to UVC and replug USB. On Windows the first driver init can take a moment.
  • WiFi wont connect?
    • Check password/channel. Use the automatic setup in the CLI and then inspect the status.
  • ESPIDF not detected?
    • Ensure the ESPIDF environment is active in the terminal (IDF Command Prompt or the extensions ESPIDF Terminal; alternatively source export.ps1/export.sh).
  • Missing Python modules?
    • Run pip install -r tools/requirements.txt.

Have fun with OpenIris! Feedback, issues, and PRs are welcome.

Description
No description provided
Readme 1 MiB
Languages
C++ 61.2%
C 35.1%
Python 3.4%
CMake 0.3%