PAWS — Guía de instalación, armado y calibración

PAWS — Guía de instalación, armado y calibración

Última actualización: 11 de agosto de 2026

This page is also available in English.


Qué es esto

PAWS es un robot educativo controlado por Bluetooth desde la app Android PAWS. Nosotros proveemos el firmware ya compilado (listo para flashear) para la placa ESP32.

Una vez flasheado, el ESP32 se anuncia por Bluetooth como PAWS-ESP32 y ya puedes emparejarlo y controlarlo desde la app.

Placa soportada: cualquier módulo genérico esp32dev (ESP32-WROOM-32 y compatibles), 4 MB de flash o más.


Descargar el firmware

⬇ Descargar paws-esp32-firmware.zip

Un solo archivo .zip que contiene:

Archivo (dentro del .zip) Offset de flasheo Descripción
paws-esp32.bin 0x10000 Firmware de PAWS — el único que normalmente necesitas
bootloader.bin 0x1000 Bootloader de segunda etapa (solo si el flasheo simple falla)
partitions.bin 0x8000 Tabla de particiones (solo si el flasheo simple falla)
boot_app0.bin 0xe000 Selector de partición OTA (solo si el flasheo simple falla)

Descomprime el .zip antes de flashear.

En la mayoría de los casos solo necesitas paws-esp32.bin. Los otros tres archivos son un respaldo, para el caso en que el flasheo simple no funcione.


Instalación — ESPHome Web (único método soportado)

Todo ocurre en el navegador, sin instalar nada. Necesitas Chrome o Edge en una computadora (WebSerial no funciona en Firefox, Safari, ni en celulares).

  1. Conecta el ESP32 a tu computadora por USB.
  2. Abre https://web.esphome.io/ en Chrome o Edge.
  3. Haz clic en CONNECT y selecciona el puerto serial del ESP32 en el diálogo del navegador.
  4. Haz clic en INSTALL y elige el archivo paws-esp32.bin.
  5. Espera a que termine la instalación (aparecerá una barra de progreso).
  6. Presiona el botón RESET (o EN) del ESP32 al finalizar.

Con esto ya deberías ver PAWS-ESP32 por Bluetooth.

Si el flasheo simple falla

Si después de flashear solo paws-esp32.bin la placa no arranca, se reinicia en bucle, o no aparece por Bluetooth, tu placa probablemente no trae un bootloader/tabla de particiones válidos. En ese caso repite el proceso en web.esphome.io pero cargando los 4 archivos en sus offsets exactos:

  • 0x1000 → bootloader.bin
  • 0x8000 → partitions.bin
  • 0xe000 → boot_app0.bin
  • 0x10000 → paws-esp32.bin

Luego presiona RESET y vuelve a verificar.

Si el navegador no detecta el puerto, revisa que tengas instalado el driver USB-a-serial de tu placa (CP2102 o CH340, según el fabricante) — ver drivers de puerto serie más abajo.

Si se queda en Connecting... o falla la conexión, mantén presionado el botón BOOT (a veces marcado IO0) de la placa mientras inicia el flasheo, y suéltalo apenas empiece a escribir.


Driver USB-serial (si tu placa no aparece)

La mayoría de placas ESP32 usan uno de estos dos chips USB-a-serial. Si tu sistema operativo no reconoce el puerto al conectar la placa, instala el driver correspondiente:

  • CP210x (Silicon Labs) — descargar driver
  • CH340 / CH341 (WCH) — búscalo como “CH340 driver” para tu sistema operativo

En Linux, generalmente no necesitas instalar nada adicional: el driver ya está en el kernel.


Armar el robot (ESP32 + L298N + 2 motores)

La forma más sencilla de un PAWS es un chasis de dos ruedas con:

  • Una placa ESP32 (esp32dev).
  • Un driver de motores L298N.
  • Dos motores DC (los típicos amarillos con caja reductora, 3–6 V).
  • Una batería para los motores: 6–12 V. Un portapilas de 6 × AA (9 V) o un pack de 2 celdas Li-ion 18650 (7,4 V) funcionan bien.
  • Una rueda loca (rueda boba) delante o detrás, para apoyar el chasis.

Regla de oro: todas las tierras — GND del ESP32, GND del L298N y el negativo de la batería — deben estar unidas. Sin GND común nada funciona de forma fiable, y es la causa número uno de robots que “a veces sí, a veces no”.

Cableado ESP32 → L298N

Estos son los pines por defecto que trae el firmware. Si los respetas, no tienes que configurar nada en la app.

Señal L298N Motor Pin del ESP32
ENA A (izquierdo) GPIO 25
IN1 A (izquierdo) GPIO 26
IN2 A (izquierdo) GPIO 27
ENB B (derecho) GPIO 4
IN3 B (derecho) GPIO 16
IN4 B (derecho) GPIO 17
  • Quita los jumpers de ENA y ENB del L298N. Si los dejas puestos, los motores solo van a máxima velocidad y la regulación de velocidad de la app no hace nada.
  • Motor A va a las salidas OUT1/OUT2 del L298N; Motor B a OUT3/OUT4. Cada motor son dos cables, sin polaridad crítica: si uno gira al revés, basta con invertir sus dos cables (o cambiar el signo en la calibración, más abajo).

Si prefieres otro cableado, puedes cambiar los pines desde la app en Ajustes (se guardan en el robot y se aplican al reiniciarlo) — ver Usar la app: pines y calibración.

Alimentación

Esta es la parte donde más fácil se rompe algo. Dos reglas:

  1. Los motores nunca se alimentan desde el ESP32. Van siempre desde la batería, a través del L298N.
  2. La batería de motores va al L298N, no a la placa ESP32.

Conexiones de potencia:

Desde Hacia
+ de la batería (6–12 V) Borne +12V (o VCC) del L298N
− de la batería Borne GND del L298N
GND del L298N GND del ESP32

Para alimentar el ESP32 tienes dos opciones:

  • Lo más simple y seguro (recomendado para empezar): aliméntalo aparte por su puerto USB (un power bank pequeño sirve). El L298N solo mueve motores.
  • Desde el L298N: con el jumper de 5 V puesto y una batería de 7–12 V, el L298N entrega 5 V por su borne +5V. Lleva ese +5V al pin VIN del ESP32 (no al 3V3). Con menos de 7 V el regulador no da los 5 V estables, y con más de 12 V se calienta de más.

No conectes nunca los 5 V del L298N al pin 3V3 del ESP32: lo dañas.

Si al arrancar los motores el ESP32 se reinicia solo, la batería no da suficiente corriente o falta GND común. Prueba primero con el ESP32 alimentado por USB, aparte.

Orden de armado

  1. Monta los dos motores y la rueda loca en el chasis.
  2. Cablea los seis pines del ESP32 al L298N según la tabla, y las tierras.
  3. Conecta los motores a OUT1/OUT2 y OUT3/OUT4.
  4. Conecta la batería al L298N (déjala apagada o desconectada hasta el final).
  5. Flashea el firmware siguiendo los pasos de arriba.
  6. Enciende: primero el ESP32, luego la batería de motores.
  7. Empareja PAWS-ESP32 por Bluetooth y calibra desde la app.

Prueba el robot con las ruedas en el aire la primera vez. Si un motor gira al revés, lo corriges invirtiendo sus cables o cambiando el signo de la velocidad en las Variables de la app.


Verificar que funcionó

  1. Desde tu celular, busca dispositivos Bluetooth cercanos: debe aparecer PAWS-ESP32. Empareja y abre la app PAWS para continuar.
  2. Opcionalmente, en web.esphome.io puedes hacer clic en LOGS después de conectar la placa para ver el arranque del firmware.
  3. Es normal ver un mensaje de HEARTBEAT LOST -> STOP justo después de arrancar — desaparece en cuanto la app se conecta.

Para el cableado de motores y otros periféricos, consulta la guía de conexión que se muestra dentro de la app.


Usar la app: pines y calibración

La app PAWS tiene dos ajustes distintos, y conviene no confundirlos:

Ajuste Dónde se edita Dónde se guarda Cuándo se aplica
Pines (GPIO) de cada periférico Menú → Ajustes En el robot (NVS del ESP32) Solo después de Reiniciar el robot
Variables de movimiento (calibración) Hat Variables del editor En el celular Al instante, en la siguiente ejecución

1. Configurar los pines de los motores

Los pines viven en el robot, no en la app. Al conectarte, la app le pregunta al ESP32 qué periféricos tiene y con qué GPIO; el estado se muestra en Ajustes:

  • Todavía no se le han pedido al robot — aún no ha respondido; usa Volver a preguntar al robot.
  • Los pines mostrados son los que el robot usa ahora — todo en orden.
  • Hay cambios sin enviar al robot — editaste, falta guardar.
  • Guardado. Reinicia el robot para que se apliquen. — pulsa Reiniciar.

Cada periférico aparece con una etiqueta neutra tipo 0x21 · 0 (0x21 es la clase motor, y el número es el índice: 0x21 · 0 es el motor A y 0x21 · 1 el motor B). Los GPIO válidos van de 0 a 39; un pin fuera de rango o no utilizable como salida hace que el robot responda con error. La app avisa además cuando eliges un pin delicado (pines de strapping, que se leen al arrancar, o los del puerto serie, que te dejan sin consola de depuración).

Un pin sin configurar se muestra como —, que no es lo mismo que el GPIO 0.

2. Calibrar el movimiento (hat “Variables”)

En el editor de bloques, el programa cuelga del bloque inicial Variables (el hat con el logo del ESP32). Toca ese logo y se despliega el panel de calibración: una sección por cada pieza de movimiento — Adelante, Atrás, Izquierda, Derecha — cada una con tres valores:

Variable Qué es Rango Paso de los botones −/+
Motor A Velocidad del motor A, en porcentaje con signo (el signo es el sentido de giro) −100 … 100 5
Motor B Velocidad del motor B, igual que A −100 … 100 5
Duración Cuánto dura la maniobra, en milisegundos 100 … 5000 ms 100

Valores de fábrica (chasis de dos ruedas):

Pieza Motor A Motor B Duración
Adelante 60 % 60 % 1000 ms
Atrás −60 % −60 % 1000 ms
Izquierda −50 % 50 % 500 ms
Derecha 50 % −50 % 500 ms

Fíjate en el patrón: para avanzar, ambos motores van al mismo signo; para girar, van en signos opuestos.

Cómo calibrar, paso a paso

  1. Pon el robot en el suelo, con espacio libre por delante, y conéctalo (el punto junto al logo del ESP32 debe estar verde).
  2. Arma un programa con una sola pieza Adelante y ejecútalo.
  3. Si se va de lado: baja en pasos de 5 % la velocidad del motor que tira más. Si se desvía a la derecha, el motor izquierdo empuja más; bájalo hasta que la trayectoria salga recta. No hace falta ninguna compensación aparte: la corrección es la variable.
  4. Si va hacia atrás cuando debería ir adelante: un motor está cableado al revés. Invierte el signo de esa velocidad (por ejemplo 60 → −60).
  5. Repite con Atrás, y luego con Izquierda y Derecha: ahí lo que se ajusta es la Duración, hasta que un giro quede en el ángulo que quieres (típicamente 90°).
  6. Ajusta la Duración de Adelante según la distancia que quieras por bloque.

Ajusta poco y prueba: la calibración es “prueba, ajusta un poco, repite”. Por eso el panel usa botones −/+ y no un deslizador — importa el número exacto.

Dónde queda guardada

La calibración se guarda en el celular, no en el robot: el ESP32 solo almacena el pinout. Sobrevive a cerrar la app, así que se calibra una vez y no en cada clase — pero si cambias de celular, o cambias el robot (motores, ruedas, superficie), toca recalibrar.


Soporte

Si el flasheo falla repetidamente o el dispositivo no aparece por Bluetooth después de un flasheo exitoso, contáctanos:

PAWS Email: [email protected]


Ver también: Política de Privacidad · Términos de Servicio