ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Type an ODE or PDE and watch it move as a hologram-style physical model
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Type a differential equation and watch it move. Holograph turns ODEs and PDEs into hologram-style physical models: springs, pendulums, orbits, strings, membranes and heated plates.
Live site: https://takoodachi.github.io/holograph/
y''+4y=0, u_t = u_xx) or paste LaTeX (\frac{d^2\theta}{dt^2}, \frac{\partial u}{\partial t}, \nabla^2 u).k, \omega, k_1) becomes a slider, like in Desmos.| Equation | Picture |
|---|---|
| 2nd-order ODE | mass on a spring or a pendulum |
| two angles, 2nd order | double pendulum |
| 1st-order ODE | liquid level in a tank |
| 2 unknowns | phase plane with a flowing vector field |
| 3 unknowns | 3D trajectory |
1D PDE (u_t, u_tt) | string or rod with its recent history |
| 2D PDE | wireframe membrane or plate |
| any equation | Time axis: the solution against t, computed ahead into the far future |
The Time axis view runs a second copy of the simulation ahead of the live one. Its condense slider goes from a linear window (t from 0 to 20) to all of time squeezed onto the axis, with ∞ at the end. A motion that keeps going forever, like a limit cycle or chaos, shows as a band between its extremes; one that settles shows as a flat line. ODEs plot each unknown against t; PDEs show a space-time surface u(x, t), or the middle slice for 2D problems.
In the view:
Press Space to pause and R to restart.
"Describe it" tries the built-in reader first. When the reader doesn't recognise a description, such as "a ball rolling in a bowl with a little friction", an AI model builds the system instead. Pick the AI in Settings:
| Choice | Model | Key |
|---|---|---|
| Qwen · free (default) | Qwen3 30B, @cf/qwen/qwen3-30b-a3b-fp8, through Holograph's Cloudflare Worker | none |
| Claude (Anthropic) | Claude Opus 5.5, claude-opus-5-5 | yours, from console.anthropic.com |
| GPT (OpenAI) | GPT-6 Astra, gpt-6-astra | yours, from platform.openai.com |
| Gemini (Google) | Gemini 4 Argon, gemini-4-argon | yours, from aistudio.google.com |
To use your own key, create one with your provider, give it a low monthly spend limit, pick the provider in Settings and paste the key. To get the AI's version of a description the reader already handled, click Ask … instead.
What to know:
fallbacks: "default" option). A refusal from any provider shows as a message.js/ai.js holds one entry per provider. Claude uses Anthropic's official SDK (@anthropic-ai/sdk, loaded from jsdelivr through the import map only on first use, with dangerouslyAllowBrowser: true). The others share one fetch call in the Chat Completions format: GPT directly, Gemini through its OpenAI-compatible endpoint, and Qwen through the Worker, which answers in the same shape. Another OpenAI-compatible provider is one more entry.
Every provider gets the same system prompt and structured-output JSON schema from js/prompt.js. The prompt lists exactly what js/parse.js accepts. The schema returns params and ic as lists of entries, because it can't express free-form maps, and every field is required with the optional ones nullable, because OpenAI's strict mode demands that. Qwen on Workers AI doesn't enforce a schema, so the Worker puts the schema in the prompt, and the app pulls the JSON out of the reply (skipping any reasoning or code fences) before checking it.
worker/ is a Cloudflare Worker on the free Workers plan, so it can't run up a bill: past the daily allowance, Workers AI refuses requests until midnight UTC. It holds no secret (the model is reached through the Workers AI binding), only answers requests from takoodachi.github.io and localhost:5173, and always runs Holograph's own prompt, so it can't be used as a general chatbot. A KV namespace counts each visitor's requests per day.
To deploy your own copy:
Create a free Cloudflare account.
Log in and deploy from worker/. The first deploy creates the KV namespace; put its id in wrangler.jsonc.
npx [email protected] login
npx [email protected] deploy
Put the Worker's address in PROVIDERS.qwen.url in js/ai.js, and your site's address in ORIGINS in worker/index.js.
tests/ai.test.js mocks each API and covers the validation, the retry, refusals and API errors. tests/worker.test.js runs the Worker with Workers AI and KV faked.
It's a static site with no build step. The libraries (three.js, MathLive, math.js) load from a CDN.
python -m http.server 5173
Then open http://localhost:5173.
npm install
npm test
The tests cover:
js/parse.js converts LaTeX or plain text into a classified model and compiles it to fast JavaScript. Equations are linear in their highest derivatives, so a small linear solve handles coupled systems.js/solver.js runs RK4. Each step size is set from a power-iteration estimate of the system's stiffness. PDEs use finite differences with ghost cells for the boundary conditions, and several fields share one state array.js/describe.js turns a description into equations, using a vocabulary of systems, modifiers and quantities with units.js/ai.js is the AI mode (free Qwen, or Claude, GPT or Gemini with your key) for descriptions the built-in reader doesn't recognise; js/prompt.js is what every model is told, and worker/ is the free Qwen's Cloudflare Worker.js/scene.js draws the three.js hologram stage and the physical views.js/app.js handles the editor, sliders and playback. js/presets.js holds the examples.Known limits: