esp32 — Xiao Esp32S3 Sense simulation

An interactive Xiao Esp32S3 Sense circuit simulation you can run free in your browser on Velxio, by whalemedianz.

Components

Sketch code

#include <Wire.h>
#include <SPIFFS.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// ============================================================
// BODYCAM REVISION
// XIAO ESP32-S3 Sense / ESP32-CAM Sense
// Axon Body 3-style behaviour
//
// Velxio-optimised revision
//
// Optimisations:
// - Non-blocking buzzer
// - 400 kHz I2C
// - Reduced OLED redraws
// - Recording display updates once per second
// - No redundant display transfers
// - Faster startup/transition timing
// - 1 ms cooperative loop
// - Startup BMP preserved
// - Robust double-click detection
// ============================================================


// ============================================================
// PIN DEFINITIONS
// ============================================================

#define POWER_BUTTON    D0      // GPIO1
#define EVENT_BUTTON    D1      // GPIO2

#define RGB_RED_PIN     D2      // GPIO3
#define BUZZER_PIN      D3      // GPIO4

#define SDA_PIN         D4      // GPIO5
#define SCL_PIN         D5      // GPIO6

#define RGB_GREEN_PIN   D7      // GPIO44
#define RGB_BLUE_PIN    D8      // GPIO7

#define MUTE_BUTTON     D9      // GPIO8


// ============================================================
// OLED
// ============================================================

#define SCREEN_WIDTH    128
#define SCREEN_HEIGHT   64
#define OLED_ADDR       0x3C

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  -1
);


// ============================================================
// TIMING
// ============================================================

// Development / Velxio timings

const unsigned long POWER_ON_HOLD       = 1000;
const unsigned long POWER_OFF_HOLD      = 1000;

const unsigned long EVENT_HOLD          = 1000;

// Time from FIRST CLICK RELEASE to SECOND CLICK PRESS.
const unsigned long DOUBLE_CLICK_WINDOW = 500;

const unsigned long MUTE_HOLD           = 1000;

const unsigned long STARTUP_LOGO_TIME   = 700;
const unsigned long STARTING_TO_LIVE    = 150;
const unsigned long SAVING_TO_READY     = 300;

const unsigned long STATUS_BLINK_TIME   = 500;
const unsigned long RECORD_REMINDER     = 120000;

// Timer only changes once per second.
const unsigned long DISPLAY_UPDATE      = 1000;


// ============================================================
// DEVICE STATE
// ============================================================

bool deviceOn      = false;
bool recording     = false;
bool muted         = false;
bool livestreaming = false;

bool waitingForSecondClick = false;


// ============================================================
// STATUS BAR STATE
// ============================================================

struct StatusBarState {

  uint8_t battery = 100;

  bool charging  = false;
  bool paired    = false;
  bool lightsOff = false;
  bool stealth   = false;

};

StatusBarState statusBar;


// ============================================================
// DISPLAY STATE
// ===========

More projects by whalemedianz