Гид по технологиям

Google Assistant на Raspberry Pi — голосовой помощник и управление LED через GPIO

10 min read Умный дом Обновлено 05 Jan 2026
Google Assistant на Raspberry Pi: голос и GPIO
Google Assistant на Raspberry Pi: голос и GPIO

Готовый самодельный голосовой ассистент на Raspberry Pi с микрофоном и колонкой

Голосовые ассистенты быстро вошли в обиход. Во многих домах Alexa или Google Home управляют светом, медиаконтентом и напоминаниями. Технологии, на которых они основаны, частично доступны каждому: Google предоставляет Assistant SDK, который позволяет запускать ассистента на своих устройствах. В этом руководстве — как настроить Google Assistant на Raspberry Pi и с помощью голосовой команды управлять светодиодом через GPIO.

О чём эта статья

  • Подготовка железа и ОС
  • Настройка звука (вход/выход)
  • Создание проекта в Google Actions и включение API
  • Регистрация устройства и получение OAuth JSON
  • Установка SDK и зависимостей в виртуальном окружении Python
  • Аутентификация и тестирование ассистента
  • Бонус: управление LED через GPIO
  • Триггеры неполадок, советы по безопасности и чеклисты для развёртывания

Аппаратные требования для домашнего ассистента на Raspberry Pi

Комплект оборудования: Raspberry Pi, USB-микрофон/вебкамера, динамик, проводка для LED

Вам потребуется:

  1. Raspberry Pi с чистой установкой Raspbian (Raspberry Pi OS) на SD-карте.
  2. USB-вебкамера с микрофоном или отдельный USB/периферийный микрофон.
  3. Внешний динамик (можно через 3.5 мм разъём или HDMI).
  4. Схема подключения светодиода к GPIO (опционально) — резистор и провода.
  5. Браузер, в котором вы вошли в свой Google-аккаунт.

Важно: для аудиовхода я использовал USB-вебкамеру только ради микрофона — подойдёт любой совместимый микрофон. Для вывода звука я использовал разъём 3.5 мм; HDMI или другие источники также возможны, но потребуют дополнительной настройки ALSA/аудиопараметров.

Подключите USB-устройства и, если используете LED, соберите его по схеме (GPIO → резистор → анод LED, катод — на GND).

Настройка звука

Вы можете работать прямо на Pi или подключаться по SSH. В обоих случаях начните с терминала и проверьте списки устройств командой:

arecord -l
aplay -l

Пример вывода команд arecord -l и aplay -l с указанием card/device

На изображении микрофон (USB-вебкамера) указан как card 1 device 0. Запомните номера card и device для микрофона и динамика — они понадобятся при конфигурации ALSA.

В домашней директории пользователя pi создайте файл конфигурации ALSA и откройте его в nano:

sudo nano .asoundrc

Ниже — пример содержимого .asoundrc, которое формирует явный вход и выход. Замените card и device на свои номера:

pcm.!default {
  type asym
  playback.pcm {
    type plug
    slave.pcm "hw:1,0"   # замените на вашу карту/устройство для вывода
  }
  capture.pcm {
    type plug
    slave.pcm "hw:1,0"   # замените на вашу карту/устройство для записи
  }
}
ctl.!default {
  type hw
  card 1
}

Пример содержимого файла asoundrc с настройкой карт для ввода и вывода

После сохранения (Ctrl+X, Y, Enter) проверьте запись и воспроизведение:

arecord -D plughw:1,0 -d 5 test.wav
aplay -D plughw:1,0 test.wav

Пример интерфейса записи и воспроизведения небольшой тестовой звуковой дорожки

Совет: если нужно регулировать входной уровень микрофона, запустите alsamixer и нажмите F6, чтобы выбрать устройство, затем настройте каналы.

Важное: если вы хотите вывод через HDMI, укажите соответствующее устройство в .asoundrc, либо используйте команду aplay с указанием hw:X,Y.

Создание проекта в Google Actions

Откройте браузер на Pi или на локальной машине (если SSH) и перейдите в Google Actions Console. Нажмите New Project и укажите удобное имя проекта.

Создание нового проекта в Google Actions Console

Процесс создания займёт некоторое время. Оставьте вкладку открытой — она понадобится позже.

Включение Google Assistant API

Перейдите на страницу Google Assistant API и нажмите Enable, чтобы связать ваш проект с API.

Кнопка включения Google Assistant API в консоли

Также ассистент требует включённых активностей аккаунта: откройте Activity Controls в Google и убедитесь, что включены:

  • Web & App Activity (включая историю Chrome при необходимости)
  • Device Information
  • Voice and Audio Activity

Настройки активности аккаунта Google: Voice and Audio Activity и другие переключатели

После этого можно зарегистрировать устройство.

Регистрация Raspberry Pi как устройства

В Actions Console перейдите Device registration в левом меню. В разделе Product укажите имя устройства (например “My Pi Assistant”). Поле Manufacturer можно заполнить произвольно. Для device type выберите Auto.

Форма регистрации устройства в Actions Console с указанием имени и производителя

Нажмите Register Model, затем на следующем экране — Download OAuth 2.0 Credentials. Это скачает JSON-файл client_secret_XXXX.json.

Официальный гайд рекомендует переместить файл в /home/pi. Если вы работали локально и скачали файл на свой компьютер, перенесите его на Pi с помощью scp:

scp ~/Downloads/client_secret_client-id.json pi@raspberry-pi-ip-address:/home/pi/

Замените raspberry-pi-ip-address на IP вашего устройства и путь, если файл скачан в другом месте.

Команда scp для копирования client secret JSON на Raspberry Pi

На Pi выполните ls -l в домашней директории и убедитесь, что файл на месте.

Установка SDK и зависимостей

Рекомендуется работать в Python virtualenv. Создайте виртуальное окружение env в /home/pi и активируйте его:

env/bin/python -m pip install --upgrade pip setuptools wheel
source env/bin/activate

Установите системные зависимости для аудио и сборки:

sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev

Затем установите пакеты Google Assistant и инструменты аутентификации в виртуальном окружении:

python -m pip install --upgrade google-assistant-library
python -m pip install --upgrade google-assistant-sdk[samples]
python -m pip install --upgrade google-auth-oauthlib[tool]

Если какая-то установка не проходит — проверьте сетевое подключение, версию pip и права пользователя. Частая причина ошибок — отсутствие dev-пакетов или конфликт версий Python.

Аутентификация Raspberry Pi с помощью OAuth

Используйте скачанный client_secret JSON для генерации токенов доступа. Выполните команду (замените имя файла на своё):

google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \
     --scope https://www.googleapis.com/auth/gcm \
     --save --headless --client-secrets /home/pi/YOUR_CLIENT_SECRET_ID.json

Вы увидите ссылку в терминале — откройте её в браузере, войдите в Google-аккаунт и разрешите доступ. Скопируйте код авторизации и вставьте его в терминал. В ответ вы должны получить сообщение Credentials Saved: /home/pi/…

Генерация ссылки авторизации и подтверждение по коду

Тестирование ассистента

Запустите ассистента с указанием project-id и device-model-id (берутся в Action Console):

googlesamples-assistant-hotword --project-id my-dev-project --device-model-id my-model

Замените my-dev-project и my-model на свои значения. Скажите “OK Google” и задайте вопрос. В терминале вы увидите логи распознавания и ответов.

Вывод терминала при запуске Google Assistant на Raspberry Pi

Если уровень громкости низкий, можно попросить ассистента “Hey Google, turn your volume up to 80%” или настроить системную громкость ALSA/нижнего уровня.

Бонус: голосовое управление GPIO

Можно подключить светодиод и управлять им через Google Assistant, используя OnOff-трейт. В Actions Console найдите зарегистрированное устройство и включите trait OnOff в списке доступных черт (traits). Сохраните изменения.

Включение trаit OnOff для устройства в Actions Console

В виртуальном окружении склонируйте репозиторий samples SDK и установите библиотеку для GPIO:

git clone https://github.com/googlesamples/assistant-sdk-python
pip install rpi.gpio

Перейдите в папку с примером hotword.py:

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library

Откройте hotword.py и добавьте импорт RPi.GPIO:

nano hotword.py

Добавьте строку:

import RPi.GPIO as GPIO

Найдите метод process_event и замените или закомментируйте печать отладки, добавив обработку команды action.devices.commands.OnOff:

#print('Do command', command, 'with params', str(params))
if command == "action.devices.commands.OnOff":
    if params['on']:
        print('---------------')
        print('Led turned on')
        print('---------------')

        GPIO.output(18, GPIO.HIGH)
    else:
        print('---------------')
        print('Led turned off')
        print('---------------')

        GPIO.output(18, GPIO.LOW)

Перед тем как слушать события, настройте вывод в main():

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)

Сохраните изменения и запустите скрипт, передав device-model-id:

python hotword.py --device-model-id YOUR-MODEL-ID-HERE

Когда вы скажете “OK Google, turn on” для этого устройства, в терминале появится ваш print и светодиод загорится.

Скрин терминала с сообщением о включении светодиода добавленным print

Пример работающего голосового управления светодиодом на Raspberry Pi

Отладка и распространённые проблемы

Важно заранее подготовиться к возможным отказам. Ниже — типичные проблемы и способы их решения.

  • Ассистент не запускается или падает с ошибками импорта: убедитесь, что активировали virtualenv, и что все зависимости установлены именно внутри env (pip list).
  • Нет звука или плохое качество записи: проверьте .asoundrc, номера карт (arecord -l), уровни в alsamixer и физические подключения микрофона/динамика.
  • Ошибка OAuth: проверьте, что используете корректный client_secret файл и что ссылка авторизации была открыта под тем же аккаунтом Google, под которым вы создавали проект.
  • Команды OnOff не срабатывают: включите OnOff trait в Actions Console, убедитесь, что device-model-id совпадает, и что hotword.py действительно обрабатывает соответствующие команды (проверьте логи).
  • Проблемы с правами на GPIO: запускайте скрипт под пользователем с правами на доступ к GPIO (обычно pi) или используйте sudo, если требуется.

Краткий чеклист для отладки:

  1. arecord -l и aplay -l показывают устройства.
  2. .asoundrc настроен на правильные hw:card,device.
  3. test.wav записывается и воспроизводится.
  4. virtualenv активирован: (env) перед приглашением shell.
  5. OAuth-JSON в /home/pi и google-oauthlib-tool выполнена.
  6. Запуск googlesamples-assistant-hotword без ошибок.
  7. Для GPIO: rpi.gpio установлен и pinmode настроен.

Альтернативные подходы и когда они лучше

  • Mycroft AI (open source) — если вы хотите полностью локальное решение, независимое от облака Google. Подойдёт, если приватность важнее интеграций Google.
  • Snips — раньше был локальным вариантом, но проект свернули/приобретён; не рекомендуется для новых проектов.
  • Использование ESP32 + MQTT — для простого управления освещением (без голосового распознавания на устройстве). Подойдёт для распределённых IoT-сетей.

Контраргумент: Mycroft и локальные решения часто уступают по качеству распознавания речи и интеграциям, которые предоставляет Google Assistant.

Практические шаблоны и чеклисты

Роль: Разработчик (maker)

  • Установить Raspberry Pi OS и обновить систему.
  • Настроить аудиоустройства и .asoundrc.
  • Создать аккаунт в Google Actions, зарегистрировать устройство и скачать JSON.
  • Создать виртуальное окружение и установить зависимости.
  • Запустить ассистента и отладить голосовые команды.
  • Подключить LED и ввести обработчики OnOff.

Роль: Сетевой администратор

  • Настроить статический IP для Pi.
  • Обеспечить брандмауэр и сегментацию сети для IoT-устройств.
  • Контролировать доступ к Google аккаунту и OAuth-credentials.

Краткая проверочная таблица (SOP) перед демонстрацией:

  • Файлы: client_secret*.json в /home/pi
  • Виртуальное окружение активировано
  • Запущен googlesamples-assistant-hotword
  • LED подключён и пин 18 настроен
  • Проверка голоса: «OK Google, what time is it?»

Критерии приёмки

  • Ассистент запускается без фатальных ошибок в течение 5 минут запуска.
  • Голосовые команды распознаются с адекватной точностью в тихой комнате (разговорная громкость).
  • Команда OnOff приводит к смене состояния LED на GPIO 18 в течение 2–3 секунд после голосовой команды.
  • Логи не содержат ошибок OAuth или доступа к API.

Безопасность и приватность

  • OAuth JSON содержит клиентские секреты — храните файл в защищённом месте и не публикуйте его в общедоступных репозиториях.
  • Google Assistant отправляет аудио в облако Google для распознавания — если конфиденциальность критична, рассмотрите локальные решения.
  • Ограничьте доступ к вашему Raspberry Pi через SSH: используйте ключи SSH, отключите пароли, настройте брандмауэр.
  • Регулярно обновляйте систему и пакеты безопасности (sudo apt update && sudo apt upgrade).

