Una escuela rural en la precordillera, un refugio de montaña, una caleta donde la señal del celular llega a ratos: en todos esos lugares una enciclopedia que no dependa de internet sigue siendo útil. Este proyecto mete la Wikipedia en una tarjeta microSD y la sirve desde un ESP32-S3 por su propia red WiFi. Cualquier celular o notebook que se conecte a esa red la abre en el navegador, sin plan de datos y sin instalar nada.

Al terminar vas a saber elegir el archivo ZIM correcto (idioma, variante y tamaño), calcular qué tarjeta necesitas, convertir el ZIM al formato que el microcontrolador puede leer rápido, preparar la microSD en FAT32, flashear el firmware con PlatformIO y diagnosticar el montaje de la tarjeta desde el monitor serial. También vas a entender por qué el ESP32 puede hacer esto con tan poca RAM y en qué casos te conviene más una Raspberry Pi.

Componentes del proyecto: placa ESP32-S3 con ranura microSD integrada, tarjeta microSD y cable USB de datos

Cómo funciona por dentro

El contenido viene de Kiwix, una organización sin fines de lucro que empaqueta Wikipedia y otros sitios en archivos .zim. Un ZIM está pensado para un lector con memoria de sobra: comprime bloques grandes de artículos y para sacar uno solo hay que descomprimir el bloque completo. En un computador eso no se nota; en un ESP32, con unos cientos de KB de RAM interna, es inviable.

Por eso el proyecto no lee el ZIM directamente. Un preprocesador en Python, que corre en tu computador, desarma el archivo y lo vuelve a escribir en una forma amigable para el microcontrolador:

  • Índices (index.bin, sparse_index.bin, id_index.bin): tablas ordenadas que permiten buscar un título con búsqueda binaria, leyendo solo unos pocos sectores de la tarjeta en vez de recorrerla entera.
  • Trozos de artículos (articles_0000.dat, articles_0001.dat...): el texto repartido en archivos de tamaño acotado. Eso resuelve además un límite de FAT32, que no acepta archivos de más de 4 GB.
  • Imágenes (img_index.bin, img_0000.dat...): cada ilustración reducida a una miniatura JPEG del tamaño que elijas, para que el ESP32 solo tenga que copiar bytes de la tarjeta a la red, sin procesar nada.

El firmware hace de servidor web: monta la tarjeta, levanta un punto de acceso WiFi abierto y responde las búsquedas y los artículos. Todo el trabajo pesado se hizo antes, en el computador; al microcontrolador le queda solo leer y enviar.

Hardware

Lo central es una placa ESP32-S3 con ranura microSD integrada conectada por SD_MMC (el bus nativo de tarjetas del chip, no SPI). El tutorial original usa una placa tipo ESP32-S3 CAM, y el entorno de PlatformIO del repositorio (s3-cam-web) viene configurado con los pines de la tarjeta de ese modelo: CLK en 39, CMD en 38 y D0 en 40. Si tu placa tiene la ranura en otros pines, tendrás que ajustarlos en el firmware antes de compilar. El autor insiste en que el repositorio espera un ESP32-S3: con un ESP32 clásico la compilación o la carga fallan.

Además necesitas:

  • Una tarjeta microSD. El autor la probó con una de 4 GB y recomienda 16 o 32 GB.
  • Un cable USB de datos para programar la placa. Uno solo de carga enciende el LED pero el computador no ve el puerto.
  • Un lector de tarjetas para cargar los datos desde el computador.

Elegir el contenido y calcular la tarjeta

Los archivos están en la página de descargas de Kiwix en Wikimedia. El nombre de cada archivo te dice qué trae. Por ejemplo, wikipedia_en-simple_all_maxi_2026-09.zim se lee así:

Parte del nombre Qué significa
en, es, fr, ru... Idioma de la Wikipedia
simple Simple English Wikipedia: vocabulario más fácil y muchos menos artículos
all Artículos de todos los temas, no una selección temática
maxi Texto completo con imágenes
nopic Texto completo sin imágenes: mucho más liviano
mini Solo el párrafo inicial de cada artículo
2026-09 Año y mes en que se tomó la copia

Códigos de idioma que aparecen en los nombres de los archivos ZIM de Kiwix, como en, fr, ru y af

Para una sala de clases en Chile, lo lógico es la Wikipedia en español (wikipedia_es_all_...). Ahí la decisión importante es la variante, porque la versión en español es mucho más grande que la Simple English que usa el autor:

  • mini cabe con holgura en una tarjeta chica y sirve como diccionario enciclopédico rápido.
  • nopic trae todos los artículos completos sin fotos. Es el mejor equilibrio para un colegio sin señal: el texto es lo que más se consulta y las imágenes son las que más pesan.
  • maxi con imágenes ocupa varias decenas de GB en español, así que necesita una tarjeta grande y un preprocesado bastante largo.

La regla para calcular la tarjeta: mira el tamaño del ZIM en la página de descargas y deja al menos un 30 % de margen. El resultado del preprocesador no pesa lo mismo que el ZIM: el texto se reorganiza en otros bloques y las imágenes se vuelven a comprimir con el tamaño de miniatura que elijas, así que puede quedar más grande o más chico según la variante. Antes de comprar o formatear, revisa el tamaño real de la carpeta de salida.

Kiwix también publica archivos temáticos (física, matemáticas, fútbol, ajedrez, entre otros). Si el objetivo es un ramo específico, uno de esos pesa una fracción de la Wikipedia completa.

Archivos temáticos de Kiwix para armar una referencia offline enfocada, por ejemplo solo física o matemáticas

Software: del ZIM a la tarjeta

1. Clona el repositorio

El autor trabaja en VS Code con PlatformIO, y el preprocesador usa el Python que trae PlatformIO. Descarga o clona el repositorio Offline Wikipedia ESP32 y abre una terminal en su carpeta raíz. En el ejemplo del autor, en Windows, el prompt queda así:

Text
C:\Users\Pavilion\Downloads\Offline-Wikipedia-ESP32-master\Offline-Wikipedia-ESP32-master>

2. Preprocesa el ZIM

Este comando extrae todos los artículos, convierte las imágenes a trozos .dat y genera los índices. Las miniaturas salen por defecto en 320x212; el autor usa --thumb-size 480x320 para que se vean más nítidas. Las rutas son las de su equipo: cámbialas por las tuyas.

Powershell
& "C:\Users\Pavilion\.platformio\penv\Scripts\python.exe" preprocessor\build_wiki_db.py --all-jpeg --thumb-size 480x320 "C:\Users\Pavilion\Downloads\wikipedia_en-simple_all_maxi_2026-09.zim" preprocessor\output_en_wiki

Registro del preprocesador mientras convierte el ZIM de Simple English en trozos listos para el ESP32

Este paso es el más lento de todo el proyecto y depende del tamaño del ZIM: con una Wikipedia completa puede tomar horas. Al terminar aparece la carpeta preprocessor/output_en_wiki. El nombre lo eliges tú en el último argumento: si procesas la versión en español, llamarla output_es_wiki te evita confusiones.

Dos detalles que ahorran tiempo:

  • Si piensas usar una variante nopic, no tiene sentido pedir miniaturas grandes: no hay imágenes que convertir.
  • Una miniatura de 480x320 pesa bastante más que una de 320x212. Si la tarjeta te queda justa, vuelve al tamaño por defecto.

3. Prepara la microSD

Conecta la tarjeta al computador con el lector y formatéala en FAT32. En Windows es clic derecho sobre la unidad, Formatear y FAT32. Ojo con las tarjetas de más de 32 GB: vienen de fábrica en exFAT y el formateador de Windows no ofrece FAT32 para ellas, así que necesitas una herramienta aparte. Por eso 16 o 32 GB son el tamaño cómodo.

En la raíz de la tarjeta crea una carpeta llamada wiki y copia ahí el contenido de la carpeta de salida (no la carpeta misma).

Archivos de índice y trozos generados por el preprocesador que van en la carpeta /wiki de la microSD

La estructura tiene que quedar así:

Text
SD Card Root/
└── wiki/
   ├── index.bin
   ├── sparse_index.bin
   ├── id_index.bin
   ├── index_meta.txt
   ├── articles_0000.dat
   ├── articles_0001.dat
   ...
   ├── img_index.bin
   ├── img_meta.txt
   ├── img_0000.dat
   ├── img_0001.dat

Expulsa la tarjeta desde el sistema antes de sacarla, para que no quede ninguna escritura a medias, e insértala en la ranura de la placa.

4. Flashea el firmware

Conecta la placa por USB y, desde la raíz del repositorio, entra a la carpeta del firmware y súbelo. No hay que editar nada si tu placa coincide con la del autor:

Powershell
cd firmware
$env:PYTHONIOENCODING="utf-8"
& "C:\Users\Pavilion\.platformio\penv\Scripts\pio.exe" run -e s3-cam-web -t upload

La variable PYTHONIOENCODING evita errores de codificación en la consola de Windows al imprimir el progreso. La carga toma poco, a diferencia del preprocesado.

PlatformIO confirma que el firmware del servidor de Wikipedia offline se subió correctamente

Si no ves el mensaje de éxito, lo más probable según el autor es que la placa no sea un ESP32-S3. Si sí lo es, revisa que el cable sea de datos y prueba manteniendo apretado el botón BOOT al conectar.

5. Verifica la tarjeta en el monitor serial

Powershell
& "C:\Users\Pavilion\.platformio\penv\Scripts\pio.exe" device monitor

Si todo está bien, el arranque muestra algo así (la cantidad de artículos cambia según el archivo que usaste):

Text
[wiki_db] Initialising storage...
[wiki_db] Setting custom SD_MMC pins: CLK=39, CMD=38, D0=40
[wiki_db] SD_MMC mounted successfully (1-bit mode)!
[wiki_db] Database ready: 129909 articles
[wiki_db] Images: 129909 available

El "1-bit mode" significa que la tarjeta se comunica con una sola línea de datos (D0) en vez de cuatro. Es más lento que el modo de 4 bits, pero ocupa solo tres pines y alcanza de sobra para servir páginas a unos pocos clientes.

Si el montaje falla, revisa en este orden: que la tarjeta esté en FAT32 y no en exFAT, que la carpeta se llame exactamente wiki y esté en la raíz, y que los pines de la tarjeta coincidan con los de tu placa.

Probarlo: conéctate y busca

Alimenta la placa. En el celular, tablet o notebook abre la configuración WiFi y conéctate a la red Wikipedia Offline, que es abierta y no pide clave.

Conexión a la red WiFi abierta Wikipedia Offline creada por el ESP32-S3

Abre el navegador y entra a http://192.168.4.1/, la dirección que el ESP32 usa por defecto en modo punto de acceso. Aparece la portada "Welcome to Offline Wikipedia" con el total de artículos cargados. Al escribir en el buscador aparecen títulos relacionados, y al elegir uno se abre el artículo con texto e imágenes (o solo texto si cargaste una variante nopic). El monitor serial sigue activo mientras tanto, útil para diagnosticar.

Wikipedia offline funcionando desde la placa ESP32-S3, vista en el navegador

Algunos límites que conviene conocer antes de llevarlo a una sala:

  • Pocos usuarios a la vez. El punto de acceso del ESP32 admite pocos clientes simultáneos (en el núcleo de Arduino, cuatro por defecto). Para un grupo de trabajo funciona; para un curso completo al mismo tiempo, no.
  • El celular puede desconectarse. Algunos teléfonos detectan que la red no tiene internet y vuelven solos a los datos móviles. Si pasa, elige "mantener conexión" cuando el sistema lo pregunte.
  • Alcance. La antena integrada cubre una sala sin problemas, pero no un colegio entero.

ESP32, Raspberry Pi o celular

Kiwix tiene otras dos formas de usar estos mismos archivos, y cada una calza con un caso distinto:

  • App de Kiwix en el celular: lo más simple si cada persona tiene su teléfono con espacio de sobra. No sirve para compartir.
  • Raspberry Pi con kiwix serve: lee el ZIM directamente, sin preprocesar, aguanta muchos más usuarios y tiene búsqueda de texto completo. A cambio consume varias veces más energía y cuesta bastante más.
  • ESP32-S3: el más barato y el que menos consume. Funciona con un power bank durante horas y cabe en un bolsillo. Es la opción para un kit de emergencia o una sala chica.

Variantes y mejoras

  • Funcionamiento con batería y panel solar. Para una escuela sin red eléctrica estable, alimenta la placa con una celda 18650, un módulo de carga TP4056 y un panel solar pequeño. Como el ESP32 consume poco, una batería alcanza para una jornada completa de clases.
  • Pantalla local. El autor propone modificar el firmware para mostrar los artículos en una pantalla TFT, de modo que el aparato se use solo, sin celular.
  • Lectura en voz alta. Combinado con un sistema de texto a voz offline y un parlante I2S, el ESP32 puede leer los artículos, algo valioso para estudiantes que recién están aprendiendo a leer.
  • Varias tarjetas temáticas. En lugar de una Wikipedia gigante, prepara tarjetas por asignatura (ciencias, historia, matemáticas) con los archivos temáticos de Kiwix y cámbialas según la clase.

Personalización para Chile

En Chile consigues lo necesario en MechatronicStore:

  • Micro SD tarjeta de memoria 16gb (SKU B-450V3): el tamaño que recomienda el autor. Cabe con holgura una Wikipedia mini o un archivo temático, y es el tamaño más cómodo para formatear en FAT32.
  • Cable USB Tipo C a USB Tipo A 1mt (SKU B-101): para programar la placa y ver el monitor serial. Es de datos, no solo de carga.

La placa ESP32-S3 con ranura microSD por SD_MMC y el lector de tarjetas no están hoy en el catálogo. Las otras placas ESP32 de la tienda no son reemplazo directo: el firmware está escrito para los pines de la tarjeta del ESP32-S3 CAM, y un ESP32 clásico no lo corre.

Recursos

Versión chilena con componentes en stock local en MechatronicStore.