The init() badge

A little badge.
A lot to build on.

Everyone at init() takes home an M5Stack StopWatch: a tiny ESP32 computer with a round screen, two buttons, and a battery. Here’s what’s inside, what to build on it, and how to sign it in with AuthKit.

Ø52.015.5FrontBottom12345678
  1. 1

    KEY A

    Yellow button, upper left

  2. 2

    KEY B

    Blue button, upper right

  3. 3

    Display

    1.75″ round AMOLED touchscreen

  4. 4

    PORT.A

    Grove port for plug-in sensors and modules

  5. 5

    USB-C

    Charging, and flashing new code

  6. 6

    Lanyard slots

    Wear it with the lanyard at the bottom

  7. 7

    PWR

    Press to wake or reset, double-press for off

  8. 8

    Magnets

    Four in the back plate

Title

init() badge

Part
M5Stack StopWatch
SKU
C152
Issued
Oct 7, 2026
Sheet
1 of 1

Specifications

Datasheet
Processor

ESP32-S3

Dual-core at 240 MHz

Memory

16 MB flash

Plus 8 MB of PSRAM

Display

1.75″ AMOLED

466 × 466, round, with touch

Input

Two buttons

Plus touch and a vibration motor

Wireless

Wi-Fi and Bluetooth

And ESP-NOW, badge to badge

Sensors

Motion

A 6-axis IMU and a real-time clock

Audio

Mic and speaker

Record and play back sound

Power

450 mAh

Charges over USB-C

01Blueprints

Things to build

Step-by-step guides written for this exact board. Each one ends with a prompt you can hand to your coding agent.

Featured · Identity

Sign in on the badge with AuthKit

No keyboard, no problem. The badge shows a QR code, you approve on your phone, and it’s signed in as you. It’s the same flow AuthKit uses to sign in command-line tools.

How sign-in works

AuthKit device authorization, from the badge’s point of view
  1. Badge to WorkOS

    01Ask for a sign-in code

  2. WorkOS to Badge

    02A code, and a link for the QRgood for 5 min

  3. Badge to Phone

    03Scan the QRRRGQ-BJVS

  4. Phone to WorkOS

    04Approve in AuthKit

  5. WorkOS to Badge

    05Signed inthe badge checks every 5 s

  1. Sign in with AuthKitShow a QR, approve on your phone, and the badge knows who you are.
  2. Stay signed inKeep the session through reboots, and sign out when you’re done.
  3. Connect accounts with PipesLink accounts like GitHub and put your own data on the badge.

02Toolchain

From zero to init() on screen

Arduino and M5Stack’s libraries get you from nothing to your first sketch in three steps.

  1. 01

    Add the board package

    In Arduino IDE, add M5Stack’s package index under Additional Boards Manager URLs, install M5Stack 3.3.7 or newer, and select M5StopWatch. Keep its default partition scheme so the init() firmware can go back on later.

    https://static-cdn.m5stack.com/resource/arduino/package_m5stack_index.json
  2. 02

    Install the libraries

    Install M5Unified 0.2.15+ and M5GFX 0.2.21+ with their dependencies. They own the display, buttons, power, and sensors.

  3. 03

    Enter download mode

    Connect a USB-C data cable, hold PWR for about two seconds until the green LED lights, then release and pick the port.

hello_badge.ino
#include <M5Unified.h>void show(const char* text) {  auto& d = M5.Display;  d.fillScreen(TFT_BLACK);  d.drawString(text, d.width() / 2, d.height() / 2);}void setup() {  auto cfg = M5.config();  M5.begin(cfg);  M5.Display.setTextDatum(middle_center);  M5.Display.setTextFont(&fonts::FreeMonoBold12pt7b);  show("init()");}void loop() {  M5.update();  // Poll buttons every pass; don't block here.  if (M5.BtnA.wasPressed()) {    show("KEY A");    M5.Power.setVibration(160);    delay(40);    M5.Power.setVibration(0);  }  if (M5.BtnB.wasPressed()) {    show("KEY B");  }}

03Pinout

Wiring it up

PORT.A takes Grove modules as-is. The header on the back has ten more pins for everything else.

Header on the back
13V33G43Shared with USB5G44Shared with USB7G99G0Boot mode11GND13NC
2G34G46G58G610G712G814BAT5 V in on v1.0
  • 3G43Shared with USB
  • 5G44Shared with USB
  • 9G0Boot mode
  • 14BAT5 V in on v1.0
  • Power
  • GPIO
  • Ground
  • No connect
  • Check revision

On v1.0 badges, pin 14 is 5 V in, even where the sticker says BAT, so never connect a battery there. It’s the battery pin only on v1.0.1, marked *BAT. Revision notes

PORT.A, Grove
  • GNDGroundBlack
  • 5VPower outRed
  • G10SDAYellow
  • G11SCLWhite
In code
M5.Ex_I2C
Power the port
M5.Power.setExtOutput(true)

Every other pin, including the internal I²C bus, is in M5Stack’s pin map.

04Agents

Give your agent the datasheet

SKILL.md packs the board, verified library versions, and the gotchas into one file your coding agent reads before it writes a line.

m5stack-stopwatch/SKILL.mdMarkdown

---

name: m5stack-stopwatch

description: Build and troubleshoot firmware for the M5Stack StopWatch C152 ESP32-S3 dev kit distributed at WorkOS init().

---

# M5Stack StopWatch field guide

  • ## Start with the project
  • ### Arduino setup
  • ## Hardware essentials
  • ### Interaction and peripherals
  • ### Wiring and power
  • ## Flashing and recovery
  • ## Choose a reference for the task
Download SKILL.mdRead it

Save it as m5stack-stopwatch/SKILL.md in your agent’s skills folder.

Start with a prompt

Read the StopWatch skill at https://workos.com/init/badge/SKILL.md. I’m building for the M5Stack StopWatch (C152) from WorkOS init(). Help me make a simple timer using its round screen and two buttons.

Index
llms.txt indexes this guide, the installer, and every primary source.
Build prompts
Each guide under Things to build ends with a build prompt written for this board.

Get yours at init()

October 7, 2026 · SFJAZZ Center