Wikipedia offline su ESP32: un’intera enciclopedia su un display economico

Portare un’intera enciclopedia su un display economico sposta la conoscenza dal centro della rete al suo bordo. Il progetto di Alun Morris fa esattamente questo: trasforma il modulo ESP32-2432S028, il Cheap Yellow Display da 320×240 pixel, in un lettore offline di Wikipedia. Articoli, immagini e indice di ricerca stanno su una microSD e il dispositivo li legge senza alcuna connessione internet.

Il risultato è un dispositivo autonomo che risponde al tocco e mostra le voci enciclopediche. La base è il file ZIM di Kiwix, lo stesso formato usato dai progetti Wikipedia offline su desktop. Un preprocessore su PC lo converte in un database binario ottimizzato per le risorse limitate dell’ESP32. Il firmware legge da lì tutto il contenuto.

Il preprocessore e la conversione dei dati

Il punto di partenza è il file ZIM consigliato, wikipedia_en_simple_all_maxi, un download di circa 3,3 GB che contiene circa 285.000 articoli. Il preprocessore, scritto in Python 3.9+, usa libzim per leggere il file e lo converte in un database binario. La dimensione elaborata della Simple English Wikipedia è di circa 10 GB sulla scheda.

La conversione non è un semplice copia: il preprocessore ripulisce l’HTML degli articoli, riduce le immagini e le converte in formati che l’ESP32 sa decodificare. Le foto diventano JPEG con qualità predefinita 90, i diagrammi usano il formato QOI. Le miniature hanno dimensione massima di 320×212 pixel. Inoltre, gli articoli sono divisi in chunk da 32 MB e le immagini in chunk da 4 MB, così il firmware può leggerli senza saturare la memoria.

La build richiede circa 30, 60 minuti su un PC moderno e usa fino a 4 core CPU. Il risultato è un database con record a larghezza fissa di 80 byte per l’indice dei titoli. Per la ricerca, il firmware carica in RAM uno sparse index con una voce ogni 64 articoli, che occupa circa 7 KB. Questo permette di trovare rapidamente il punto di scansione senza dover leggere l’intero indice dalla scheda.

Il firmware e la memoria dell’ESP32

Il firmware è scritto per PlatformIO e gira sul modulo ESP32-2432S028, che monta il display ILI9341 e il touchscreen XPT2046. La memoria è il vincolo principale: l’ESP32 ha circa 300 KB di heap utilizzabile, mentre i cluster ZIM tipici sono da 1, 4 MB, troppo grandi per essere gestiti in un colpo solo. Per questo il preprocessore divide tutto in chunk più piccoli.

Il renderer minimale del firmware gestisce l’HTML ripulito e mostra le immagini decodificate con TJpgDec per i JPEG e con la libreria qoi per i diagrammi. La ricerca per titolo usa l’indice binario a larghezza fissa e lo sparse index in RAM, quindi anche con 285.000 articoli la risposta è immediata.

Al primo avvio, il firmware esegue la calibrazione del touchscreen e salva i dati in flash per gli avvii successivi. Così l’utente non deve ripetere la procedura ogni volta. Il progetto è documentato nel repository di Alun Morris, dove trovi il codice completo, il preprocessore e le istruzioni per la build.

Scheda microSD e limiti pratici

La scheda microSD deve essere di almeno 8 GB: la Simple English Wikipedia elaborata occupa circa 10 GB, quindi una da 16 GB è la scelta sicura. Il CYD gestisce schede fino a 32 GB, mentre le 64 GB potrebbero funzionare ma senza garanzie. Il file ZIM da scaricare è un singolo download da 3,3 GB.

Il progetto usa componenti facilmente reperibili. Oltre al modulo ESP32-2432S028, servono solo la microSD e un cavo USB per il caricamento del firmware. Non c’è bisogno di altri moduli o sensori. Il tutto si alimenta via USB, come la scheda ESP32 con connettore USB Type-C che molti maker hanno già in laboratorio, anche se per questo progetto la scheda specifica è il CYD.

Il limite principale è la lingua: la versione Simple English è pensata per chi ha un vocabolario ridotto, non per una consultazione approfondita. Inoltre, le immagini sono miniature, non le versioni originali. Tuttavia, per chi viaggia, lavora in zone senza copertura o vuole un dispositivo didattico autonomo, questo lettore offline è una soluzione concreta e a basso costo.


Fonte: https://github.com/alunmorris/Offline-Wikipedia-ESP32/tree/master

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu