Índice:

Lance sua apresentação de slides de fotos de férias com um toque de mágica!: 9 etapas (com fotos)
Lance sua apresentação de slides de fotos de férias com um toque de mágica!: 9 etapas (com fotos)

Vídeo: Lance sua apresentação de slides de fotos de férias com um toque de mágica!: 9 etapas (com fotos)

Vídeo: Lance sua apresentação de slides de fotos de férias com um toque de mágica!: 9 etapas (com fotos)
Vídeo: APRESENTAÇÃO NA ESCOLA 2024, Novembro
Anonim
Lance sua apresentação de slides de fotos de férias com um toque de mágica!
Lance sua apresentação de slides de fotos de férias com um toque de mágica!
Lance sua apresentação de slides de fotos de férias com um toque de mágica!
Lance sua apresentação de slides de fotos de férias com um toque de mágica!

Com o passar dos anos, desenvolvi o hábito de levar uma pequena estatueta comigo quando viajo: geralmente compro um pequeno desenho em branco (como o da foto) e o pinto para combinar com a bandeira e o tema do país. estou visitando (neste caso, a Sicília).

A ideia é então tirar fotos da estatueta em frente a cenas ou monumentos famosos do referido país: acho muito mais engraçado do que ter fotos só com o próprio monumento (tem o Google para isso e é muito mais barato) mas ainda mais fácil do que ter estar em todas as fotos eu mesmo (não sou um fã, para ser honesto)

Como é sempre divertido reunir as pessoas com quem você saiu de férias alguns dias depois de voltar para assistir as fotos, achei que seria bom se cada estatueta pudesse de alguma forma lançar automaticamente um slideshow das fotos da viagem para a qual foram feitas.

Este instrutível irá explicar como eu fiz isso, usando NFC, a raspberry pi, nodejs e osmc

Etapa 1: Visão geral da solução

Visão geral da solução
Visão geral da solução
Visão geral da solução
Visão geral da solução

Como toda a configuração inclui algumas coisas, aqui está uma visão geral do que está envolvido para ajudá-lo a entender tudo o que se segue:

Hardware

- a estatueta é feita em casa: já que estou escrevendo estas instruções bem no meio de uma viagem de uma semana em Copenhagen / Oslo / Estocolmo / Helsinque, vou incluir algumas fotos da estatueta sendo feita para esta viagem

- embaixo de cada estatueta há um chip NFC: estou usando adesivos redondos que cabem embaixo de cada estatueta, mas você pode usar qualquer outro formato - apenas certifique-se de que o chip que você usa é compatível com o seu leitor

- para exibir as imagens, usarei um raspberry pi com OSMC instalado: é meu reprodutor de mídia preferido para programas de TV e filmes, por isso já está conectado à minha TV

- para que o raspberry pi leia as tags NFC, adicionei um leitor NFC - o que usei é o Explore-NFC da NXP, disponível em muitos sites: ele se conecta ao Pi e funciona como um escudo

Programas

No Raspberry Pi, um script NodeJS aguarda a leitura de uma tag NFC: uma vez feito isso, o script verifica seu ID em relação a uma lista de valores / pares com cada pasta da fonte de imagens no OSMC e o ID NFC correspondente, conforme configurado por o usuário.

Quando a tag é lida, se o ID estiver na lista, o script Node diz ao OSMC para iniciar a apresentação de slides para esta pasta específica. Para construir / configurar essa lista, o mesmo script NodeJS inicia uma função de digitalização a cada 5 minutos: ele verifica cada diretório dentro da fonte "Imagens" no OSMC (usando a API JSON-RPC que a Kodi oferece) e o adiciona a uma lista que é salva no disco. Ao editar esse arquivo de texto diretamente, o usuário pode adicionar o ID NFC correspondente para cada álbum.

Etapa 2: Criação da estatueta

Criando a estatueta
Criando a estatueta
Criando a estatueta
Criando a estatueta
Criando a estatueta
Criando a estatueta
Criando a estatueta
Criando a estatueta

Você pode usar praticamente qualquer coisa que quiser para sua estatueta: eu adoro usar esses brinquedos de arte de vinil porque eles são - relativamente - fáceis de desenhar, mesmo para alguém como eu, que não gosta de desenhar, e bastante fáceis de transportar. Encomendo-os em sua versão em branco, faça você mesmo, no menor tamanho possível e desenho sobre eles com marcadores Posca. Aqui você pode ver o que fiz para esta viagem, com as bandeiras dos quatro países que visitamos - elas eram parecidas o suficiente para que eu pudesse combiná-las lado a lado. Você pode usar várias camadas de tinta, desde que deixe cada uma secar antes de pintar a próxima. Depois que termino de pintar, gosto de usar uma pistola de ar quente na tinta por alguns minutos, pois li que na verdade é o calor que ajuda a definir a pintura de Posca.

Na última foto você pode ver Sven - eu sempre dou nomes a eles - fazendo uma pausa em Oslo após uma manhã bastante longa. Ele não tem a cabeça do brinquedo original, já que consegui bagunçar isso um minuto antes de sair: tive que desmontar um brinquedo anterior para usar a cabeça. Não posso dizer que isso nunca aconteceu antes …

Etapa 3: Instale o OSMC

Instale OSMC
Instale OSMC

A primeira coisa que fiz foi instalar o OSMC em um cartão micro SD para o Raspberry Pi: em nossa configuração, ele servirá como reprodutor de mídia para assistir suas fotos. Não vou entrar em muitos detalhes sobre esse aspecto, pois ele está bem documentado (existem alguns Instructables disponíveis se você precisar de ajuda). Basta baixar o instalador no seu computador e seguir as instruções. Assim que terminei, apenas conectei um teclado e um mouse e conectei o HDMI à TV e segui o assistente de configuração para configurar o fuso horário etc.

Por fim, adicionei às fontes o diretório onde armazeno minhas imagens: no meu caso, elas são armazenadas em um NAS com IP fixo na mesma rede, mas você também pode armazená-las em uma unidade USB ou na própria pasta pessoal, desde que seu micro SD seja grande o suficiente.

Ao adicionar a fonte, você será solicitado a inserir um nome para ela: você pode deixar o padrão ou alterá-lo, mas certifique-se de anotá-lo porque precisaremos dele mais tarde. No meu caso, chamei-o de "MyPictures"

Agora você deve ver o conteúdo do diretório adicionado e navegar pelas suas fotos: no meu caso, tenho um subdiretório para cada viagem.

Parabéns, agora você tem uma central de mídia com suas fotos e pode iniciar uma apresentação de slides para uma pasta específica (como bônus, você também pode usá-la para reproduzir seus vídeos ou músicas)

Etapa 4: configurar o leitor

Para o resto do instrutível, estaremos nos conectando ao Pi usando a linha de comando sobre SSH. Para fazer isso, basta conectar o Pi à sua rede usando um cabo Ethernet e usar o terminal ou um sotware dedicado para se conectar ao Pi. No Mac OS e Linux, o comando é

ssh [email protected]

Você será solicitado a inserir uma senha, é osmc novamente

Para que o leitor possa funcionar, o SPI deve estar habilitado: na maioria das distribuições, como Raspbian, isso pode ser feito usando raspi-config, uma ferramenta de configuração que permite alterar alguns valores de configuração.

OSMC, no entanto, não inclui raspi-config, para sua própria segurança ao usá-lo. Em vez disso, desligue o Raspberry, ejete o cartão micro SD e apenas monte-o no seu computador: a partição de "boot" agora deve estar visível. Lá, na raiz do volume, você verá um arquivo chamado "config.txt" - basta abri-lo e adicionar esta linha no final:

"dtparam = spi = on"

Agora você pode salvar o arquivo, reiniciar e o SPI deve ser habilitado.

Depois disso, você precisará baixar o arquivo ZIP anexado e descompactá-lo no raspberry - recomendo criar uma pasta Projetos e descompactá-la lá. Para fazer isso, você pode se conectar ao Raspberry usando FTP sobre SSH (eu uso o CyberDuck para fazer isso) ou colocar o arquivo em uma unidade USB e usar o gerenciador de arquivos Kodi para copiá-lo no Raspberry Pi.

De qualquer forma, depois de copiar o arquivo zip para o Pi, você pode navegar até a pasta para a qual copiou e descompactá-lo, mover para a pasta resultante e instalar o pacote:

descompacte SW2827.zipcd SW2827sudo dpkg -i libneardal0_0.14.3-1_armhf.deb neard-explorenfc_1.2-1_armhf.deb

Se tudo correr bem, você deve ser capaz de conectar o leitor, reiniciar e entrar

explorenfc-basic

Se você aproxima um chip NFC do leitor, ele agora deve exibir um monte de informações do chip (entre outras coisas, seu ID)

Etapa 5: instalar o nó e criar o projeto

A seguir, instalaremos o NodeJS no raspberry para escrever nosso aplicativo.

Queremos instalar o nodejs, mas a versão do repositório padrão é muito antiga, então você deve passar por uma primeira etapa antes: na interface da linha de comando, digite

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

Você pode então digitar

sudo apt install nodejs

para instalar a versão mais recente de nodejs e npm disponível.

Para controlar o KODI de dentro do nodejs, usaremos um pacote npm chamado kodi-ws.

Vamos começar criando um novo projeto: basta digitar o comando

npm init

Serão feitas várias perguntas: para a maioria delas, você pode deixar o padrão, basta escolher um nome para seu aplicativo e inserir seu próprio nome no final. Quando perguntado sobre o ponto de partida, basta deixar index.js

Isso criará um arquivo package.json que resumirá as características do seu pacote, como suas dependências.

Agora você pode entrar

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

Se você abrir o package.json depois disso, notará que todos esses pacotes foram adicionados às dependências.

Etapa 6: O Código, Explicado

O Código, Explicado
O Código, Explicado

Anexado a esta etapa está o código do aplicativo.

Deixei uma boa quantidade de logs que podem ser descomentados para entender o script, mas vamos dividi-los juntos.

Você notará que, apesar de todas as funções declaradas, o código faz apenas algumas coisas no início:

kodi ('localhost', 9090).then (função (conexão) {

O script tenta se conectar à API OSMC JSON-RPC. Assim que tiver êxito (e somente então), ele continuará com o resto do arquivo.

Se, por algum motivo, você não estiver executando isso no Raspberry Pi, altere o host local para o seu endereço IP. Certifique-se também de que nas configurações de serviço dentro do OSMC (Configurações / Serviços) a caixa de seleção "Permitir o controle remoto de aplicativos em outros sistemas" (veja a imagem)

O resto do arquivo é principalmente declarações de funções que usaremos mais tarde: as duas funções que são realmente iniciadas a partir daqui são (linhas 172/173)

scanAndSetCron (); listenForTag ();

Em scanAndSetCron:

- a função scanPictures é iniciada. Dentro dele, verificamos se a variável "mypicturedirectory", que irá conter o caminho para nossas fotos, está vazia. Se for, pedimos ao OSMC que nos forneça todas as fontes de que dispõe para o conteúdo da imagem (dentro da função getPictureDirectory, linha 11):

var piclist = espera conexão. Files. GetSources ("imagens");

O OSMC nos dá um array em troca: para cada item, verificamos se o nome da fonte inclui "Meu": se for esse o caso, nós o armazenamos como nossa fonte de imagem (linha 16 e seguintes). Aqui é onde você deseja alterar a string de "Meu" para o que você inseriu anteriormente como um nome para a fonte de suas fotos

if (piclist.sources .label.includes ("Meu")) {console.log (">>> Encontrado o diretório" + piclist.sources .file); mypicturedirectory = piclist.sources .file; }

Agora que temos o caminho para a fonte (essencialmente a pasta raiz para nossos álbuns), pedimos ao OSMC para fazer a varredura e adicionar o caminho para cada pasta a um array chamado album_directories (se ainda não estiver lá). Uma vez que esta função será executada a cada X segundos, verificamos se o diretório ainda não está na lista antes de adicioná-lo, com o ID NFC definido como uma string vazia - dessa forma, cada nova pasta que você adicionar às suas imagens será automaticamente adicionado - linha 46

for (var j = 0; j <diretórios.length; j ++) {if (diretórios [j].filetype.includes ("diretório")) {if (searchDirectory (diretórios [j].file, album_directories)) {console. log (diretórios [j].file + "já existe"); } else {console.log (">> Adicionando dir" + diretórios [j].file); album_directories.push ({diretório: diretórios [j].file, nfc: ""}); }}}

No final, salvamos o array album_directories em um arquivo json no Pi, que tentamos carregar toda vez que a função é executada: isso acontece no final da função scanAndSetCron onde usamos um pacote parecido com cron para garantir que nossa função seja executada a cada 15 segundos.

O arquivo JSON que geramos, album_directories.json, pode ser aberto usando qualquer aplicativo de bloco de notas. Depois de fazer isso, você verá a lista de seus álbuns de fotos, cada um com um campo "nfc" em branco:

[{"diretório": "/ home / osmc / Pictures / Mada 2016 /", "nfc": ""}, {"diretório": "/ home / osmc / Pictures / NewFolder /", "nfc": "" }, {"diretório": "/ home / osmc / Pictures / Test /", "nfc": ""}]

Neste campo, você agora deve colar o ID da tag que deseja associar a este álbum. Para obter esse ID, basta navegar até a pasta SW2827, executar explorenfc-basic e digitalizar a tag que deseja usar. Na saída que você obtém, apenas procure o valor próximo ao UID ISO14443A. Copie-o para o álbum que deseja configurar. No meu caso, por exemplo,

[{"diretório": "/ home / osmc / Pictures / Mada 2016 /", "nfc": "040A12EAFC3881"}, {"diretório": "/ home / osmc / Pictures / NewFolder /", "nfc": " "}, {" diretório ":" / home / osmc / Pictures / Test / "," nfc ":" "}]

Salve o arquivo e seu conteúdo será carregado na próxima vez que você iniciar o aplicativo.

Na função listenForTag, fazemos exatamente isso: uma vez que não parece haver uma porta dedicada da biblioteca do leitor para NodeJS, contamos com childprocesses para iniciar o binário para o leitor:

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

Contamos com um eventlistener para receber a saída desta execução: dentro do callback para child.stdout.on ('data', function (data), analisamos a saída deste comando usando a função analyzeOutput: estamos procurando o linha que vimos anteriormente, começando com "ISO14443A UID:", já que é onde o ID da tag que digitalizamos está armazenado. Assim que encontrarmos essa linha, cortamos e armazenamos o ID em um objeto (chamado ID, como original).

Por fim, tentamos corresponder esse ID aos IDs que inserimos na matriz de objetos album_directories (carregados por meio do arquivo album_directories.json). Se uma correspondência for encontrada, instruímos o OSMC a iniciar uma apresentação de slides para essa pasta específica:

var nfcid = analyzeOutput (dados); console.log ("nfcid é" + nfcid.id); var correspondentealbum = searchTag (nfcid.id, album_directories); if (álbum correspondente) {console.log ("Álbum encontrado" + JSON.stringify (álbum correspondente) + "para esta tag"); var args = [{'caminho': correspondente álbum.diretório}]; connection.run ('Player. Open', args); } listenForTag ();

Você percebeu como no final da função, lançamos listenForTag novamente? Essa é a única solução alternativa que encontrei para fazer o aplicativo funcionar: explorenfc-basic irá, por padrão, esperar por uma tag, lê-la e depois sair. O aplicativo tem um modo contínuo que podemos chamar usando explorenfc-basic -k, mas neste modo, o child_process nunca exibe o conteúdo da tag, pois nunca termina (em outras palavras, child.stdout.on ('data') nunca é disparado) Como não encontrei nenhuma outra maneira de usar este leitor, o que estamos fazendo aqui é basicamente iniciar o explorenfc-basic no modo de tag única e, quando uma tag é lida, executamos listenForTag e, portanto, reiniciamos o explorenfc-basic.

Se eu tivesse que voltar (e acho que vou), escolheria um leitor NFC que oferece mais opções: por exemplo, Adafruit (você deve ter notado que gosto muito deles) tem este leitor https:// www.adafruit.com / product / 789 que é compatível com libnfc, o que eu acredito que significa que a interface do leitor será muito mais limpa do que chamar um processo filho de dentro do nó e analisar o stdout!

Etapa 7: Experimente

Para iniciar o aplicativo, basta navegar até essa pasta e digitar "node index.js" (ou npm start, já que o configuramos anteriormente em package.json). Nos logs, você deve ver o aplicativo se conectando ao OSMC / Kodi e digitalizando pela primeira vez. Após alguns segundos, o arquivo album_directories.json será criado dentro do diretório do projeto; Em seguida, você pode inserir os IDs da tag NFC conforme explicado anteriormente e associá-los aos álbuns que deseja.

Etapa 8: iniciar automaticamente

Para resumir, criamos o aplicativo Node que (1) verifica sua biblioteca de imagens KODI e tenta encontrar a pasta onde você armazena suas fotos de férias, (2) ouve as tags NCF contando com explorenfc-basic e então (3) inicia o álbum associado a este ID NFC.

Para que todo esse processo seja executado em segundo plano, usaremos o PM2, um gerenciador de processos para o nó.

Na linha de comando, navegue até a pasta de seus projetos (onde o arquivo index.js está localizado) e digite as seguintes linhas:

sudo npm install pm2 -gpm2 start index.js

Seu aplicativo agora é monitorado pelo PM2 e será reiniciado automaticamente! Para ter certeza de que ele foi realmente iniciado, digite pm2 list e você deverá vê-lo na lista. Se você quiser ver os logs, basta digitar pm2 logs.

Recomendado: