Assistente vocale AI fai-da-te con ESP32 e occhi OLED

Questo progetto realizza un assistente vocale AI fai-da-te completo su una scheda ESP32. Il sistema ascolta con un microfono I2S, registra la voce, la trascrive con l’API Whisper di OpenAI, genera una risposta con GPT e la riproduce tramite un amplificatore e un altoparlante. Un display OLED anima due occhi espressivi che seguono lo stato della conversazione. Il tutto gira su un ESP32 standard, senza hardware aggiuntivo complesso.

La pagina Hackster.io di jayesh_nawani raccoglie tutti i dettagli del progetto. La costruzione richiede componenti comuni: una scheda di sviluppo ESP32, un amplificatore MAX98357A, un display OLED 0.96 pollici, un microfono I2S e un altoparlante da 3W. Per chi vuole iniziare con una base già pronta, la scheda ESP32-C6-Zero offre un’alternativa compatta e moderna, anche se il progetto originale usa la classica Development Board.

Come funziona il loop principale

Il loop principale ascolta continuamente il microfono I2S. Quando rileva un picco di volume sostenuto, superiore alla soglia di 1000, avvia la registrazione. La registrazione continua finché il silenzio dura almeno 200 ms per 1000 ms di hold, oppure fino a un massimo di 2 secondi. Il clip audio viene poi impacchettato come file WAV e inviato all’API Whisper per la trascrizione.

La trascrizione arriva all’API Chat Completions di GPT, che genera una risposta conversazionale. Il testo viene quindi inviato all’API TTS, e l’audio PCM risultante viene riprodotto in streaming sull’amplificatore I2S mentre arriva. Il campionamento avviene a 16000 Hz, mentre il TTS lavora a 24000 Hz. La dimensione del chunk è 512 byte, con una velocità di sintesi vocale impostata a 0.85.

Modulo di sviluppo ESP32
Modulo di sviluppo ESP32 (foto: jayesh_nawani)

Il display OLED esegue un task FreeRTOS separato sul core 0, dedicato ad animare gli occhi e mostrare lo stato del sistema. Il pipeline principale gira invece sul core 1. Questa separazione evita che le chiamate HTTP bloccanti rallentino l’animazione. Il risultato è un’interfaccia fluida e reattiva, con occhi che si muovono mentre l’assistente ascolta e risponde.

Le sfide tecniche più interessanti

Il progetto affronta problemi reali che ogni maker incontra. La frammentazione dell’heap è uno dei più ostici: ogni chiamata alle API di OpenAI richiede memoria contigua. Il codice libera un blocco di 32KB prima di ogni richiesta, così le librerie HTTP hanno spazio sufficiente. Senza questo accorgimento, le chiamate falliscono in modo casuale.

La gestione delle chiamate HTTP bloccanti è un’altra sfida. Su un ESP32, una richiesta a un’API può bloccare il loop principale per secondi. La soluzione adottata usa i due core: uno per la logica, uno per l’animazione. Inoltre, il debug hardware è stato sistematico: ogni componente è stato testato singolarmente prima di integrare il tutto. Ad esempio, il microfono è stato verificato con un oscilloscopio prima di collegarlo all’amplificatore.

Per chi vuole rifare il progetto, la breadboard è il punto di partenza ideale. I collegamenti sono semplici: il microfono usa i GPIO 14, 15 e 32, l’amplificatore i GPIO 26, 25 e 22, il display OLED i GPIO 21 e 19. Un display OLED 0,96 pollici, 128×64 come quello del progetto è perfetto per gli occhi animati, grazie alla sua risoluzione e al contrasto elevato.

Display OLED
Display OLED (foto: jayesh_nawani)

Il codice usa Arduino IDE con le librerie ArduinoJson, Adafruit_GFX e Adafruit_SSD1306. La soglia di trigger è impostata a 1000, quella del silenzio a 200, con un hold di 1000 ms. Servono 3 chunk consecutivi per validare un campione minimo di 0.6 secondi. Questi parametri sono tarati per un ambiente domestico, ma si possono regolare facilmente.

Questo progetto dimostra che un assistente vocale AI completo può girare su un semplice ESP32. Non serve un Raspberry Pi né un computer dedicato. La combinazione di Whisper, GPT e TTS funziona in tempo reale con una latenza accettabile. Inoltre, il progetto insegna a gestire problemi concreti come la memoria limitata e le chiamate di rete bloccanti.

L’aspetto più affascinante è il display OLED con gli occhi animati. Aggiunge personalità al dispositivo e rende l’interazione più naturale. Il task FreeRTOS dedicato mostra come sfruttare al meglio i due core dell’ESP32. Infine, il progetto è completamente open-source, quindi chiunque può modificarlo e migliorarlo.

  • Microfono I2S su GPIO 14, 15, 32
  • Amplificatore MAX98357A su GPIO 26, 25, 22
  • Display OLED su GPIO 21, 19
  • Campionamento a 16000 Hz, TTS a 24000 Hz
  • Soglia trigger 1000, silenzio 200, hold 1000 ms
  • Max registrazione 2 secondi, chunk 512 byte

Per l’audio, un amplificatore open-source come ANGELO può sostituire il MAX98357A, offrendo maggiore flessibilità e un design modulare. In alternativa, un amplificatore stereo TDA7297 è adatto se si vuole espandere il progetto a due canali. La scelta dipende dalle esigenze di potenza e dallo spazio disponibile.

Infine, il progetto è un ottimo punto di partenza per esperimenti più avanzati. Si può aggiungere il riconoscimento di comandi personalizzati, integrare un display più grande o collegare sensori ambientali. Le possibilità sono infinite, e la base solida di questo progetto rende ogni modifica più semplice.


Fonte: https://www.hackster.io/jayesh_nawani/ai-voice-assistant-with-esp32-4a3d5f

Lascia un commento

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

Menu