Автор статьи, перевод которой мы сегодня публикуем, хочет поделиться рассказом о создании видеодомофона, основанного на Raspberry Pi 3. Устройство работает в паре с iOS-телефоном, отправляя на него Push-уведомления когда кто-то нажимает на кнопку домофона. Система позволяет увидеть гостя и поговорить с ним.



Компоненты


Аппаратные компоненты:


Программы:


Инструменты:


Обзор проекта


Случилось так, что я наткнулся на хорошие программы, которые, на основе Raspberry Pi, позволяют сделать видеодомофон. Потом мне удалось уместить все компоненты домофона в компактный корпус. В результате у меня получилось интересное устройство, инструкцию по созданию которого я привожу в этом материале.

При работе над аппаратной частью домофона вам понадобятся навыки сверления пластмассы и навыки пайки. Программная часть проекта устроена очень просто, для того чтобы заставить всё заработать уметь программировать не нужно. Правда, если вы захотите усовершенствовать программы, которые тут используются, вы вполне можете это сделать (вам понадобится компьютер от Apple и редактор XCode).

Вот видео, в котором можно взглянуть на то, как работает видеодомофон, и найти инструкции по его сборке.

Шаг 1: подготовка и сборка аппаратных компонентов


Найдите аппаратные компоненты проекта из списка, приведённого в начале статьи. Возьмите пластиковый корпус и, ориентируясь на следующую схему, отметьте на нём места для сверления отверстий.


Схема расположения отверстий, которые нужно просверлить в корпусе

Теперь просверлите в корпусе три маленьких отверстия, которые позволят слышать звук громкоговорителя.

Далее — просверлите большое отверстие, расположенное в правой верхней части корпуса. Там будет кнопка домофона. Прежде чем сверлить это отверстие — подберите сверло, диаметр которого соответствует диаметру выбранной вами кнопки.


Сверление отверстия для кнопки

Края отверстий после сверления могут оказаться достаточно острыми. Их рекомендуется сгладить, воспользовавшись канцелярским ножом.


Обработка краёв отверстия

Корпус можно оставить таким, какой он есть, прозрачным, а можно и покрасить. Для этого хорошо подойдёт автомобильная грунтовка в баллончике.


Окраска корпуса

Теперь подготовим провода для громкоговорителя. Они достаточно длинны — поэтому их, возможно, будет тяжело уместить в корпусе. Укоротим их, вырезав куски из их середины, а потом спаяем, защитив место соединения термоусаживаемыми трубками.


Укороченные провода для громкоговорителя

Припаяем пару соединительных проводов к кнопке.


Припаивание проводов к кнопке

Сейчас все компоненты нашей системы готовы к установке в верхнюю часть корпуса. Начнём монтаж компонентов с кнопки.


Установка кнопки в верхнюю часть корпуса

Теперь поставим на место громкоговоритель. А именно: подключим к нему провода, снимем защитную плёнку с клейкой подложки и, прижав, зафиксируем его там, где он должен быть.


Установка громкоговорителя

После этого установим модуль камеры. В нашем корпусе уже предусмотрено место для этого модуля, он идеально туда становится.


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

Подключим громкоговоритель к плате Raspberry Pi. Для этого надо взять ещё один соединительный провод, разрезать его, взять ту его часть, на которой имеется Male-разъём (его, в результате, можно будет подключить к Female-разъёму провода, идущего от громкоговорителя), зачистить конец провода и пропустить его через отверстие около аудиовыхода платы.


Подготовка соединительного провода для подключения громкоговорителя к плате

Теперь надо припаять этот провод к контактной площадке, к которой припаян один из контактов аудиовыхода платы.


Припаивание провода к аудиовыходу

Контактная площадка, к которой нужно припаять провод, показана на следующей схеме красной стрелкой.


Контактная площадка, к которой нужно припаять провод

Теперь нужно установить Raspberry Pi в нижнюю часть корпуса и подключить к плате все остальные провода.


Установка платы в нижнюю часть корпуса и подключение к ней проводов

На следующем рисунке показана схема GPIO-пинов Raspberry Pi 3.


Схема GPIO-пинов Raspberry Pi 3

После этого можно закрыть корпус и перейти к следующему шагу.

Шаг 2: установка свежей ОС на Raspberry Pi


Загрузите и распакуйте архив с операционной системой Raspbian Stretch для Raspberry Pi 3 (или 3+).

По-видимому, самую свежую версию Raspberry Pi OS устанавливать не стоит, так как у её аудиоподсистемы есть одна проблема. Я, правда, надеюсь, что в обозримом будущем с этой проблемой справятся.

Загрузите и установите программу Raspberry Pi Imager.

Подключите к компьютеру microSD-карту и отформатируйте её. После этого запустите Raspberry Pi Imager.

Нажмите на кнопку CHOOSE OS, позволяющую выбрать операционную систему для записи на карту, и выберите вариант Use custom. После этого укажите программе путь к распакованному файлу Raspbian Stretch.

Выберите карту, воспользовавшись кнопкой CHOOSE SD CARD, а после этого нажмите на кнопку WRITE.

После того, как запись образа ОС на карту будет завершена, подключите карту к плате Raspberry Pi.

Подключите к Raspberry Pi монитор, пользуясь HDMI-кабелем, USB-мышь и клавиатуру. После этого подайте на плату питание.

Шаг 3: настройка WiFi и камеры на Raspberry Pi


После того, как ОС на Raspberry Pi запустится, воспользуйтесь средствами её первоначальной настройки и подключите плату к WiFi.

Затем щёлкните по значку Raspberry в верхней левой части экрана, а после этого перейдите в раздел Preferences и щёлкните по Raspberry Pi Configuration. Щёлкните по Interfaces, включите камеру, нажмите на кнопку OK и согласитесь с перезагрузкой устройства.

Для того чтобы проверить камеру — откройте консоль, воспользовавшись соответствующим значком в верхней левой части экрана.


Значок запуска консоли

Выполните в консоли следующую команду:

raspistill -o cam.jpg

Откройте File Manager с помощью соответствующего значка.


Значок менеджера файлов

Найдите файл cam.jpg, откройте его двойным щелчком и просмотрите, удостоверившись в том, что камера работоспособна.

Шаг 4: настройка и проверка громкоговорителя


Щёлкните правой кнопкой мыши по значку Volume, который находится в правой верхней части экрана, и выберите Analog. После этого щёлкните по тому же значку левой кнопкой мыши и установите громкость звука. Рекомендую установить её в 80%.

Далее — снова откройте консоль и выполните следующую команду:

speaker-test

В ответ на эту команду система должна воспроизвести белый шум.

Если вы хотите испытать воспроизведение чего-то более осмысленного — выполните в консоли следующую команду:

aplay /usr/share/sounds/alsa/Front_Center.wav

Будет воспроизведена запись человеческого голоса.

Шаг 5: настройка микрофона


Снова щёлкните правой кнопкой мыши по значку Volume, а после этого — по USB Device Settings.

Затем щёлкните по выпадающему меню Sound card и выберите USB PnP sound device.

Щёлкните по Select Controls… и выберите Microphone и Auto Gain Control. После этого щёлкните по Close.

Теперь установите ползунок, отвечающий за настройку микрофона, в позицию, примерно соответствующую 80%, и нажмите OK. Может случиться так, что качество захваченного звука покажется вам низким, что звук будет немного «шумным». Это можно исправить, уменьшив вышеописанное значение, но тут нужно учитывать то, что это может привести к тому, что голос того, с кем вы общаетесь, используя видеодомофон, будет слишком тихим.

К этому моменту аппаратная часть проекта собрана, настроена и готова к работе. Поэтому мы переходим к его программной части.

Шаг 6: загрузка Seajei SDK и запуск приложения-примера на Raspberry Pi


Откройте браузер Raspberry Pi и перейдите по адресу seajei.com.

Если понадобится — прокрутите страницу и щёлкните по ссылке Free SDK.

На следующей странице воспользуйтесь ссылкой Download SDK для загрузки SDK. Соответствующий файл попадёт в папку Downloads.

Откройте File Manager и перейдите в папку Downloads.

Щёлкните правой кнопкой мыши по .zip-файлу с материалами SDK и выберите команду распаковки архива. После этого переместите папку SDK на рабочий стол.

Теперь откройте консоль и перейдите в папку примера Doorbell, выполнив команду, подобную следующей:

cd Desktop/Seajei-3.1.8/SamplePrograms/RaspberryPi/Doorbell

Вам, возможно, придётся поменять имя папки Seajei-3.1.8 на другое, соответствующее вашей версии Seajei SDK.

Посмотрите файл README, открыв его следующей командой:

cat README

Затем, в соответствии с инструкциями из этого файла, выполните команду sudo apt update. После этого выполните другую sudo-команду, описанную там. Вот команды, о которых идёт речь:

sudo apt update; sudo apt install libopus-dev libssl-dev portaudio19-dev

После того, как работа этих команд завершится, запустите сборочный скрипт, рассчитанный на Raspberry Pi 3:

./build_pi_3_4.sh

А теперь можно запустить исполняемый файл примера:

./doorbell

Запишите ID (идентификатор) устройства. Он вам понадобится для подключения к домофону из iOS-приложения. В моём случае идентификатор выглядел так: vmy9dj.

Сейчас — подходящий момент для проверки кнопки. Нажмите на неё несколько раз. Если она работает правильно — вы увидите сообщение Button triggered.

Шаг 7: запуск приложения-примера на iOS


Теперь наладим работу iOS-части домофона. Тут я исхожу из предположения о том, что у вас уже установлен редактор XCode и есть учётная запись разработчика Apple.

Откройте сайт seajei.com на своём Mac и загрузите SDK.

Распакуйте загруженный архив и перейдите в папку SamplePrograms/iOS/SeajeiDemoApp. Откройте файл SeajeiDemoApp.xcodeproj в XCode.

Заполните поле Team на вкладке Signing & Capabilities для того чтобы вы могли бы собрать проект. Затем выберите цель сборки. Это может быть симулятор или iOS-устройство. Скомпилируйте приложение и запустите его

Сразу после первого запуска приложения нужно сообщить ему ID устройства, о котором мы говорили в предыдущем разделе. После этого нажмите CONNECT и всё должно заработать. Если программа была запущена на симуляторе — видео на нём может выглядеть странновато. Поэтому лучше всего запускать программу на настоящем устройстве.

Но при нажатии на кнопку домофона уведомление на телефон пока не приходит. Дело в том, что для организации работы уведомлений нужно соответствующим образом настроить приложение в iTunes Connect. Займёмся этим.

Шаг 8: наладка работы push-уведомлений


Сразу скажу, что для работы уведомлений нужно iOS-устройство. В симуляторе уведомления работать не будут.

Вернёмся к материалам Seajei SDK и откроем файл SeajeiDeveloperGuideIOS.pdf. В этом документе имеется раздел, посвящённый push-уведомлениям. Выполним инструкции из этого раздела, после чего в нашем распоряжении окажется .p12-файл. Его надо отправить по адресу support@seajei.com. В ответ пришлют токен. У меня этот токен оказался меньше чем через день.

После того, как вы получили токен (выглядит он как строка разных символов), вернитесь на Raspberry Pi, откройте консоль и войдите в папку программы-примера Doorbell:

cd Desktop/Seajei-3.1.8/SamplePrograms/RaspberryPi/Doorbell

Теперь надо отредактировать файл doorbell.c. Например — для этого можно воспользоваться редактором geany, открыв файл такой командой:

geany doorbell.c

В этом файле нужно найти то место, где введён пробный токен, и заменить его на собственный. После этого, сохранив файл и выйдя из редактора, надо снова воспользоваться скриптом build_pi_3_4.sh. Когда он отработает — можно запустить программу.

Сейчас вернёмся к iOS-приложению и внесём в файл PhoneAppViewController.m тот же токен. После изменения этого файла приложение нужно перекомпилировать и запустить, а после его запуска надо снова ввести ID устройства. Если ID там уже присутствует — то, скорее всего, вам нужно коснуться соответствующего поля и закрыть диалоговое окно. Иначе приложение может и не заработать так, как нужно.

Если теперь нажать на кнопку домофона — на телефон должно прийти уведомление.


Уведомление, пришедшее на телефон от домофона

Сейчас можно было бы признать наш проект завершённым, но хорошо было бы, если бы всё необходимое для работы домофона само запускалось бы на Raspberry Pi при включении устройства.

Шаг 9: организация автоматического запуска программы на Raspberry Pi


Вернёмся на Raspberry Pi и войдём в уже знакомую нам папку:

cd Desktop/Seajei-3.1.8/SamplePrograms/RaspberryPi/Doorbell

Снова откроем файл README:

cat README

Там можно найти 4 команды, которые позволят нам наладить автоматический запуск программы при включении устройства. Можете скопировать их оттуда и выполнить. Если хотите — можете просто выполнить следующую длинную команду:

cp doorbell /home/pi/Desktop; sudo cp raspidoorbell.service /lib/systemd/system; sudo systemctl start raspidoorbell.service; sudo systemctl enable raspidoorbell.service

Если система вас об этом попросит — выполните следующую команду:

sudo systemctl daemon-reload

Теперь всё готово! Перезагрузите плату. После этого должен зажечься красный индикатор на камере, что будет указывать на то, что программа, обеспечивающая работу домофона, успешно запустилась.

А теперь решим ещё одну небольшую проблему. Дело в том, что редактирование doorbell.c с последующей компиляцией и запуском программы приводит к ошибке из-за того, что программа doorbell автоматически запускается в виде сервиса. А две копии программы одновременно работать не могут. В подобной ситуации надо остановить сервис такой командой:

sudo systemctl stop raspidoorbell.service

Шаг 10: возьмите себе чего-нибудь выпить


Отпразднуйте успешное завершение проекта — вы это заслужили.

Планируете ли вы сделать видеодомофон на основе Raspberry Pi?