ESP32-S3 · AMOLED 466×466

El Radar del Dragón, en una placa ESP32The Dragon Radar, on an ESP32 board

Firmware libre que convierte la Waveshare ESP32-S3-Touch-AMOLED-1.75C en el radar del anime: pantalla redonda verde con cuadrícula, siete esferas que parpadean, flechas en el borde para las lejanas, zoom de 10 m a 10 km y el «pi-PI» que acelera cuando te acercas. Con panel web, API HTTP y MCP. Free firmware that turns the Waveshare ESP32-S3-Touch-AMOLED-1.75C into the radar from the anime: a round green screen with a grid, seven blinking balls, edge arrows for the far ones, zoom from 10 m to 10 km and the "pi-PI" beep that speeds up as you get closer. With a web panel, an HTTP API and MCP.

Probar la demoTry the demo

Para instalar desde el navegador, abre esta página en Chrome o Edge de escritorio (usa Web Serial). To install from the browser, open this page in desktop Chrome or Edge (it uses Web Serial).

7esferasballs
10 m–10 kmpor celdaper cell
4barridossweep modes
8sonidossounds

Como en la placa: toca la pantalla o BOOT para alejar, KEY2 para acercar y mantén KEY2 600 ms para apagar o encender. Desliza a los lados para cambiar de tema y mantén pulsada la pantalla para fijar el norte. El sonido arranca solo cuando lo activas. Just like the board: tap the screen or BOOT to zoom out, KEY2 to zoom in, and hold KEY2 for 600 ms to power off or on. Swipe sideways to change the theme and long-press the screen to set north. Sound only starts when you switch it on.

TemaTheme
BarridoSweep

La demo necesita los datos de shared/: abre la página publicada o sírvela con make serve. The demo needs the data in shared/: open the published page or serve it with make serve.

Panel webWeb panel

El radar en el navegador, servido por el chipThe radar in your browser, served by the chip

Abre http://dragonradar.local (o la IP) y verás el radar en vivo, dibujado con el mismo código que esta demo a partir del estado de la placa. Es un único HTML sin dependencias, comprimido dentro del firmware. Open http://dragonradar.local (or the IP) to see the radar live, drawn with the same code as this demo from the board's state. It is a single dependency-free HTML file, compressed into the firmware.

Radar

Escala y encendidoScale and power

Acercar, alejar o elegir la escala, apagar y encender con su animación, y fijar el norte en la orientación actual.Zoom in, zoom out or pick the scale, power off and on with its animation, and set north to the current orientation.

Look

Tema, barrido y volumenTheme, sweep and volume

Los tres temas, los cuatro modos de barrido, el volumen y el silencio. Se guardan en la placa y sobreviven a un reinicio.The three themes, the four sweep modes, volume and mute. They are stored on the board and survive a reboot.

Balls

Coloca las esferasPlace the balls

Una tabla con las siete esferas (estrellas, rumbo y distancia). Elige una fila y toca el radar para ponerla ahí a la escala actual, o vuelve a las de demostración.A table with the seven balls (stars, bearing and distance). Pick a row and tap the radar to drop that ball there at the current scale, or go back to the demo set.

Sounds

SonidosSounds

Un botón por sonido para oírlo en el altavoz de la placa.One button per sound to play it on the board's speaker.

Setup

Portal de configuraciónSetup portal

Sin WiFi guardada, la placa abre la red DragonRadar-XXXX y el móvil muestra el portal para elegir tu red. El panel y la API también funcionan desde ahí, sin internet.With no saved WiFi, the board opens the DragonRadar-XXXX network and your phone shows the portal to pick your network. The panel and the API work from there too, with no internet.

Dev

Sin reflashearNo reflashing

Para trabajar en el panel, abre web/index.html?host=<IP> desde el disco: habla con la placa por la red.To work on the panel, open web/index.html?host=<IP> from disk: it talks to the board over the network.

Cómo funcionaHow it works

Esferas, escalas, pitido y barridoBalls, scales, beep and sweep

Todo sale de shared/radar.json y shared/sounds.json: los mismos ficheros generan las cabeceras del firmware, alimentan el panel web y dibujan esta página. Everything comes from shared/radar.json and shared/sounds.json: the same files generate the firmware headers, feed the web panel and draw this page.

Las esferasThe balls

Cada esfera es un punto con halo que lleva al lado su número de estrellas. El mapa va con el rumbo arriba: el giroscopio QMI8658 gira las esferas y el triángulo rojo del centro eres tú. Las que quedan fuera de la vista salen como flechas en el borde, y las que caen juntas se funden en un solo punto con el número de la más cercana.Each ball is a glowing dot with its star count next to it. The map is heading-up: the QMI8658 gyro turns the balls and the red triangle in the middle is you. Balls outside the view show as arrows on the edge, and balls that land together merge into one dot carrying the number of the nearest.

