Créer un assistant vocal avec ChatGPT sur Raspberry Pi 5 : guide pas à pas

Carte Raspberry Pi 5 vue de dessus avec ports USB, Ethernet, micro-HDMI et connecteur GPIO 40 broches

Poser une question à voix haute et entendre une réponse claire quelques secondes plus tard : c’est aujourd’hui à la portée de n’importe quel atelier. Avec un Raspberry Pi 5, un micro, un petit haut-parleur et l’API d’OpenAI, vous pouvez monter votre propre assistant vocal, adapté à votre bureau, à votre salle de classe ou à votre stand de démonstration. Ce guide détaille le matériel, le câblage, l’installation logicielle, la protection de la clé d’API et le budget à prévoir.

Comment fonctionne l’assistant

Le principe tient en quatre temps. Le Raspberry Pi enregistre votre phrase tant que vous gardez un bouton appuyé. Le fichier audio part vers un service de transcription qui le convertit en texte. Ce texte est ensuite envoyé à un modèle de langage qui rédige la réponse. Enfin, un moteur de synthèse vocale transforme cette réponse en fichier sonore que la carte joue sur le haut-parleur.

Les calculs lourds se font donc dans le cloud, et la carte se contente de gérer le son, le bouton et la connexion réseau. Si vous préférez une version qui fonctionne sans Internet, notre dossier sur l’IA embarquée sur microcontrôleur et ordinateur monocarte présente les modèles capables de tourner en local, avec leurs limites.

Étape 1 : réunir le matériel

  • Un Raspberry Pi 5 (4 Go suffisent largement) avec une carte microSD de 32 Go et Raspberry Pi OS 64 bits.
  • Une alimentation USB-C de 27 W (5 V, 5 A). Avec un bloc de 3 A, la carte limite le courant disponible sur ses ports USB, ce qui peut faire décrocher un micro ou une carte son USB.
  • Un microphone USB, ou un micro MEMS à sortie I2S pour une version plus compacte.
  • Une sortie son : le Pi 5 n’a plus de prise jack 3,5 mm. Utilisez une enceinte USB, une petite carte son USB reliée à une enceinte amplifiée, ou un amplificateur I2S de classe D associé à un haut-parleur de 4 à 8 Ω.
  • Un refroidissement actif : le ventirad officiel se fixe en deux clips et se branche sur le connecteur FAN.
  • Un bouton-poussoir, une LED, une résistance et quelques fils Dupont pour l’interface.

Bonne nouvelle pour les budgets serrés : puisque le travail d’intelligence artificielle est déporté, un Raspberry Pi 4 Model B 2 Go fait aussi l’affaire. Les commandes de ce tutoriel sont identiques. Seule la sortie son change, car le Pi 4 conserve sa prise jack.

Microphone USB noir à grille métallique, reconnu sans pilote par Raspberry Pi OS
Un micro USB est reconnu sans pilote. Photo : Evan-Amos, domaine public, via Wikimedia Commons

Étape 2 : brancher le son et l’interface

La solution la plus rapide reste le tout-USB : micro sur un port, carte son sur un autre, et rien à souder. Pour vérifier que tout est détecté, ouvrez un terminal et listez les périphériques de capture et de lecture :

arecord -l
aplay -l
arecord -D plughw:2,0 -f S16_LE -r 16000 -c 1 -d 5 test.wav
aplay test.wav

Remplacez « 2,0 » par les numéros de carte et de périphérique affichés chez vous. Un enregistrement en 16 kHz, mono, 16 bits est largement suffisant pour la voix et garde des fichiers légers.

Si vous choisissez la voie I2S, il faudra souder des barrettes de broches sur les modules micro et ampli. Un étain fin à âme décapante simplifie ce travail ; notre comparatif des différents types d’étain pour la soudure vous aidera à choisir le bon fil.

Côté interface, reliez le bouton entre la broche GPIO17 et la masse : la résistance de tirage interne suffit. La LED témoin se branche sur GPIO27, en série avec une résistance de 330 Ω vers la masse. Vous trouverez des modèles de 3 et 5 mm dans notre rayon LED. Pour identifier la bonne résistance dans votre stock, gardez sous la main notre guide du code couleur des résistances.

Un dernier détail apprécié des utilisateurs : un vrai interrupteur de confidentialité. Branché sur une autre entrée GPIO, un modèle à bascule choisi parmi nos interrupteurs indique au programme de ne plus rien enregistrer, et sa position se voit d’un coup d’œil.

Étape 3 : refroidir et alimenter correctement

Un assistant vocal reste allumé des jours entiers, souvent dans un boîtier fermé. Sans dissipateur, le processeur du Pi 5 chauffe vite et réduit sa fréquence pour se protéger, ce qui rallonge le temps de réponse. Le ventirad actif règle le problème : il ne tourne qu’en cas de besoin et reste discret. Pour suivre la température, tapez vcgencmd measure_temp pendant une série de questions.

Raspberry Pi 5 vu de dessus avec son ventirad actif : dissipateur en aluminium et petit ventilateur branché sur le connecteur FAN
Le ventirad actif garde le Raspberry Pi 5 au frais. Photo : SimonWaldherr, CC BY 4.0, via Wikimedia Commons

Pensez aussi au placement : écartez le micro du ventilateur et du haut-parleur. Quelques centimètres de distance réduisent nettement le souffle capté et les phrases mal comprises.

