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: