Inhoudsopgave:

Start uw diavoorstelling met vakantiefoto's met een vleugje magie! 9 stappen (met afbeeldingen)
Start uw diavoorstelling met vakantiefoto's met een vleugje magie! 9 stappen (met afbeeldingen)

Video: Start uw diavoorstelling met vakantiefoto's met een vleugje magie! 9 stappen (met afbeeldingen)

Video: Start uw diavoorstelling met vakantiefoto's met een vleugje magie! 9 stappen (met afbeeldingen)
Video: Bouw je eigen PowerPoint-sjabloon met spectaculaire resultaten! 2024, November
Anonim
Start uw diavoorstelling met vakantiefoto's met een vleugje magie!
Start uw diavoorstelling met vakantiefoto's met een vleugje magie!
Start uw diavoorstelling met vakantiefoto's met een vleugje magie!
Start uw diavoorstelling met vakantiefoto's met een vleugje magie!

In de loop der jaren heb ik de gewoonte ontwikkeld om een klein beeldje mee te nemen op reis: ik koop vaak een kleine, lege artoy (zoals die op de foto) en schilder deze om te passen bij de vlag en het thema van het land dat ik'' m op bezoek (in dit geval Sicilië).

Het idee is dan om foto's te maken van het beeldje voor scènes of beroemde monumenten uit het genoemde land: ik vind het veel grappiger dan foto's te hebben met alleen het monument zelf (daar is Google voor en het is veel goedkoper) maar nog steeds gemakkelijker dan het hebben om zelf op elke foto te staan (geen fan, om eerlijk te zijn)

Omdat het altijd leuk is om de mensen met wie je op vakantie ging een paar dagen nadat je terugkwam om de foto's te bekijken, bij elkaar te hebben, dacht ik dat het leuk zou zijn als elk beeldje op de een of andere manier automatisch een diavoorstelling zou kunnen starten van de foto's van de reis waarvoor ze zijn gemaakt.

Dit instructable zal uitleggen hoe ik het deed, met behulp van NFC, een raspberry pi, nodejs en osmc

Stap 1: Overzicht van de oplossing

Overzicht van de oplossing
Overzicht van de oplossing
Overzicht van de oplossing
Overzicht van de oplossing

Aangezien de hele setup een paar dingen omvat, is hier een algemeen overzicht van wat erbij komt kijken om je te helpen alles wat volgt te begrijpen:

Hardware

- het beeldje is zelfgemaakt: aangezien ik dit instructables schrijf midden in een reis van een week in Kopenhagen/Oslo/Stockholm/Helsinki, zal ik een paar foto's toevoegen van het beeldje dat voor deze reis wordt gemaakt

- onder elk beeldje is een NFC-chip: ik gebruik ronde stickers die ik onder elk beeldje kan plaatsen, maar je kunt elke andere vormfactor gebruiken - zorg er gewoon voor dat de chip die je gebruikt compatibel is met je lezer

- om de foto's weer te geven, zal ik een raspberry pi gebruiken waarop OSMC is geïnstalleerd: het is mijn favoriete mediaspeler voor tv-programma's en films, dus het is al aangesloten op mijn tv

- om de Raspberry Pi NFC-tags te laten lezen, heb ik een NFC-lezer toegevoegd - degene die ik heb gebruikt is de Explore-NFC van NXP, beschikbaar op veel websites: hij wordt aangesloten op de Pi en fungeert als een schild

Software

Op de Raspberry Pi wacht een NodeJS-script op het lezen van een NFC-tag: zodra dat is gebeurd, controleert het script zijn ID aan de hand van een waarde/paarlijst met elke map van de afbeeldingsbron op OSMC en de bijbehorende NFC-ID zoals geconfigureerd door de gebruiker.

Wanneer de tag wordt gelezen en de ID in de lijst staat, vertelt het Node-script OSMC om de diavoorstelling voor deze specifieke map te starten. Om die lijst te bouwen/configureren, start hetzelfde NodeJS-script elke 5 minuten een scanfunctie: het scant voor elke map in de "Pictures" -bron op OSMC (met behulp van de JSON-RPC API die Kodi biedt) en voegt deze toe aan een lijst die vervolgens op schijf wordt opgeslagen. Door dit tekstbestand direct te bewerken, kan de gebruiker vervolgens voor elk album de bijbehorende NFC-ID toevoegen.

Stap 2: Het beeldje maken

Het beeldje maken
Het beeldje maken
Het beeldje maken
Het beeldje maken
Het beeldje maken
Het beeldje maken
Het beeldje maken
Het beeldje maken

Je kunt vrijwel alles gebruiken voor je beeldje: ik gebruik dat vinylkunstspeelgoed graag omdat het - relatief - gemakkelijk is om op te tekenen, zelfs voor iemand zoals ik die niet van tekenen houdt, en redelijk gemakkelijk mee te nemen. Ik bestel ze in hun blanco, doe-het-zelf-versie, in de kleinste maat die ze hebben, en teken erop met Posca-stiften. Hier kun je degene zien die ik voor deze reis heb gemaakt, met de vlaggen van de vier landen die we bezochten - ze leken toevallig genoeg op elkaar om ze naast elkaar te combineren. Je kunt meerdere verflagen gebruiken, zolang je ze maar echt laat drogen voordat je de volgende verft. Nadat ik klaar ben met schilderen, gebruik ik graag een heteluchtpistool voor een paar minuten op de verf, omdat ik heb gelezen dat het eigenlijk warmte is die de Posca-verfset helpt.

Op de laatste foto zie je Sven - ik geef ze altijd namen - een pauze in Oslo na een behoorlijk lange ochtend. Hij heeft niet het hoofd van het originele speeltje, aangezien ik die ene minuut voor vertrek heb kunnen verknoeien: ik moest een vorig speeltje demonteren om in plaats daarvan zijn hoofd te gebruiken. Ik kan niet zeggen dat dat nog nooit eerder is gebeurd…

Stap 3: Installeer OSMC

OSMC installeren
OSMC installeren

Het eerste dat ik deed, was OSMC installeren op een micro SD-kaart voor de Raspberry Pi: in onze opstelling zal het dienen als de mediaspeler om je foto's te bekijken. Ik zal niet in detail treden op dit aspect omdat het redelijk goed gedocumenteerd is (er zijn een paar Instructables beschikbaar als je hulp nodig hebt). Download het installatieprogramma op uw computer en volg de instructies. Toen ik klaar was, heb ik gewoon een toetsenbord en een muis aangesloten en de HDMI op de tv aangesloten en de installatiewizard gevolgd om de tijdzone in te stellen enz.

Tot slot heb ik de directory waar ik mijn foto's bewaar aan de bronnen toegevoegd: in mijn geval worden ze opgeslagen op een NAS met een vast IP op hetzelfde netwerk, maar je kunt ze ook opslaan op een USB-drive of in de thuismap zelf, op voorwaarde dat uw micro SD groot genoeg is.

Wanneer u de bron toevoegt, wordt u gevraagd om er een naam voor in te voeren: u kunt de standaardwaarde behouden of wijzigen, maar zorg ervoor dat u deze opschrijft, want we zullen deze later nodig hebben. In mijn geval noemde ik het "MyPictures"

Je zou nu de inhoud van de map die je hebt toegevoegd moeten zien en door je foto's bladeren: in mijn geval heb ik een submap voor elke reis.

Gefeliciteerd, je hebt nu een mediacentrum met je foto's erop en je kunt een diavoorstelling starten voor een specifieke map (als bonus kun je het ook gebruiken om je video's of muziek af te spelen)

Stap 4: Configureer de lezer

Voor de rest van de instructie zullen we verbinding maken met de Pi via de opdrachtregel via SSH. Om dat te doen, sluit u de Pi gewoon aan op uw netwerk met behulp van een Ethernet-kabel en gebruikt u de terminal of een speciale software om verbinding te maken met de Pi. Op Mac OS en Linux is de opdracht:

ssh [email protected]

U wordt gevraagd een wachtwoord in te voeren, het is weer osmc

Om de lezer te laten functioneren, moet SPI zijn ingeschakeld: in de meeste distributies zoals Raspbian kan dit worden gedaan door raspi-config te gebruiken, een configuratietool waarmee u enkele configuratiewaarden kunt wijzigen.

OSMC bevat echter geen raspi-config, voor uw eigen veiligheid bij het gebruik ervan. Schakel in plaats daarvan de Raspberry uit, verwijder de micro SD-kaart en monteer deze gewoon op uw computer: de "opstart" -partitie zou nu zichtbaar moeten zijn. Daar, in de hoofdmap van het volume, ziet u een bestand met de naam "config.txt" - open het gewoon en voeg aan het einde deze regel toe:

"dtparam=spi=aan"

U kunt nu het bestand opslaan, opnieuw opstarten en SPI moet worden ingeschakeld.

Daarna moet je het bijgevoegde ZIP-bestand downloaden en uitpakken op de Raspberry - ik raad aan om een map Projecten te maken en het daar uit te pakken. Om dat te doen, kun je ofwel verbinding maken met de Raspberry via FTP via SSH (ik gebruik CyberDuck om dat te doen) of het bestand op een USB-stick zetten en Kodi's bestandsbeheer gebruiken om het op de Raspberry Pi te kopiëren.

Hoe dan ook, als je het zipbestand eenmaal naar de Pi hebt gekopieerd, kun je naar de map navigeren waarnaar je het hebt gekopieerd en het uitpakken, naar de resulterende map gaan en het pakket installeren:

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

Als alles goed gaat, zou je in staat moeten zijn om de lezer aan te sluiten, opnieuw op te starten en dan binnen te gaan

explorenfc-basic

Als u een NFC-chip naar de lezer nadert, zou deze nu een heleboel informatie van de chip moeten weergeven (onder andere zijn ID)

Stap 5: Node installeren en het project maken

Vervolgens installeren we NodeJS op de Raspberry om onze app te schrijven.

We willen nodejs installeren, maar de versie van de standaardrepository is erg oud, dus je moet eerst een eerste stap doorlopen: typ in de opdrachtregelinterface

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

U kunt dan typen

sudo apt install nodejs

om de nieuwste beschikbare versie van nodejs en npm te installeren.

Om KODI vanuit nodejs te besturen, gaan we een npm-pakket gebruiken met de naam kodi-ws.

Laten we beginnen met het maken van een nieuw project: typ gewoon de opdracht

npm init

U krijgt een aantal vragen: voor de meeste kunt u de standaardwaarde laten, kies gewoon een naam voor uw app en voer aan het einde uw eigen naam in. Wanneer u om het startpunt wordt gevraagd, verlaat u index.js

Hiermee wordt een package.json-bestand gemaakt dat de kenmerken van uw pakket samenvat, zoals de afhankelijkheden.

Je kunt nu naar binnen

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

Als je daarna package.json opent, zul je merken dat al die pakketten aan de afhankelijkheden zijn toegevoegd.

Stap 6: De code, uitgelegd

De code, uitgelegd
De code, uitgelegd

Bij deze stap hoort de code voor de app.

Ik heb een behoorlijke hoeveelheid logboekregistratie achtergelaten die niet van commentaar kan worden voorzien om het script te begrijpen, maar we zullen het samen opsplitsen.

Je zult merken dat ondanks alle gedeclareerde functies, de code in eerste instantie maar een paar dingen doet:

kodi('localhost', 9090).then(functie(verbinding) {

Het script probeert verbinding te maken met de OSMC JSON-RPC API. Als het eenmaal is gelukt (en alleen dan), gaat het verder met de rest van het bestand.

Als je dit om de een of andere reden niet vanaf je Raspberry Pi gebruikt, verander dan localhost in je IP-adres. Zorg er ook voor dat in de service-instellingen in OSMC (Instellingen/Services) het selectievakje "Afstandsbediening van applicaties op andere systemen toestaan" (zie afbeelding)

De rest van het bestand bestaat voornamelijk uit declaraties van functies die we later zullen gebruiken: de twee functies die vanaf hier worden gestart zijn (regels 172/173)

scanAndSetCron();listenForTag();

In scanAndSetCron:

- de functie scanPictures wordt gestart. Daarin controleren we of de variabele "mypicturedirectory", die het pad naar onze afbeeldingen bevat, leeg is. Als dat zo is, vragen we OSMC om ons alle bronnen te geven die het heeft voor beeldinhoud (in de functie getPictureDirectory, regel 11):

var piclist = wacht op verbinding. Files. GetSources("afbeeldingen");

OSMC geeft ons een array terug: voor elk item controleren we of de bronnaam "My" bevat: als dat het geval is, slaan we het op als onze afbeeldingsbron (regel 16 en volgende). Dit is waar je de string wilt veranderen van "Mijn" naar wat je eerder hebt ingevoerd als een naam voor je fotobron

if(piclist.sources.label.includes("My")) { console.log(">>> Directory gevonden " + piclist.sources.file); mypicturedirectory = piclist.sources.file; }

Nu we het pad naar de bron hebben (in wezen de hoofdmap naar onze albums), vragen we OSMC om het te scannen en het pad voor elke map toe te voegen aan een array met de naam album_directories (als het er nog niet is). Aangezien deze functie elke X seconden wordt uitgevoerd, controleren we of de map niet al in de lijst staat voordat we deze toevoegen, met de NFC ID ingesteld op een lege tekenreeks - op die manier wordt elke nieuwe map die u aan uw foto's toevoegt automatisch toegevoegd - regel 46

for (var j = 0; j<directories.length;j++) {if(directories[j].filetype.includes("directory")) {if(searchDirectory(directories[j].file, album_directories)) { console. log(directories[j].file +" al aanwezig "); } else { console.log(">> Dir toevoegen " + directories[j].file); album_directories.push({directory:directories[j].file, nfc:""}); } }}

Aan het einde slaan we de album_directories-array op in een json-bestand op de Pi, dat we elke keer proberen te laden als de functie wordt uitgevoerd: dit gebeurt aan het einde van de scanAndSetCron-functie waar we een cron-achtig pakket gebruiken om ervoor te zorgen dat onze functie wordt uitgevoerd elke 15 seconden.

Het JSON-bestand dat we genereren, album_directories.json, kan worden geopend met elke Kladblok-app. Zodra u dit doet, krijgt u de lijst met uw fotoalbums te zien, elk met een leeg "nfc"-veld:

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

In dit veld moet je nu de ID plakken van de tag die je aan dit album wilt koppelen. Om deze ID te krijgen, navigeert u gewoon naar de map SW2827, voert u explorenfc-basic uit en scant u de tag die u wilt gebruiken. Zoek in de uitvoer die u krijgt naar de waarde naast ISO14443A UID. Kopieer het naar het album dat u wilt configureren. In mijn geval bijv.

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

Sla het bestand op en de inhoud ervan wordt geladen wanneer u de app de volgende keer start.

In de functie listenForTag doen we precies dat: aangezien er geen speciale poort van de lezerbibliotheek voor NodeJS lijkt te zijn, vertrouwen we op onderliggende processen om het binaire bestand voor de lezer te starten:

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

We vertrouwen op een eventlistener om de uitvoer van deze uitvoering te ontvangen: binnen de callback voor child.stdout.on('data', function (data), ontleden we de uitvoer van deze opdracht met behulp van de analyseOutput-functie: we zijn op zoek naar de regel die we eerder zagen, beginnend met "ISO14443A UID:", aangezien daar de ID voor de tag die we hebben gescand is opgeslagen. Zodra we die regel hebben gevonden, snijden we deze in en slaan de ID op in een object (genaamd ID, hoe origineel).

Ten slotte proberen we deze ID af te stemmen op de ID's die we hebben ingevoerd in de reeks objecten album_directories (geladen via het bestand album_directories.json). Als er een overeenkomst wordt gevonden, instrueren we OSMC om een diavoorstelling voor die specifieke map te starten:

var nfcid = analyseuitvoer (gegevens); console.log("nfcid is " + nfcid.id); var corresponderendalbum = searchTag(nfcid.id, album_directories); if(corresponderendalbum) { console.log("Gevonden album" + JSON.stringify(corresponderendalbum) + "voor deze tag"); var args = [{'pad': corresponderende album.directory}]; verbinding.run('Speler. Open', argumenten); } listenForTag();

Merk je hoe we aan het einde van de functie listenForTag opnieuw starten? Dat is de enige oplossing die ik heb gevonden om de app te laten werken: explorenfc-basic wacht standaard op een tag, leest deze en sluit af. De app heeft een continue modus die we kunnen aanroepen met explorenfc-basic -k, maar in deze modus voert het child_process nooit de tag-inhoud uit omdat deze nooit eindigt (met andere woorden child.stdout.on('data') wordt nooit geactiveerd). Aangezien ik geen andere manier heb gevonden om deze reader te gebruiken, is wat we hier doen in feite explorenfc-basic starten in de enkele tag-modus, en wanneer een tag wordt gelezen, starten we listenForTag en daarom herstarten we explorenfc-basic.

Als ik terug zou moeten (en ik denk dat ik dat zal doen), zou ik een NFC-lezer kiezen die meer opties biedt: bijvoorbeeld Adafruit (je hebt misschien gemerkt dat ik er dol op ben) heeft deze lezer https://www.adafruit.com/product/789 dat compatibel is met libnfc, wat volgens mij betekent dat de lezer veel schoner zal zijn om mee te communiceren dan een kindproces vanuit een knooppunt aan te roepen en de stdout te parseren!

Stap 7: Probeer het

Om de app te starten, navigeert u gewoon naar die map en typt u "node index.js" (of npm start omdat we het eerder hebben geconfigureerd in package.json). In de logboeken zou u moeten zien dat de app voor het eerst verbinding maakt met OSMC/Kodi en scant. Na een paar seconden wordt het bestand album_directories.json aangemaakt in de projectdirectory; U kunt dan de NFC-tag-ID's invoeren zoals eerder uitgelegd en deze koppelen aan de gewenste albums.

Stap 8: Automatisch starten

Samenvattend hebben we de Node-app gemaakt die (1) scant naar uw KODI-afbeeldingsbibliotheek en probeert de map te vinden waarin u uw vakantiefoto's opslaat, (2) naar NCF-tags luistert door te vertrouwen op explorenfc-basic en vervolgens (3) lanceert het album dat aan deze NFC-ID is gekoppeld.

Om dit hele proces op de achtergrond te laten draaien, gebruiken we PM2, een procesmanager voor node.

Navigeer in de opdrachtregel naar uw projectenmap (waar uw index.js-bestand zich bevindt) en typ de volgende regels:

sudo npm install pm2 -gpm2 start index.js

Je app wordt nu bewaakt door PM2 en wordt automatisch opnieuw gestart! Om er zeker van te zijn dat het daadwerkelijk is gestart, typ je pm2 list en je zou het in de lijst moeten zien. Als je de logs wilt zien, typ je pm2 logs.

Aanbevolen: