Шрифт
Видеотрансляция на Youtube с Arduino Yun
Play

Видеотрансляция на Youtube с Arduino Yun

Вероятно, вы встречали беспроводные камеры охранных систем.

Вы можете спокойно установить подобное устройство в вашем доме или за его пределами, подключить к вашей WiFi сети и получить доступ к видеостриму из любой части мира при наличии интернета. Но подобные видеокамеры используют интерфейс, предоставляемый производителем, что слегка ограничивает ваши возможности.

В этом проекте мы создадим наш собственный DIY аналог подобного устройства. Проект основан на Arduino Yun, к которому мы подключим стандартную USB веб-камеру и пироэлектрический датчик движения.

В первой части проекта мы реализуем возможность делать фотографии, когда обнаруживается движение - одна из стандартных задач современных охранных систем. Фотографии, сделанные с помощью USB камеры, будут храниться на SD карте, которая предварительно установлена на Yun. Но это не все! Так как мы живем в век интернета, эти фотографии будут автоматически загружаться в какое-то хранилище. В нашем конкретно случае, используем Dropbox для хранения снимков.

Следующий шаг - стрим видеопотока с нашей камеры на Youtube. В результате вы получите собственный стрим, доступный из любой точки мира в онлайн режиме. Интересно? Тогда давайте приступим!

Подключение оборудования

Сначала займемся подключением оборудования. Для проекта вам понадобятся: Arduino Yun, USB веб-камера, ПИР датчик движения, microSD карта.

Вы можете выбрать любую USB камеру, которая поддерживает UVC протокол. Большинство современных камер поддерживают этот протокол. В данном проекте используется видеокамера Logitech C270, которая делает снимки с разрешением 720p. Список совместимых видеокамер вы можете найти здесь

Сначала устанавливаем SD карту в плату Arduino Yun:

Подключите видеокамеру к USB порту вашей платы Yun:

Ну и в конце подключите датчик движения к Yun. Просто подключите контакт VCC к пину 5V на Yun, GND к GND, а контакт SIG к пину номер 8 на Arduino Yun:

Ну и в конце-концов подключайте весь проект к компьютеру с помощью microUSB порта!

Настраиваем Temboo и Dropbox аккаунты

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

Первое приложение, в котором вам надо завести аккаунт - Temboo. Temboo будет связующим звеном между вашим Arduino Yun и Dropbox. Ссылка на сервис Temboo.

Вам предложат создать аккаунт и ваше первое приложение. Запишите имя аккаунта, название приложения и ваш API ключ. Они вам пригодятся в дальнейшем. Еще одна вещь, которая вам понадобится с вебсайта Temboo: Temboo Python SDK. Немного позже мы используем его для загрузки фотографий в Dropbox. Скачать можно по ссылке.

После загрузки, распакуйте архив на вашу microSD карту. Теперь переходим к вашему Dropbox аккаунту. Перейдите на сайт Dropbox.

После создания аккаунта, вам надо создать приложение (app), которое даст возможность Arduino Yun загружать снимки в папку в Dropbox. Для создания приложения, перейдите в раздел разработчика в Dropbox.

После этого нажмите “Create app” и выберите какой тип приложения вы хотите создать (в нашем проекте это будет Dropbox API app):

После этого выберите "Files and datastores":

Сейчас надо получить все ключи (keys), которые имеют отношение к вашему Dropbox приложению, чтобы в дальнейшем вы могли использовать их в нашем проекте. На этом этапе нужны App Key и App Secret, которые отображаются на той же странице, что и ваш проект.

После этого нам надо получить Token Key и Token Secret key. Для того, чтобы к ним добраться, надо перейти в InitialiseOAuth Choreo на вебсайте Temboo.

Здесь надо ввести App Key и App Secret. В результате сгенерируется дополнительная информация вроде callback ID, и temporary token secret. Вам также предложат посетить Dropbox для подтверждения аутентификации. В конце попадаете на страницу FinalizeOAuth. Вас попросят ввести ваши App Key, App Secret, callback ID и temporary token secret.

После этого вы получите окончательный Token Key и Token Secret. Запишите их, в дальнейшем они вам пригодятся.

Вам также понадобится Google аккаунт для стрима видео Youtube. Для этого просто создайте его на этой странице.

Настраиваем Arduino Yun

Перед тем как писать программу для нашего проекта, надо установить дополнительный софт на ваш Arduino Yun. Кроме того, надо протестировать USB камеру, чтобы убедится в корректности работы драйверов. В дальнейшей части проекта предполагается, что ваш Arduino Yun настроен и подключен к локальной WiFi сети.

Сначала разбираемся с драйверами UVC. Для их установки вам надо подключить Yun через SSH. Просто откройте терминал и напишите:

В этой строке надо вставить корректное имя вашего Arduino Yun, которое вы настраивали при его первом запуске. Вам также предложат ввести пароль. Если подключение прошло успешно, вы должны увидеть картинку из ASCII символов:

Теперь мы можем установить необходимые расширения. Начните с обновления менеджера:

После этого установите UVC драйвера:

opkg install kmod-video-uvc

opkg install python-openssl

Нам также понадобится утилита fswebcam, которую мы используем, чтобы делать снимки с терминала:

opkg install fswebcam

В последней части проекта нам понадобится библиотека mjpg streaming library:

opkg install mjpg-streamer

Теперь мы готовы тестировать веб-камеру. Убедитесь, SD карта установлена в Yun и перейдите в папку SD карты с помощью команды:

Для проверки камеры сделайте фотографию. Для этого напишите:

Должна отобразиться дополнительная информация с некоторыми ошибками. Не обращайте на них внимания. Важно, чтобы были следующие строчки:

2. Trying source module v4l2.

3. /dev/video0 opened.

Чтобы убедиться в том, что фотография была сделана успешно, извлеките SD карту из Arduino Yun и откройте на персональном компьютере. Фотография должна появиться в корне SD карты:

Откройте изображение, чтобы убедиться, что фотография без искажений, не повреждена. Если фото выглядит хорошо, можете переходить к следующему разделу.

Загружаем фотографии на Dropbox с использованием Arduino Yun

Задача - сделать фотографию, если обнаружено движение в зоне чувствительности датчика движения. Когда фотография сделана, она сохраняется на SD карте и передается в Dropbox. Для этой задачи код делится на две части. Первая часть - это скрипт на Python, который обеспечивает подключение к Dropbox, сохраняет фотографию на SD карту и загружает ее на Dropbox. С использованием Python, загрузить файлы в Dropbox гораздо проще, чем напрямую из скетча Arduino. Вторая часть кода - это сам скетч Arduino, который вызывает Python скрипт, который делает фото с использованием библиотеки Bridge library платы Yun.

Давайте сначала напишем Python скрипт. Он начинается с подключения необходимых библиотек с Temboo Python SDK:

from temboo.core.session import TembooSession

from temboo.Library.Dropbox.FilesAndMetadata import UploadFile

Скрипт на Python принимает имя фотографии, оторую мы хотим загрузить в качестве аргумента:

with open(str(sys.argv[1]), "rb") as image_file:

Помните Temboo запросы, которые вы составляли раньше? Вы должны в них указать:

session = TembooSession('yourTembooName', 'yourTembooApp', 'yourTembooKey')

После этого мы можем создать Dropbox библиотеку для загрузки файлов под названием "Choreo" на Temboo:

Настало время ввести информацию о вашем Dropbox аккаунте, а именно: ваш app Key, app Secret, Access Token an Access Token Secret:

И, в конце-концов, загрузить файл на Dropbox:

Теперь вы можете сохранить этот код в файле под названием upload_picture.py. Обратите внимание, что все файлы доступны на GitHub.

Теперь приступим к скетчу Arduino. Скетч начинается с подключения необходимых библиотек:

Нам надо объявить процесс, который мы собираемся использовать для вызова функций на Linux машине Yun (например, утилита fswebcam, которую мы использовали до этого):

Для каждой фотографии мы будем создавать имя файла, которое хранится в строке:

Также мы объявляем пин, к которому подключен ПИР датчик движения:

И путь к SD карте на Arduino Yun:

String path = "/mnt/sda1/";

Так как нам надо вызвать функции на Linux машине Yun, надо запустить Bridge:

После этого, в loop() части скетча, проверяем, было ли обнаружено движение ПИР сенсором:

if (digitalRead(pir_pin) == true)

📎📎📎📎📎📎📎📎📎📎