Étape 4 : préparer le logiciel

Mettez le système à jour, puis créez un environnement Python isolé. Raspberry Pi OS refuse désormais l’installation de paquets pip au niveau du système, et c’est une bonne pratique de toute façon :

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y python3-venv alsa-utils python3-lgpio
python3 -m venv --system-site-packages ~/assistant
source ~/assistant/bin/activate
pip install openai gpiozero

Étape 5 : protéger la clé d’API

Créez une clé dans votre tableau de bord OpenAI, de préférence rattachée à un projet dédié à ce montage. Ne l’écrivez jamais en clair dans le script et ne la publiez pas sur GitHub. Rangez-la dans un fichier lisible par votre seul utilisateur :

mkdir -p ~/.config/assistant
nano ~/.config/assistant/env      # une ligne : OPENAI_API_KEY=sk-...
chmod 600 ~/.config/assistant/env

Fixez ensuite un plafond de dépenses mensuel dans les paramètres de facturation. Si la carte est volée ou si la clé fuite, révoquez-la immédiatement et générez-en une nouvelle : l’opération prend une minute.

Étape 6 : le programme

Le script ci-dessous enregistre pendant l’appui sur le bouton, transcrit, interroge le modèle, puis lit la réponse. Les noms de modèles sont placés en variables, car OpenAI fait évoluer son catalogue régulièrement : vérifiez la liste à jour dans la documentation avant de lancer le projet.

import os, subprocess
from openai import OpenAI
from gpiozero import Button, LED

client = OpenAI()   # lit OPENAI_API_KEY dans l'environnement
bouton = Button(17)
voyant = LED(27)
MODELE_STT = os.getenv("MODELE_STT", "gpt-transcribe")
MODELE_TEXTE = os.getenv("MODELE_TEXTE", "gpt-6-luna")
MODELE_VOIX = os.getenv("MODELE_VOIX", "gpt-4o-mini-tts")
CONSIGNE = "Tu es un assistant vocal. Réponds en français, en trois phrases au plus."

def enregistrer(fichier="question.wav"):
    voyant.on()
    rec = subprocess.Popen(["arecord", "-D", "plughw:2,0", "-f", "S16_LE",
                            "-r", "16000", "-c", "1", fichier])
    bouton.wait_for_release()
    rec.terminate()
    rec.wait()
    voyant.off()
    return fichier

def transcrire(fichier):
    with open(fichier, "rb") as f:
        r = client.audio.transcriptions.create(model=MODELE_STT, file=f,
                                               extra_body={"languages": ["fr", "ar"]})
    return r.text

def repondre(question):
    r = client.responses.create(model=MODELE_TEXTE, instructions=CONSIGNE, input=question)
    return r.output_text

def parler(texte, fichier="reponse.wav"):
    with client.audio.speech.with_streaming_response.create(
            model=MODELE_VOIX, voice="coral", input=texte,
            response_format="wav") as audio:
        audio.stream_to_file(fichier)
    subprocess.run(["aplay", fichier])

while True:
    bouton.wait_for_press()
    question = transcrire(enregistrer())
    print("Vous :", question)
    reponse = repondre(question)
    print("Assistant :", reponse)
    parler(reponse)

Pour le lancer avec la clé chargée : set -a; source ~/.config/assistant/env; set +a, puis python assistant.py depuis l’environnement activé. Une fois le montage validé, un service systemd doté de la directive EnvironmentFile le démarrera automatiquement à chaque mise sous tension.

Étape 7 : estimer le coût d’usage

Aux tarifs publiés par OpenAI début octobre 2026, la transcription avec gpt-transcribe revient à 0,0045 dollar par minute et la synthèse vocale avec gpt-4o-mini-tts à environ 0,015 dollar par minute de parole produite. Le modèle texte d’entrée de gamme coûte quelques centièmes de centime par échange. Une question de dix secondes suivie d’une réponse de quinze secondes revient donc à environ un demi-centime de dollar, soit près de 0,05 dirham. Avec vingt questions par jour, comptez moins de 30 dirhams par mois.

Deux remarques pour garder la maîtrise du budget. D’abord, demandez des réponses courtes dans la consigne : la voix générée est le poste le plus cher. Ensuite, surveillez les annonces de retrait de modèles. OpenAI a déjà programmé la fin de plusieurs anciens modèles audio, d’où l’intérêt de les déclarer en variables plutôt que dans le code. Pour supprimer ce poste de dépense, un moteur de synthèse local comme Piper fonctionne hors ligne sur le Pi 5, avec des voix françaises.

Pour aller plus loin

Votre assistant peut ensuite piloter des objets : allumer un éclairage, lire une température ou déclencher un relais selon la demande. Il suffit de demander au modèle une réponse structurée, puis de laisser votre script agir sur les GPIO. Pour les questions en darija, relisez notre article sur la reconnaissance vocale adaptée au parler marocain, qui fait le point sur les modèles spécialisés en préparation.

Vous avez tout ce qu’il faut pour un premier prototype en un après-midi. Si une pièce vous manque, cartes, modules et accessoires sont réunis dans notre catégorie kits et cartes de développement. Et si votre assistant réalise quelque chose d’original, racontez-le-nous : nous serons ravis de partager votre projet.

Ce site utilise des cookies pour vous offrir une meilleure expérience de navigation. En naviguant sur ce site, vous acceptez notre utilisation des cookies.