{"id":2598,"date":"2025-09-14T15:51:32","date_gmt":"2025-09-14T15:51:32","guid":{"rendered":"https:\/\/kuliahrobot.com\/krc\/?p=2598"},"modified":"2025-09-14T15:58:42","modified_gmt":"2025-09-14T15:58:42","slug":"building-a-voice-chatbot-on-raspberry-pi","status":"publish","type":"post","link":"https:\/\/kuliahrobot.com\/krc\/building-a-voice-chatbot-on-raspberry-pi\/","title":{"rendered":"Building a Voice Chatbot on Raspberry Pi"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2598\" class=\"elementor elementor-2598\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-988abd3 e-flex e-con-boxed e-con e-parent\" data-id=\"988abd3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c1e5498 elementor-widget elementor-widget-html\" data-id=\"c1e5498\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"id\">\r\n<head>\r\n  <meta charset=\"utf-8\" \/>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\r\n \r\n  <style>\r\n    body{font-family: Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial;line-height:1.6;color:#0f172a;background:#f8fafc;padding:28px}\r\n    .container{max-width:900px;margin:0 auto;background:#fff;border-radius:12px;padding:28px;box-shadow:0 6px 24px rgba(2,6,23,0.08)}\r\n    h1{font-size:28px;margin-bottom:6px}\r\n    h2{font-size:20px;margin-top:22px}\r\n    pre{background:#0b1220;color:#e6eef8;padding:12px;border-radius:8px;overflow:auto}\r\n    code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,monospace}\r\n    ul{margin-left:18px}\r\n    .note{background:#f1f5f9;padding:10px;border-radius:8px;margin:10px 0}\r\n    .btn{display:inline-block;padding:8px 12px;border-radius:8px;background:#0ea5a4;color:white;text-decoration:none}\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <div class=\"container\">\r\n    \r\n   \r\n    <p>Halo teman-teman \ud83d\udc4b, pada tutorial ini kita akan membuat sebuah <em>voice assistant<\/em> berbasis Raspberry Pi yang dapat berkomunikasi dengan model AI (seperti GPT) menggunakan suara. Tutorial ini ditujukan untuk pemula \u2014 semua langkah dijelaskan secara ringkas dan praktis: dari persiapan hardware, setup sistem operasi, instalasi library Python, sampai menjalankan skrip yang mendengarkan suara, mengirim ke AI, dan mengeluarkan balasan suara. Selamat belajar dan bereksperimen! \ud83d\ude80<\/p>\r\n\r\n    <h2>Ringkasan Alur<\/h2>\r\n    <ol>\r\n      <li>Persiapan hardware<\/li>\r\n      <li>Install Raspberry Pi OS<\/li>\r\n      <li>Setup Python environment dan library<\/li>\r\n      <li>Uji microphone & speaker<\/li>\r\n      <li>Script utama: rekam suara \u2192 kirim ke GPT \u2192 TTS<\/li>\r\n      <li>Opsional: buat web interface (Flask) atau deploy headless<\/li>\r\n    <\/ol>\r\n\r\n    <h2>Persiapan Hardware<\/h2>\r\n    <ul>\r\n      <li>Raspberry Pi 4 (disarankan) atau Pi 3<\/li>\r\n      <li>MicroSD minimal 16 GB<\/li>\r\n      <li>Adaptor daya (5V 3A untuk Pi 4)<\/li>\r\n      <li>USB microphone \/ USB webcam dengan mic<\/li>\r\n      <li>Speaker (jack audio\/USB\/HDMI)<\/li>\r\n      <li>Keyboard, mouse, monitor (untuk setup awal) atau akses SSH<\/li>\r\n      <li>Koneksi internet<\/li>\r\n    <\/ul>\r\n\r\n    <h2>Langkah 1 \u2014 Install Raspberry Pi OS<\/h2>\r\n    <p>Gunakan <strong>Raspberry Pi Imager<\/strong> untuk menulis Raspberry Pi OS ke microSD. Pilih Raspberry Pi OS (32-bit) standar. Boot dan ikuti wizard setup (lokasi, WiFi, update).<\/p>\r\n\r\n    <h2>Langkah 2 \u2014 Update & Python<\/h2>\r\n    <p>Buka Terminal lalu jalankan:<\/p>\r\n    <pre><code>sudo apt update && sudo apt upgrade -y\r\nsudo apt install python3-pip python3-venv -y<\/code><\/pre>\r\n\r\n    <h2>Langkah 3 \u2014 Buat Virtual Environment & Install Library<\/h2>\r\n    <pre><code>python3 -m venv ai-voice\r\nsource ai-voice\/bin\/activate\r\npip install --upgrade pip\r\n# Library utama\r\npip install openai speechrecognition pyttsx3 pyaudio<\/code><\/pre>\r\n    <div class=\"note\">Catatan: Jika pemasangan <code>pyaudio<\/code> bermasalah, coba pasang dependensi: <code>sudo apt install portaudio19-dev python3-pyaudio -y<\/code> lalu <code>pip install pyaudio<\/code>.<\/div>\r\n\r\n    <h2>Langkah 4 \u2014 Uji Mikrofon & Speaker<\/h2>\r\n    <p>Pastikan mic dan speaker dikenali. Contoh tes singkat:<\/p>\r\n    <pre><code>arecord -l     # lihat device mic\r\narecord -D plughw:1,0 -d 5 test.wav\r\naplay test.wav<\/code><\/pre>\r\n\r\n    <h2>Langkah 5 \u2014 Skrip Utama (voice_gpt.py)<\/h2>\r\n    <p>Buat file <code>voice_gpt.py<\/code> di folder proyek kamu. <strong>Ganti<\/strong> <code>\"API_KEY_ANDA\"<\/code> dengan API key OpenAI mu (atau endpoint API lain jika kamu punya model sendiri).<\/p>\r\n    <pre><code>import openai\r\nimport speech_recognition as sr\r\nimport pyttsx3\r\n\r\n# MASUKKAN API KEY ANDA DI SINI\r\nopenai.api_key = \"API_KEY_ANDA\"\r\n\r\nr = sr.Recognizer()\r\ntts = pyttsx3.init()\r\n\r\n# Fungsi mendengar suara\r\ndef listen():\r\n    with sr.Microphone() as source:\r\n        print(\"Silakan bicara...\")\r\n        audio = r.listen(source)\r\n    try:\r\n        text = r.recognize_google(audio, language=\"id-ID\")\r\n        print(\"Kamu berkata:\", text)\r\n        return text\r\n    except Exception as e:\r\n        print(\"Tidak bisa mengenali suara:\", e)\r\n        return \"\"\r\n\r\n# Fungsi panggil GPT\r\ndef ask_gpt(prompt):\r\n    response = openai.ChatCompletion.create(\r\n        model=\"gpt-3.5-turbo\",\r\n        messages=[{\"role\":\"user\",\"content\":prompt}],\r\n        temperature=0.6,\r\n        max_tokens=300\r\n    )\r\n    return response[\"choices\"][0][\"message\"][\"content\"]\r\n\r\n# Fungsi TTS\r\ndef speak(text):\r\n    print(\"AI:\", text)\r\n    tts.say(text)\r\n    tts.runAndWait()\r\n\r\nif __name__ == '__main__':\r\n    print(\"Mulai voice assistant. Tekan Ctrl+C untuk berhenti.\")\r\n    while True:\r\n        user_input = listen()\r\n        if user_input:\r\n            answer = ask_gpt(user_input)\r\n            speak(answer)<\/code><\/pre>\r\n\r\n    <h2>Menjalankan Skrip<\/h2>\r\n    <pre><code>source ai-voice\/bin\/activate\r\npython voice_gpt.py<\/code><\/pre>\r\n    <p>Jika berhasil, Raspberry Pi akan menunggu suara, mengirim teks ke GPT, lalu menjawab dengan suara.<\/p>\r\n\r\n    <h2>Opsi Lanjutan (pilih salah satu)<\/h2>\r\n    <ul>\r\n      <li><strong>Wake word<\/strong> \u2014 gunakan library seperti <code>porcupine<\/code> atau <code>snowboy<\/code> (snowboy tidak lagi aktif resmi).<\/li>\r\n      <li><strong>Lebih baik TTS<\/strong> \u2014 gunakan layanan cloud TTS (Google, Amazon Polly, atau TTS dari OpenAI jika tersedia) untuk hasil suara lebih natural.<\/li>\r\n      <li><strong>Web interface (Flask)<\/strong> \u2014 buat endpoint yang memicu rekaman atau menampilkan log. Cocok jika kamu ingin mengontrol Pi via browser.<\/li>\r\n      <li><strong>Headless mode<\/strong> \u2014 jalankan Pi tanpa monitor, akses via SSH atau sistem layanan (systemd) untuk auto-start.<\/li>\r\n    <\/ul>\r\n\r\n    <h2>Contoh singkat: Flask endpoint (opsional)<\/h2>\r\n    <pre><code>from flask import Flask, jsonify\r\nimport subprocess\r\n\r\napp = Flask(__name__)\r\n\r\n@app.route('\/speak')\r\ndef speak_route():\r\n    # Ini contoh sederhana. Jangan jalankan rekaman langsung tanpa proteksi.\r\n    result = subprocess.run(['python','voice_gpt.py'], capture_output=True, text=True)\r\n    return jsonify({'output': result.stdout})\r\n\r\nif __name__ == '__main__':\r\n    app.run(host='0.0.0.0', port=5000)<\/code><\/pre>\r\n\r\n    <h2>Tips Keamanan & Biaya<\/h2>\r\n    <ul>\r\n      <li>Jaga API key kamu. Simpan di file environment <code>~\/.bashrc<\/code> sebagai <code>export OPENAI_API_KEY=...<\/code> lalu baca dari kode.<\/li>\r\n      <li>Perhatikan biaya request ke API (jika pakai layanan berbayar). Batasi <code>max_tokens<\/code>, gunakan caching untuk pertanyaan yang sering diulang.<\/li>\r\n      <li>Jika aplikasi dipakai publik, tambahkan autentikasi (token, password, atau OAuth) pada endpoint web.<\/li>\r\n    <\/ul>\r\n\r\n    <h2>Instruksi: Cara Pasang di WordPress<\/h2>\r\n    <ol>\r\n      <li>Buka halaman\/post baru di WordPress.<\/li>\r\n      <li>Pilih tab &quot;HTML&quot; (bukan Visual) dan paste seluruh konten file HTML ini atau potongan yang diinginkan.<\/li>\r\n      <li>Publish.<\/li>\r\n    <\/ol>\r\n\r\n    <h2>Penutup<\/h2>\r\n    <p>Sudah siap! Kamu punya tutorial siap pakai untuk web tentang membuat voice assistant berbasis Raspberry Pi + GPT. Kalau mau, saya bisa juga:\r\n      <ul>\r\n        <li>Konversi ke format Markdown atau PDF untuk modul latihan<\/li>\r\n        <li>Buat versi yang menggunakan WebRTC agar mic bisa diakses lewat browser<\/li>\r\n        <li>Bantu setup systemd untuk auto-start saat Pi boot<\/li>\r\n      <\/ul>\r\n   \r\n\r\n    \r\n  <\/div>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Halo teman-teman \ud83d\udc4b, pada tutorial ini kita akan membuat sebuah voice assistant berbasis Raspberry Pi yang dapat berkomunikasi dengan model AI (seperti GPT) menggunakan suara. Tutorial ini ditujukan untuk pemula \u2014 semua langkah dijelaskan secara ringkas dan praktis: dari persiapan hardware, setup sistem operasi, instalasi library Python, sampai menjalankan skrip yang mendengarkan suara, mengirim ke [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2598","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/posts\/2598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/comments?post=2598"}],"version-history":[{"count":7,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/posts\/2598\/revisions"}],"predecessor-version":[{"id":2611,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/posts\/2598\/revisions\/2611"}],"wp:attachment":[{"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/media?parent=2598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/categories?post=2598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kuliahrobot.com\/krc\/wp-json\/wp\/v2\/tags?post=2598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}