Тестовые сценарии и критерии приёмки

  1. Тест голосовой активации:

    • Шаги: запустить ассистента, сказать “OK Google” и задать простую команду.
    • Ожидание: ассистент отвечает и печатает лог запроса.
  2. Тест воспроизведения:

    • Шаги: попросить ассистента воспроизвести музыку или произнести фразу.
    • Ожидание: звук слышен через подключённый динамик.
  3. Тест OnOff:

    • Шаги: сказать “Turn on” или попросить включить лампу, привязанную к вашему устройству.
    • Ожидание: GPIO 18 переключается в HIGH и LED включается.
  4. Тест отказа сети:

    • Шаги: отключить интернет и повторить команду.
    • Ожидание: ассистент сообщает об ошибке сети или не отвечает; система должна корректно логировать ошибку.

Ментальные модели и советы по дизайну

  • Model: «Local device, cloud NLU» — Raspberry Pi захватывает аудио локально, отправляет на облако Google для понимания и получает действия обратно.
  • Модель надёжности: напоминания, автоматизация и критические сценарии должны иметь резерв (локальные таймеры, альтернативные каналы), т.к. облачный ассистент зависит от интернет-соединения.

Мини-методология развёртывания (шаги высокого уровня)

  1. Подготовить Raspberry Pi OS и подключить оборудование.
  2. Настроить звук и проверить записи/воспроизведения.
  3. Зарегистрировать проект и устройство в Google Actions, включить API и скачать OAuth.
  4. Установить виртуальное окружение и зависимости, выполнить аутентификацию.
  5. Запустить ассистента и тестировать базовые команды.
  6. Подключить GPIO и расширить код для обработки OnOff.

Рекомендации по совместимости и миграции

  • Версии Python: используйте Python 3.6+ (современные Raspberry Pi OS уже включают совместимые версии).
  • Библиотеки: проверяйте совместимость google-assistant-library и google-assistant-sdk с вашей версией Python и Raspberry Pi OS.
  • При обновлении SDK сначала тестируйте на отдельной ветке/устройстве, чтобы не потерять рабочую конфигурацию.

1-строчная глоссарий

  • Assistant SDK — набор библиотек и инструментов Google для интеграции Assistant в собственные устройства.
  • OAuth — протокол авторизации, позволяющий приложению получить доступ от имени пользователя.
  • OnOff trait — характеристика устройства в Actions, отвечающая за включение/выключение.
  • ALSA — подсистема звука в Linux, управляющая картами ввода/вывода.

Диаграмма принятия решений (Mermaid)

flowchart TD
  A[Ассистент не отвечает] --> B{Есть ли интернет?}
  B -- Нет --> C[Проверьте соединение и DNS]
  B -- Да --> D{Ошибки в логах?}
  D -- Да --> E[Проверьте OAuth и API ключи]
  D -- Нет --> F[Проверьте микрофон/динамик '.asoundrc']
  F --> G[Запустите запись и воспроизведение test.wav]

Короткое объявление (100–200 слов)

Соберите собственный голосовой помощник на базе Raspberry Pi: следуйте пошаговой инструкции по настройке звука, регистрации устройства в Google Actions, получению OAuth и установке Google Assistant SDK в виртуальном окружении Python. В качестве бонуса вы научитесь подключать светодиод к GPIO и управлять им голосом с помощью OnOff-треита. В руководстве есть чеклисты, тестовые сценарии, советы по отладке и примечания по безопасности. Независимо от опыта, вы получите рабочий домашний ассистент и основу для дальнейшей автоматизации дома.

Заключение

Этот проект — хороший ввод в работу с Google API и голосовыми интерфейсами. Вы получите реальное устройство, способное отвечать на вопросы и управлять простыми устройствами через GPIO. После завершения попробуйте добавить более сложные действия, интеграции с MQTT или Home Assistant, и продумайте аспекты безопасности и приватности перед развёртыванием в постоянной среде.

Ключевые заметки:

  • Всегда храните клиентские секреты в безопасности.
  • Тестируйте обновления SDK в тестовой среде.
  • Для полной приватности рассмотрите локальные альтернативы.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

AI для увлекательных текстов: как и зачем
Контент

AI для увлекательных текстов: как и зачем

Скачать Microsoft Office бесплатно — инструкция
Программное обеспечение

Скачать Microsoft Office бесплатно — инструкция

Накладки PS5: цвета, цены и предзаказ
Игры

Накладки PS5: цвета, цены и предзаказ

Скрапинг изображений на Python: руководство
Веб-скрапинг

Скрапинг изображений на Python: руководство

История буфера обмена на Android: просмотр и управление
Android.

История буфера обмена на Android: просмотр и управление

Изменить ключевой кадр Live Photo на iPhone
Фото

Изменить ключевой кадр Live Photo на iPhone