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

Голосовые ассистенты быстро вошли в обиход. Во многих домах Alexa или Google Home управляют светом, медиаконтентом и напоминаниями. Технологии, на которых они основаны, частично доступны каждому: Google предоставляет Assistant SDK, который позволяет запускать ассистента на своих устройствах. В этом руководстве — как настроить Google Assistant на Raspberry Pi и с помощью голосовой команды управлять светодиодом через GPIO.
О чём эта статья
- Подготовка железа и ОС
- Настройка звука (вход/выход)
- Создание проекта в Google Actions и включение API
- Регистрация устройства и получение OAuth JSON
- Установка SDK и зависимостей в виртуальном окружении Python
- Аутентификация и тестирование ассистента
- Бонус: управление LED через GPIO
- Триггеры неполадок, советы по безопасности и чеклисты для развёртывания
Аппаратные требования для домашнего ассистента на Raspberry Pi
Вам потребуется:
- Raspberry Pi с чистой установкой Raspbian (Raspberry Pi OS) на SD-карте.
- USB-вебкамера с микрофоном или отдельный USB/периферийный микрофон.
- Внешний динамик (можно через 3.5 мм разъём или HDMI).
- Схема подключения светодиода к GPIO (опционально) — резистор и провода.
- Браузер, в котором вы вошли в свой Google-аккаунт.
Важно: для аудиовхода я использовал USB-вебкамеру только ради микрофона — подойдёт любой совместимый микрофон. Для вывода звука я использовал разъём 3.5 мм; HDMI или другие источники также возможны, но потребуют дополнительной настройки ALSA/аудиопараметров.
Подключите USB-устройства и, если используете LED, соберите его по схеме (GPIO → резистор → анод LED, катод — на GND).
Настройка звука
Вы можете работать прямо на Pi или подключаться по SSH. В обоих случаях начните с терминала и проверьте списки устройств командой:
arecord -l
aplay -lНа изображении микрофон (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
}После сохранения (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 Assistant API
Перейдите на страницу Google Assistant API и нажмите Enable, чтобы связать ваш проект с API.
Также ассистент требует включённых активностей аккаунта: откройте Activity Controls в Google и убедитесь, что включены:
- Web & App Activity (включая историю Chrome при необходимости)
- Device Information
- Voice and Audio Activity
После этого можно зарегистрировать устройство.
Регистрация Raspberry Pi как устройства
В Actions Console перейдите Device registration в левом меню. В разделе Product укажите имя устройства (например “My Pi Assistant”). Поле Manufacturer можно заполнить произвольно. Для device type выберите Auto.
Нажмите 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 вашего устройства и путь, если файл скачан в другом месте.
На 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” и задайте вопрос. В терминале вы увидите логи распознавания и ответов.
Если уровень громкости низкий, можно попросить ассистента “Hey Google, turn your volume up to 80%” или настроить системную громкость ALSA/нижнего уровня.
Бонус: голосовое управление GPIO
Можно подключить светодиод и управлять им через Google Assistant, используя OnOff-трейт. В Actions Console найдите зарегистрированное устройство и включите trait OnOff в списке доступных черт (traits). Сохраните изменения.
В виртуальном окружении склонируйте репозиторий 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 и светодиод загорится.
Отладка и распространённые проблемы
Важно заранее подготовиться к возможным отказам. Ниже — типичные проблемы и способы их решения.
- Ассистент не запускается или падает с ошибками импорта: убедитесь, что активировали 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, если требуется.
Краткий чеклист для отладки:
- arecord -l и aplay -l показывают устройства.
- .asoundrc настроен на правильные hw:card,device.
- test.wav записывается и воспроизводится.
- virtualenv активирован: (env) перед приглашением shell.
- OAuth-JSON в /home/pi и google-oauthlib-tool выполнена.
- Запуск googlesamples-assistant-hotword без ошибок.
- Для 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).
Тестовые сценарии и критерии приёмки
Тест голосовой активации:
- Шаги: запустить ассистента, сказать “OK Google” и задать простую команду.
- Ожидание: ассистент отвечает и печатает лог запроса.
Тест воспроизведения:
- Шаги: попросить ассистента воспроизвести музыку или произнести фразу.
- Ожидание: звук слышен через подключённый динамик.
Тест OnOff:
- Шаги: сказать “Turn on” или попросить включить лампу, привязанную к вашему устройству.
- Ожидание: GPIO 18 переключается в HIGH и LED включается.
Тест отказа сети:
- Шаги: отключить интернет и повторить команду.
- Ожидание: ассистент сообщает об ошибке сети или не отвечает; система должна корректно логировать ошибку.
Ментальные модели и советы по дизайну
- Model: «Local device, cloud NLU» — Raspberry Pi захватывает аудио локально, отправляет на облако Google для понимания и получает действия обратно.
- Модель надёжности: напоминания, автоматизация и критические сценарии должны иметь резерв (локальные таймеры, альтернативные каналы), т.к. облачный ассистент зависит от интернет-соединения.
Мини-методология развёртывания (шаги высокого уровня)
- Подготовить Raspberry Pi OS и подключить оборудование.
- Настроить звук и проверить записи/воспроизведения.
- Зарегистрировать проект и устройство в Google Actions, включить API и скачать OAuth.
- Установить виртуальное окружение и зависимости, выполнить аутентификацию.
- Запустить ассистента и тестировать базовые команды.
- Подключить 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 в тестовой среде.
- Для полной приватности рассмотрите локальные альтернативы.
Похожие материалы
AI для увлекательных текстов: как и зачем
Скачать Microsoft Office бесплатно — инструкция
Накладки PS5: цвета, цены и предзаказ
Скрапинг изображений на Python: руководство