ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Plan LEGO 51515 and EV3 31313 robot builds, rehearse them in a 2D simulator and export Pybricks code, up to behaviours picked by Jev
Translation pending
EducationJavaScript · CSSGitHub @energon-a-secasOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Plan LEGO 51515 and EV3 31313 robot builds, rehearse them in a 2D simulator and export Pybricks code
Translation pending
Loading the full README.
Read the full README ↗Plan LEGO 51515 and EV3 31313 robot builds, rehearse them in a 2D simulator and export Pybricks code, up to behaviours picked by Jev
Botbench is a workbench for the two LEGO robot kits most people still have in a cupboard: Robot Inventor (51515) and EV3 Home Edition (31313). Tick the boxes you own, plug parts into a hub's ports, and it tells you what that build can do, rehearses it in a top-down simulator, writes the Pybricks MicroPython to run it, and then connects to the real Inventor Hub over Web Bluetooth so you can watch it sense, drive it by hand and switch its behaviour from the page. The top of the ladder adds a decision layer: a laptop bridge asks TypeSafe's Jev which behaviour fits a goal written in plain words, while the motors stay under the hub's own control loops.
Live: botbench.neorgon.com
bridge.py (bleak over Bluetooth LE, HTTPS to Jev, key kept on the laptop)| Layer | Runs on | Rate | Does |
|---|---|---|---|
| Control loops | the hub | ~100 Hz | line following, avoiding, stopping |
| Facts | the hub | 2 Hz | turns readings into categories: front=blocked;floor=line edge;mode=explore |
| Link tab | this page, Chromium | 2 Hz | the same facts over Web Bluetooth; teleop and mode bytes back; the stand-in decider, never Jev |
| Bridge | laptop or Raspberry Pi | 2 Hz | reads facts over BLE, holds the API key |
| Jev | TypeSafe API | per call | one Choice question picks the mode, one Noul asks if the goal is met |
| Gate | the bridge | per call | switches only above a confidence threshold, sends one byte back |
Two things the simulator taught the design, both now in the exported hub code: numbers are turned into categories on the hub because comparing numbers is on Jev's documented weak-spot list, and a crossed line is latched between reports because a 22 mm line passes under the sensor in a tenth of a second.
The browser never calls Jev: there is no CORS story and a key must not ship in a static page. The simulator's decider is a hand-weighted local stand-in that imitates the answer's shape, labelled as such.
The Link tab speaks the Pybricks BLE profile directly (service c5f50001-…, the command/event
characteristic, WRITE_STDIN 0x06 out, WRITE_STDOUT 0x01 in, START_USER_PROGRAM 0x01), which is the
same channel Pybricks' own "hub to PC" tutorial uses. The program still gets onto the hub through Pybricks
Code, because compiling MicroPython in the browser is a build this site does not carry; an experimental
button pastes the source into the hub's REPL instead, paced on the echo, and is marked as untried on
hardware. Web Bluetooth exists in Chrome and Edge only, over https or localhost.
The virtual hub is the simulator attached to the same link: it prints the same facts line and takes the same bytes, so the tab, the decider and the teleop pad can be tried before a hub is in the room.
ES modules require an HTTP server (not file://):
make serve
Tests over the pure modules (build, brain, export, the link protocol):
node --test test/*.test.mjs
botbench-site/
├── index.html # Shell, CSP, header and footer kit contracts, the five panels
├── css/style.css # Template base plus the workbench layer
├── js/
│ ├── app.js # Entry point
│ ├── catalog.js # Hubs, devices, kits, chassis types, firmware, extra hardware
│ ├── build.js # Port validation, capabilities, combination matrix
│ ├── brain.js # Rule runner, modes, facts, the Jev request, the local stand-in
│ ├── sim.js # Arenas, kinematics, sensor models (no drawing)
│ ├── simview.js # Canvas, clock, brain-in-the-loop
│ ├── export.js # Pybricks programs (rules, modes with teleop) and the Jev bridge
│ ├── link.js # Pybricks BLE profile, facts line, link over a transport; BLE and virtual transports
│ ├── linkpanel.js # The Link tab
│ ├── projects.js # The project ladder
│ ├── models.js # Published models and bigger ideas, with sources
│ ├── models-panel.js # The Models and ideas tab
│ ├── state.js # Workbench state, validated persistence
│ ├── render.js # Build, projects, paths, export panels
│ ├── simpanel.js # Simulator controls, readout, rule editor
│ ├── events.js # All listeners
│ └── neorgon-*.js # Vendored kits (header, footer, beacon, dom, persist)
├── test/ # node --test over the pure modules
└── docs/architecture.mmd
LEGO, MINDSTORMS and Robot Inventor are trademarks of the LEGO Group, which does not sponsor or endorse this project.