Cuatro escalasFour scales

El botón de arriba aleja un nivel y del último vuelve al primero; KEY2 acerca. La cuadrícula no cambia de tamaño en pantalla: cambia lo que mide cada celda.The top button zooms out one level and wraps from the last back to the first; KEY2 zooms in. The grid keeps its size on screen: what changes is the distance each cell covers.

El pitidoThe beep

Cada pitido es un «pi-PI»: 80 ms a 2130 Hz y 60 ms una octava más arriba, con onda triangular, medido en un fragmento del anime (tono y tiempos; el audio no está en el repo). Su ritmo depende de la distancia a la esfera más cercana, en escala logarítmica, y no cambia con el zoom. Los puntos destellan con cada pitido.Each beep is a "pi-PI": 80 ms at 2130 Hz and 60 ms an octave up, as a triangle wave, measured from a clip of the anime (pitch and timing only; the audio is not in the repo). Its rate follows the distance to the nearest ball on a log scale and does not change with the zoom. The dots flash on every beep.

El barridoThe sweep

El radar del anime no tiene línea de barrido; aquí es una opción. Pruébalos en la demo:The anime's radar has no sweep line; here it is an option. Try them in the demo:

  1. Aguja (line): gira una vez cada 2.4 s con una estela y enciende cada punto al pasar.Hand (line): turns once every 2.4 s with a trail and lights each dot as it passes.
  2. Onda (ring): un anillo que crece del centro con cada pitido.Ring (ring): a ring that grows from the centre on every beep.
  3. Las dos (both) o ninguno (none), solo el parpadeo, como en la serie.Both (both) or none (none), just the blink, as in the show.

Los sonidosThe sounds

Sintetizados con los tonos medidos: el «brrr» que tiembla entre 2000 y 2200 Hz suena con cada pulsación, antes del pitido. Pulsa ▶ para oírlos aquí.Synthesised from the measured tones: the "brrr" warbling between 2000 and 2200 Hz plays on every press, before the beep. Press ▶ to hear them here.

    Controles físicosPhysical controls

    Dos botones, la pantalla táctil y el giroscopioTwo buttons, the touch screen and the gyro

    BOOT

    Clic: aleja un nivel (del de 10 km vuelve al de 10 m). Mantener: tarjeta de información con la versión, la placa, la red, la IP y la batería.Click: zoom out one level (from 10 km it wraps back to 10 m). Hold: info card with the version, board, network, IP and battery.

    KEY2

    Clic: acerca un nivel. Mantener 600 ms: apaga o enciende el radar con su animación.Click: zoom in one level. Hold 600 ms: power the radar off or on with its animation.

    Es la tecla de encendido del PMIC AXP2101: mantenerla 6 s apaga la placa entera.It is the AXP2101 PMIC's power key: holding it for 6 s switches the whole board off.

    Pantalla táctilTouch screen

    Toque: aleja. Doble toque: tarjeta de información. Deslizar a la izquierda o a la derecha: tema siguiente o anterior. Pulsación larga: fija el norte del radar donde apunta ahora.Tap: zoom out. Double tap: info card. Swipe left or right: next or previous theme. Long press: sets the radar's north to where it points now.

    Giroscopio y sonidoGyro and sound

    El QMI8658 sigue el giro de la placa y el mapa rota con él. Cada pulsación suena; el pitido espera a que termine el sonido del botón. El volumen y el silencio se cambian desde el panel, la API o la consola.The QMI8658 tracks the board's rotation and the map turns with it. Every press makes a sound; the beep waits for the button sound to finish. Volume and mute are set from the panel, the API or the console.

    Hardware soportadoSupported hardware

    Waveshare ESP32-S3-Touch-AMOLED-1.75C

    Una placa redonda con todo lo que necesita un radar: pantalla, táctil, IMU, batería y altavoz. BOARD=amoled, hostname dragonradar.local.A round board with everything a radar needs: screen, touch, IMU, battery and speaker. BOARD=amoled, hostname dragonradar.local.

    PartePartChipPara quéWhat for
    SoCESP32-S3R88 MB de PSRAM octal y 32 MB de flash; USB-C nativo8 MB octal PSRAM and 32 MB flash; native USB-C
    PantallaScreenCO5300AMOLED redonda de 1.75", 466×466, por QSPI1.75" round AMOLED, 466×466, over QSPI
    TáctilTouchCST9217Toques, doble toque, deslizar y pulsación largaTaps, double taps, swipes and long presses
    IMUQMI8658Rumbo del mapa (giroscopio)Map heading (gyro)
    PMICAXP2101Batería LiPo, carga y la tecla KEY2LiPo battery, charging and the KEY2 key
    AudioAudioES8311 + NS4150BCódec y amplificador del altavoz: pitidos y efectosCodec and speaker amplifier: beeps and effects
    MicrófonosMicrophonesES7210Dos micrófonos; el firmware los usa para medir su propio altavozTwo microphones; the firmware uses them to measure its own speaker

    InstalarInstall

    Desde el navegador o con arduino-cliFrom the browser or with arduino-cli

    Instalador webWeb installer

    1. Conecta la placa por USB-C y abre esta página en Chrome o Edge de escritorio.Plug the board in over USB-C and open this page in desktop Chrome or Edge.
    2. Pulsa Instalar en tu placa y elige el puerto.Press Install on your board and pick the port.
    3. Al reiniciar, conéctate a la red DragonRadar-XXXX y elige tu WiFi en el portal.After the reboot, join the DragonRadar-XXXX network and pick your WiFi in the portal.
    4. Abre http://dragonradar.local.Open http://dragonradar.local.

    Compilar tú mismoBuild it yourself

    Necesitas arduino-cli, make y Node 18 o superior.You need arduino-cli, make and Node 18 or newer.

    git clone https://github.com/Adrianmtzb/dragon-radar
    cd dragon-radar
    make deps
    make flash PORT=/dev/cu.usbmodemXXXX
    make monitor   # 'help'

    Por dentroInternals

    Arquitectura, API, MCP y cómo contribuirArchitecture, API, MCP and contributing

    Firmware

    Sketch de Arduino (core esp32 3.2.0). El radar se dibuja en un canvas de 466×466 en PSRAM con Arduino_GFX y se vuelca entero al CO5300.Arduino sketch (esp32 core 3.2.0). The radar is drawn on a 466×466 canvas in PSRAM with Arduino_GFX and flushed whole to the CO5300.

    Fuente únicaSingle source

    shared/*.json genera radar_assets.h y sounds.h. tools/preview/renderer.js dibuja la vista previa, el panel y esta demo. make check falla si algo se desincroniza.shared/*.json generates radar_assets.h and sounds.h. tools/preview/renderer.js draws the preview, the panel and this demo. make check fails if anything drifts.

    Fan, no oficialFan-made, unofficial

    Los colores y medidas salen de fotogramas medidos y de las wikis; los gráficos se dibujan con código y los sonidos se sintetizan. Detalles y fuentes en docs/design.md.Colours and sizes come from measured frames and the wikis; the graphics are drawn in code and the sounds are synthesised. Details and sources in docs/design.md.

    RutaRouteQué haceWhat it does
    GET /api/stateEncendido, escala, rumbo, tema, barrido, volumen, esferas, la más cercana y el intervalo del pitidoPower, scale, heading, theme, sweep, volume, balls, the nearest one and the beep interval
    POST /api/radar{zoom, theme, sweep, volume, muted, power, resetHeading}
    POST /api/ballsHasta 7 esferas {stars, bearingDeg, distanceM}, o {demo: true}Up to 7 balls {stars, bearingDeg, distanceM}, or {demo: true}
    POST /api/sfxToca un sonido: {name}Plays a sound: {name}
    GET /api/infoPlaca, firmware, red y límitesBoard, firmware, network and limits

    MCP

    Claude u otro cliente MCP maneja el radar con get_state, set_radar, set_balls (rumbo en grados o como «NE», distancia como «1.5 km») y play_sfx. Instala las dependencias con make mcp-install.Claude or any MCP client drives the radar with get_state, set_radar, set_balls (bearing in degrees or as "NE", distance as "1.5 km") and play_sfx. Install the dependencies with make mcp-install.

    { "mcpServers": { "dragon-radar": {
      "command": "node", "args": ["mcp/server.mjs"],
      "env": { "DRAGONRADAR_HOSTS": "dragonradar.local" } } } }

    ContribuirContributing

    Código, comentarios y commits en inglés; documentos en español. Antes de un PR: make check y make build. Para cambios visuales, adjunta una captura real con make shot. Un tema, un barrido o un sonido nuevo va en shared/, en el firmware, en el MCP y en esta página; make check compara las listas.Code, comments and commits in English; documents in Spanish. Before a PR: make check and make build. For visual changes, attach a real capture from make shot. A new theme, sweep mode or sound goes in shared/, the firmware, the MCP and this page; make check compares the lists.

    make check
    make build
    make shot PORT=/dev/cu.usbmodemXXXX

    Quién hay detrásWho is behind this

    Hecho por adrianmb. Si te gusta Dragon Radar, hay más.Made by adrianmb. If you like Dragon Radar, there is more.

    Firmware para placas baratas, herramientas pequeñas y proyectos de software libre. Todo se publica primero en adrianmb.dev. Firmware for cheap boards, small tools and free-software projects. Everything is published first on adrianmb.dev.

    ¿Te fue útil? Si quieres, invítame un transistor para seguir con estos proyectos.1 USDT con Orbi Pay · escanea o tocaFound it useful? If you like, buy me a transistor to keep these projects going.1 USDT via Orbi Pay · scan or tap