inanimate-tech/resident/m5stick
Claude Code and agent skill by inanimate-tech/resident
- community
Checking that the SKILL.md file is still in the repository.
Install
npx vskill@latest install inanimate-tech/resident/m5stickSKILL.md
M5StickC Plus2
The M5StickC Plus2 is a wrist-mountable ESP32 device with a 135×240 colour TFT, a 6-axis IMU, two physical buttons, and a piezo buzzer. Apps drive the screen as their primary output and respond to button presses + motion.
Hardware
TFT screen: ST7789V2, 135×240 pixels, landscape orientation (240 wide, 135 tall). Coordinates 0-based, origin top-left. Colours 0–255 per channel. Double-buffered: draw to an off-screen sprite, then screen.flip() to push the frame.
IMU: 6-axis (MPU6886). Body frame: X = long axis (USB toward −X), Y = short axis, Z = screen normal (positive points out of the screen toward the viewer). At rest face-up, accel() returns approximately (0, 0, +1) in g. Gyro is in degrees/second.
Buzzer: Piezo. Frequency range 100–8000 Hz, duration 10–5000 ms.
Buttons: Two physical buttons, indexed 0 and 1. Surface as recognized gestures: tap events (release under the hold threshold) and hold events (e.data.held true at the threshold, false on release), each with e.data.index. (A legacy button event still fires alongside tap.)
Lua Modules
screen.*
Hardware: ST7789V2 TFT, 240×135 landscape, double-buffered.
MUST: call screen.flip() after every draw sequence — nothing is visible until you flip. On app reset the screen is cleared to black.
imu.*
Hardware: MPU6886 6-axis.
Gyro measures rate, so readings spike during motion and return to ~0 at rest. For absolute orientation use accel() (tilt) — yaw around +Z is not observable without a magnetometer.
buzzer.*
Hardware: Piezo.
Frequency 100–8000 Hz; duration 10–5000 ms. Tone is stopped on app reset.
button.*
Hardware: 2 physical buttons, indices 0 and 1.
Best practice: handle gestures in on_event(ctx, e) rather than polling. A press is e.name == "tap" with e.data.index (0 or 1); a long press is e.name == "hold" with e.data.held true at the threshold and false on release.
Examples
Hello world:
Bouncing ball:
Spirit level:
Two-button counter with beep:
Shake detection:
Constraints
- Screen: 240×135 landscape, 0-based coords, 0–255 colour channels.
- IMU: g-force for accel, deg/sec for gyro.
temp()stubbed. - Buzzer: 100–8000 Hz, 10–5000 ms.
- Two buttons only — indices 0 and 1.
Practical Tips
- The screen is the primary output surface. Don't rely on the LED.
- Display orientation is landscape (240 wide × 135 tall). Authors who
forget this draw vertical apps that look wrong.
- Always call
screen.flip()after a draw sequence — double-buffered. - Use
e.data.index(0 or 1) to distinguish buttons inon_event. - Precompute lookup tables in
init()to avoid math in hot paths. - For shake detection, threshold against magnitude, not individual axes.
Validation stubs
Optional Lua block consumed by validate-app to provide concrete return values for getter-style functions. Without these, getter calls return nil and apps that do arithmetic on the result crash inside the validator.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingtools/agent-plugin/skills/create-app/docs/m5stick/DEVICE-SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/inanimate-tech/resident/m5stick)