Оглавление:

Запустите слайд-шоу с праздничными фотографиями с волшебным прикосновением!: 9 шагов (с изображениями)
Запустите слайд-шоу с праздничными фотографиями с волшебным прикосновением!: 9 шагов (с изображениями)

Видео: Запустите слайд-шоу с праздничными фотографиями с волшебным прикосновением!: 9 шагов (с изображениями)

Видео: Запустите слайд-шоу с праздничными фотографиями с волшебным прикосновением!: 9 шагов (с изображениями)
Видео: «Как самостоятельно организовать крутую вечеринку» 2024, Июль
Anonim
Запустите слайд-шоу с праздничными фотографиями с легкостью!
Запустите слайд-шоу с праздничными фотографиями с легкостью!
Запустите слайд-шоу с праздничными фотографиями с легкостью!
Запустите слайд-шоу с праздничными фотографиями с легкостью!

С годами у меня выработалась привычка брать с собой в поездку небольшую фигурку: я часто покупаю небольшой пустой артвой (как на картинке) и раскрашиваю его, чтобы он соответствовал флагу и тематике страны, в которой я живу. м выездная (в данном случае Сицилия).

Идея состоит в том, чтобы сфотографировать статуэтку на фоне сцен или известных памятников из указанной страны: я считаю это намного забавнее, чем снимать только сам памятник (для этого есть Google, и это намного дешевле), но все же проще, чем иметь быть на каждой фотографии я (не фанат, если честно)

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

Это руководство объяснит, как я это сделал, используя NFC, raspberry pi, nodejs и osmc.

Шаг 1. Обзор решения

Обзор решения
Обзор решения
Обзор решения
Обзор решения

Поскольку вся установка включает в себя несколько вещей, вот общий обзор того, что задействовано, чтобы помочь вам понять все, что следует ниже:

Аппаратное обеспечение

- фигурка самодельная: так как я пишу эти инструкции прямо в середине недельной поездки в Копенгаген / Осло / Стокгольм / Хельсинки, я включу несколько снимков фигурки, сделанной для этой поездки

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

- для отображения изображений я буду использовать raspberry pi с установленным OSMC: это мой медиаплеер, который я предпочитаю для телешоу и фильмов, поэтому он уже подключен к моему телевизору

- для того, чтобы Raspberry Pi мог читать теги NFC, я добавил считыватель NFC - тот, который я использовал, - это Explore-NFC от NXP, доступный на многих веб-сайтах: он подключается к Pi и действует как щит

Программное обеспечение

На Raspberry Pi сценарий NodeJS ожидает чтения тега NFC: как только это будет сделано, сценарий проверяет его идентификатор по списку значений / пар с каждой папкой из источника изображений на OSMC и соответствующим идентификатором NFC, настроенным с помощью Пользователь.

Когда тег читается, если идентификатор присутствует в списке, сценарий Node сообщает OSMC о необходимости запуска слайд-шоу для этой конкретной папки. Для создания / настройки этого списка тот же сценарий NodeJS запускает функцию сканирования каждые 5 минут: это сканирует каждый каталог в источнике «Изображения» на OSMC (используя JSON-RPC API, который предлагает Kodi) и добавляет его в список, который затем сохраняется на диске. Редактируя этот текстовый файл напрямую, пользователь может добавить соответствующий идентификатор NFC для каждого альбома.

Шаг 2: Создание фигурки

Создание фигурки
Создание фигурки
Создание фигурки
Создание фигурки
Создание фигурки
Создание фигурки
Создание фигурки
Создание фигурки

Вы можете использовать практически все, что захотите, для своей фигурки: я люблю использовать эти виниловые художественные игрушки, потому что на них - относительно - легко рисовать даже для кого-то вроде меня, который не любит рисовать, и их довольно легко носить с собой. Я заказываю их в чистом виде, сделай сам, в самом маленьком размере, и рисую на них маркерами Posca. Здесь вы можете увидеть тот, который я сделал для этой поездки, с флагами четырех стран, которые мы посетили - они оказались достаточно похожими, чтобы я мог совместить их бок о бок. Вы можете использовать несколько слоев краски, если вы действительно даете каждому высохнуть перед покраской следующего. После того, как я закончил рисовать, мне нравится использовать тепловую пушку на краске в течение нескольких минут, так как я читал, что на самом деле тепло помогает набору краски Posca.

На последнем снимке вы можете увидеть, как Свен - я всегда называю им имена - отдыхает в Осло после довольно долгого утра. У него нет головы из оригинальной игрушки, так как мне удалось испортить это за минуту до отъезда: мне пришлось разобрать предыдущую игрушку, чтобы вместо этого использовать ее голову. Не могу сказать, что такого раньше не было …

Шаг 3: Установите OSMC

Установить OSMC
Установить OSMC

Первое, что я сделал, - это установил OSMC на карту micro SD для Raspberry Pi: в нашей настройке он будет служить медиаплеером для просмотра ваших изображений. Я не буду вдаваться в подробности этого аспекта, поскольку он достаточно хорошо документирован (есть несколько доступных инструкций, если вам нужна помощь). Просто скачайте установщик на свой компьютер и следуйте инструкциям. Как только я закончил, я просто подключил клавиатуру и мышь, подключил HDMI к телевизору и, следуя указаниям мастера настройки, установил часовой пояс и т. Д.

Наконец, я добавил каталог, в котором я храню свои изображения, в источники: в моем случае они хранятся на NAS с фиксированным IP-адресом в той же сети, но вы также можете хранить их на USB-накопителе или в самой домашней папке, при условии, что ваша микро SD достаточно велика.

При добавлении источника вам будет предложено ввести для него имя: вы можете оставить значение по умолчанию или изменить его, но обязательно запишите его, потому что он нам понадобится позже. В моем случае я назвал это "MyPictures"

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

Поздравляем, теперь у вас есть медиацентр с вашими изображениями и вы можете запускать слайд-шоу для определенной папки (в качестве бонуса вы также можете использовать его для воспроизведения своих видео или музыки)

Шаг 4: Настройте Ридер

Для остальной части инструкций мы будем подключаться к Pi с помощью командной строки через SSH. Для этого просто подключите Pi к своей сети с помощью кабеля Ethernet и используйте терминал или специальное программное обеспечение для подключения к Pi. В Mac OS и Linux команда:

ssh [email protected]

Вам будет предложено ввести пароль, это снова osmc

Чтобы читатель мог работать, должен быть включен SPI: в большинстве дистрибутивов, таких как Raspbian, это можно сделать с помощью raspi-config, инструмента настройки, который позволяет вам изменять некоторые значения конфигурации.

OSMC, однако, не включает raspi-config для вашей безопасности при его использовании. Вместо этого выключите Raspberry, извлеките карту micro SD и просто подключите ее к компьютеру: теперь должен быть виден «загрузочный» раздел. Там, в корне тома, вы увидите файл с именем «config.txt» - просто откройте его и добавьте эту строку в конец:

"dtparam = spi = on"

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

После этого вам нужно будет скачать прикрепленный ZIP-файл и разархивировать его на малине - рекомендую создать папку Projects и разархивировать ее туда. Для этого вы можете либо подключиться к Raspberry, используя FTP через SSH (для этого я использую CyberDuck), либо поместить файл на USB-накопитель и использовать файловый менеджер Kodi, чтобы скопировать его на Raspberry Pi.

В любом случае, как только вы скопировали zip-файл на Pi, вы можете перейти в папку, в которую вы его скопировали, и разархивировать ее, перейти в полученную папку и установить пакет:

распаковать SW2827.zipcd SW2827sudo dpkg -i libneardal0_0.14.3-1_armhf.deb neard-explorenfc_1.2-1_armhf.deb

Если все пойдет хорошо, вы сможете подключить ридер, перезагрузить компьютер и ввести

explorenfc-basic

Если вы поднесете чип NFC к считывателю, он должен теперь отобразить кучу информации с чипа (среди прочего, его идентификатор).

Шаг 5: Установите узел и создайте проект

Затем мы установим NodeJS на малину, чтобы написать наше приложение.

Мы хотим установить nodejs, но версия репозитория по умолчанию действительно старая, поэтому вам нужно выполнить первый шаг до этого: в интерфейсе командной строки введите

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

Затем вы можете ввести

sudo apt установить nodejs

чтобы установить последнюю доступную версию nodejs и npm.

Чтобы управлять KODI из nodejs, мы собираемся использовать пакет npm под названием kodi-ws.

Начнем с создания нового проекта: просто введите команду

npm init

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

Это создаст файл package.json, который суммирует характеристики вашего пакета, такие как его зависимости.

Теперь вы можете войти

sudo npm install kodi-ws sudo npm install jsonfilesudo npm install cronsudo npm install child_process

Если после этого вы откроете package.json, вы заметите, что все эти пакеты были добавлены в зависимости.

Шаг 6. Объяснение кода

Разъяснение кода
Разъяснение кода

К этому шагу прикреплен код приложения.

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

Вы заметите, что, несмотря на все объявленные функции, код сначала выполняет только несколько вещей:

kodi ('localhost', 9090).then (функция (соединение) {

Сценарий пытается подключиться к OSMC JSON-RPC API. Как только это удастся (и только тогда), он продолжит работу с остальной частью файла.

Если по какой-то причине вы не запускаете это со своего Raspberry Pi, измените localhost на свой IP-адрес. Также убедитесь, что в настройках службы внутри OSMC (Настройки / Службы) установлен флажок «Разрешить удаленное управление из приложений в других системах» (см. Рисунок)

Остальная часть файла - это в основном объявления функций, которые мы будем использовать позже: две функции, которые фактически запускаются отсюда (строки 172/173)

scanAndSetCron (); listenForTag ();

В scanAndSetCron:

- запускается функция scanPictures. Внутри него мы проверяем, пуста ли переменная mypicturedirectory, которая будет содержать путь к нашим картинкам. Если это так, мы просим OSMC предоставить нам все имеющиеся у него источники для графического содержимого (внутри функции getPictureDirectory, строка 11):

var piclist = await connection. Files. GetSources ("картинки");

OSMC возвращает нам массив: для каждого элемента мы проверяем, включает ли имя источника «My»: в этом случае мы сохраняем его как источник изображения (строка 16 и последующие). Здесь вы захотите изменить строку с "My" на то, что вы ввели ранее в качестве имени для своего источника изображений.

if (piclist.sources .label.includes ("My")) {console.log (">>> Найден каталог" + piclist.sources .file); mypicturedirectory = piclist.sources .file; }

Теперь, когда у нас есть путь к источнику (по сути, к корневой папке наших альбомов), мы просим OSMC просканировать его и добавить путь для каждой папки в массив с именем album_directories (если его еще нет). Поскольку эта функция будет запускаться каждые X секунд, мы проверяем, что каталога еще нет в списке, прежде чем добавлять его, с идентификатором NFC, установленным на пустую строку - таким образом, каждая новая папка, которую вы добавляете к своим изображениям, будет автоматически добавлено - строка 46

for (var j = 0; j <directoryies.length; j ++) {if (каталоги [j].filetype.includes ("каталог")) {if (searchDirectory (каталоги [j].file, album_directories)) {console. журнал (каталоги [j].file + "уже там"); } else {console.log (">> Добавление каталога" + каталоги [j].file); каталог_альбома.push ({каталог: каталоги [j]. файл, nfc: ""}); }}}

В конце мы сохраняем массив album_directories в файл json на Pi, который мы пытаемся загружать каждый раз при выполнении функции: это происходит в конце функции scanAndSetCron, где мы используем cron-подобный пакет, чтобы гарантировать выполнение нашей функции. каждые 15 секунд.

Созданный нами файл JSON, album_directories.json, можно открыть с помощью любого приложения блокнота. Как только вы это сделаете, вам будет представлен список ваших фотоальбомов, в каждом из которых будет пустое поле «nfc»:

[{"каталог": "/ home / osmc / Pictures / Mada 2016 /", "nfc": ""}, {"каталог": "/ home / osmc / Pictures / NewFolder /", "nfc": "" }, {"каталог": "/ home / osmc / Pictures / Test /", "nfc": ""}]

В это поле теперь нужно вставить идентификатор тега, который вы хотите связать с этим альбомом. Чтобы получить этот идентификатор, просто перейдите в папку SW2827, запустите explorenfc-basic и просканируйте тег, который хотите использовать. В выходных данных просто найдите значение рядом с UID ISO14443A. Скопируйте его в альбом, который хотите настроить. В моем случае, например,

[{"каталог": "/ home / osmc / Pictures / Mada 2016 /", "nfc": "040A12EAFC3881"}, {"каталог": "/ home / osmc / Pictures / NewFolder /", "nfc": " "}, {" каталог ":" / home / osmc / Pictures / Test / "," nfc ":" "}]

Сохраните файл, и его содержимое будет загружено при следующем запуске приложения.

В функции listenForTag мы делаем именно это: поскольку, похоже, нет выделенного порта библиотеки чтения для NodeJS, мы полагаемся на дочерние процессы для запуска двоичного файла для чтения:

var spawn = require ('child_process'). spawn, child = spawn ('/ usr / bin / explorenfc-basic', );

Мы полагаемся на прослушиватель событий для получения вывода от этого выполнения: внутри обратного вызова для child.stdout.on ('data', function (data) мы анализируем вывод этой команды с помощью функции analysisOutput: мы ищем строку, которую мы видели ранее, начиная с «ISO14443A UID:», поскольку именно там хранится идентификатор отсканированного тега. Как только мы находим эту строку, мы сокращаем ее и сохраняем идентификатор объекта (называемого идентификатором, как оригинал).

Наконец, мы пытаемся сопоставить этот идентификатор с идентификаторами, которые мы ввели в массив объектов album_directories (загружаемых через файл album_directories.json). Если совпадение найдено, мы даем команду OSMC запустить слайд-шоу для этой конкретной папки:

var nfcid = analysisOutput (данные); console.log ("nfcid is" + nfcid.id); var соответствующийalbum = searchTag (nfcid.id, album_directories); if (соответствующий альбом) {console.log («Найденный альбом» + JSON.stringify (соответствующий альбом) + «для этого тега»); var args = [{'путь': соответствующий каталог-альбом}]; connection.run ('Player. Open', аргументы); } listenForTag ();

Вы заметили, как в конце функции мы снова запускаем listenForTag? Это единственный способ заставить приложение работать: по умолчанию explorenfc-basic будет ждать тега, читать его, а затем завершать работу. В приложении есть непрерывный режим, который мы можем вызвать с помощью explorenfc-basic -k, но в этом режиме child_process никогда не выводит содержимое тега, поскольку он никогда не заканчивается (другими словами, child.stdout.on ('data') никогда не запускается). Поскольку я не нашел другого способа использовать этот ридер, то, что мы здесь делаем, в основном запускаем explorenfc-basic в режиме одного тега, и когда тег читается, мы запускаем listenForTag и, следовательно, перезапускаем explorenfc-basic.

Если бы мне пришлось вернуться (и я думаю, что вернусь), я бы выбрал считыватель NFC, который предлагает больше возможностей: например, у Adafruit (вы могли заметить, что я их очень люблю) есть этот считыватель https:// www..adafruit.com / product / 789, совместимый с libnfc, что, как я считаю, означает, что интерфейс для читателя будет намного проще, чем вызов дочернего процесса из узла и синтаксический анализ stdout!

Шаг 7: Попробуйте

Чтобы запустить приложение, просто перейдите в эту папку и введите «node index.js» (или npm start, поскольку мы настроили его ранее в package.json). В журналах вы должны увидеть, как приложение подключается к OSMC / Kodi и выполняет сканирование в первый раз. Через несколько секунд внутри каталога проекта будет создан файл album_directories.json; Затем вы можете ввести идентификаторы тегов NFC, как объяснялось ранее, и связать их с нужными альбомами.

Шаг 8: запускать автоматически

Подводя итог, мы создали приложение Node, которое (1) сканирует вашу библиотеку изображений KODI и пытается найти папку, в которой вы храните праздничные изображения, (2) прослушивает теги NCF, полагаясь на explorenfc-basic, а затем (3) запускает альбом, связанный с этим идентификатором NFC.

Чтобы весь этот процесс работал в фоновом режиме, мы будем использовать PM2, менеджер процессов для узла.

В командной строке перейдите в папку с вашими проектами (где находится ваш файл index.js) и введите следующие строки:

sudo npm install pm2 -gpm2 start index.js

Ваше приложение теперь контролируется PM2 и будет перезапущено автоматически! Чтобы убедиться, что он действительно запущен, введите pm2 list, и вы должны увидеть его в списке. Если вы хотите просмотреть журналы, просто введите pm2 logs.

Рекомендуемые: