Raspberry Pi Pico W: Sprachausgabe mit der OpenAI-API (mit CircuitPython)
Eigentlich sind Anwendungen mit der OpenAI-API auf einem Raspberry Pi Pico nur begrenzt sinnvoll. Denn das Sprachmodell hinter der OpenAI-API erwartet eine Texteingabe und erzeugt eine Textausgabe. Beides ist eigentlich nur mit Hilfe einer Konsole, wie sie von der Thonny Python IDE bereitgestellt wird, sinnvoll nutzbar. Die OpenAI-API kann aber nicht nur Text, sondern auch Sprache in Form einer MP3-Datei erzeugen (Text-to-Speech, TTS). Im Prinzip ist es dann möglich, dass ein Raspberry Pi Pico mit einem spricht, wenn man eine MP3-Datei auf dem Pico mit Hilfe eines Lautsprechers abspielen kann.
Der hier verwendete Programmcode benötigt zum Abspielen der MP3-Dateien die CircuitPython-Firmware, weil dort bereits ein MP3-Decoder enthalten ist. Mit MicroPython funktioniert der Programmcode nicht.
Der folgende Aufbau und Programmcode ist nur ein erster Versuch, um über die OpenAI-API eine Sprachausgabe für einen eingegebenen Text zu generieren und abzuspielen. Der Text muss nicht zwangsläufig eingegeben werden, sondern könnte auch aus einem dynamischen Programmablauf entstehen, der nicht auf einem Display angezeigt werden kann, sondern akustisch abgespielt werden soll.
- Mehr Informationen über die OpenAI-API
- Mehr Informationen über MP3-Dateien abspielen mit CircuitPython
Aufbau und Bauteile

| Raspberry Pi Pico | KY-006 | |
|---|---|---|
| Pin 3 | GND | - |
| Pin 1 | GPIO 0 | S |
Hinweis: Der KY-006 ist nicht wirklich für die Tonausgabe von MP3-Dateien geeignet. Er rauscht, knackt, knarzt und schnarrt, je nach dem was genau abgespielt wird. Zum erstmaligen Testen ist das sicherlich ausreichend. Ernsthafte Anwendungen benötigen einen Verstärker und einen richtigen Lautsprecher. Verstärker und Lautsprecher sollten dann passend zur Anwendung gewählt werden.
Schnell und einfach alle Bauteile zusammen bestellen
Programmcode für CircuitPython
Im folgenden Programmcode müssen die Zugangsdaten für das WLAN und der API-Key von OpenAI eingetragen werden. Die URL für die API ist schon korrekt gewählt.
Umgebungsvariablen in der Datei settings.toml:
# Wifi credentials CIRCUITPY_WIFI_SSID="WLAN-Name" CIRCUITPY_WIFI_PASSWORD="WLAN-Passwort" # OpenAI API OPENAI_API_KEY="Dein API-Key"
Der Programmcode sieht vor, dass man einen Text (Prompt) eingibt. Dieser Text wird der TTS-Funktion der OpenAI-API übergeben, die daraus eine MP3-Datei erzeugt, die auf dem Pico gespeichert und danach automatisch abgespielt wird.
Im Programmcode wird überprüft, ob eine Eingabe erfolgt ist, oder nur „Return“ gedrückt wurde. Bei einer Eingabe wird die OpenAI-APi abgefragt. Wenn nicht, dann wird die zuletzt erzeugte Datei noch einmal abgespielt.
# Bibliotheken laden
import os
import wifi
import socketpool
import ssl
import adafruit_requests
import board
from audiomp3 import MP3Decoder
from audiopwmio import PWMAudioOut
# WLAN-Zugangsdaten
WLAN_NAME = os.getenv('CIRCUITPY_WIFI_SSID')
WLAN_PW = os.getenv('CIRCUITPY_WIFI_PASSWORD')
# OpenAI-API
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
OPENAI_API_URL = 'https://api.openai.com/v1/audio/speech'
filename = 'tts.mp3'
# Initialisierung: GPIO 0 (Pin 1) als PWM-Audio-Ausgang
audio_out = PWMAudioOut(board.GP0)
# WLAN-Verbindung herstellen
if wifi.radio.ipv4_address is None:
print('Mit WLAN verbinden:', WLAN_NAME)
wifi.radio.connect(WLAN_NAME, WLAN_PW)
print('WLAN-Verbindung hergestellt / IP-Adresse:', wifi.radio.ipv4_address)
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
# Endlosschleife
while True:
# Text-Eingabe
print()
prompt = input('Prompt : ')
print()
# OpenAI-API
if prompt != '':
# OpenAI-API-Parameter
header = { 'Authorization': 'Bearer ' + OPENAI_API_KEY, 'Content-Type' : 'application/json' }
data = { 'model': 'tts-1', 'voice': 'shimmer', 'input': prompt }
# OpenAI-API-Request
print('Status : OpenAI-API-Request senden')
response = requests.post(OPENAI_API_URL, headers=header, json=data, stream=True)
# OpenAI-API-Response
if response.status_code == 200:
print('Status : Request erfolgreich empfangen')
# Daten als Datei speichern
with open('mp3/' + filename, 'w') as fd:
for chunk in response.iter_content(chunk_size=128):
fd.write(chunk)
print('Status : Datei gespeichert:', filename)
else:
print('Status : Response-Code', response.status_code)
print('JSON :', response.json())
# MP3-Datei auswählen
mp3 = MP3Decoder('mp3/' + filename)
# MP3 abspielen
print('Status : Datei abspielen:', filename)
audio_out.play(mp3)
Weitere verwandte Themen:
- Raspberry Pi Pico W als WLAN-Client
- Raspberry Pi Pico W: ChatGPT und OpenAI-API
- Raspberry Pi Pico W: KI-Chatbot mit der OpenAI-API (ChatGPT)
- Raspberry Pi Pico: MP3-Dateien abspielen (mit CircuitPython)
- Raspberry Pi Pico: Smart Home (Ideen und Projekte)
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.






