INHOUDSOPGAWE:

Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!: 9 stappe (met foto's)
Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!: 9 stappe (met foto's)

Video: Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!: 9 stappe (met foto's)

Video: Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!: 9 stappe (met foto's)
Video: Ed Sheeran - Shape of You (Official Music Video) 2024, Julie
Anonim
Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!
Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!
Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!
Begin u skyfievertoning met vakansiefoto's met 'n tikkie magie!

Deur die jare het ek die gewoonte ontwikkel om 'n klein beeldjie saam te neem as ek op reis is: ek koop gereeld 'n klein, leë artoy (soos die op die foto) en skilder dit volgens die vlag en tema van die land waar ek woon. m besoek (in hierdie geval, Sicilië).

Die idee is dan om die beeldjie voor die skerms of beroemde monumente uit die genoemde land te neem: ek vind dit baie snaakser as om foto's te hê met slegs die monument self (daar is Google daarvoor en dit is baie goedkoper), maar tog makliker as om dit te hê om self op elke prentjie te wees (nie 'n fan nie, om eerlik te wees)

Aangesien dit altyd lekker was om 'n paar dae nadat u na die foto's na die foto's gekyk het, die mense bymekaar te bring, het ek gedink dat dit goed sou wees as elke figuur op 'n manier outomaties 'n skyfievertoning van die foto's van die reis waarvoor hulle gemaak is, kon begin.

Hierdie instruksies sal verduidelik hoe ek dit gedoen het met behulp van NFC, 'n framboos pi, nodejs en osmc

Stap 1: Oorsig van die oplossing

Oorsig van die oplossing
Oorsig van die oplossing
Oorsig van die oplossing
Oorsig van die oplossing

Aangesien die hele opstelling 'n paar dinge bevat, is 'n algemene oorsig van wat daarby betrokke is om u te help om alles wat volg te verstaan:

Hardeware

- die beeldjie is tuisgemaak: aangesien ek hierdie instruksies skryf in die middel van 'n week lange reis in Kopenhagen/Oslo/Stockholm/Helsinki, sal ek 'n paar opnames van die beeldjie wat vir hierdie reis gemaak is, insluit

- onder elke figuur is 'n NFC -chip: ek gebruik ronde plakkers wat ek onder elke figuur kan plaas, maar u kan enige ander vormfaktor gebruik - maak seker dat die chip wat u gebruik, verenigbaar is met u leser

- om die foto's te vertoon, gebruik ek 'n framboospi met OSMC geïnstalleer: dit is my gekose mediaspeler vir TV -reekse en films, sodat dit reeds aan my TV gekoppel is

- sodat die framboos -pi NFC -etikette kon lees, het ek 'n NFC -leser bygevoeg - die een wat ek gebruik het, is die Explore -NFC van NXP, beskikbaar op baie webwerwe: dit word aan die Pi gekoppel en dien as 'n skild

Sagteware

Op die Raspberry Pi wag 'n NodeJS -script op die lees van 'n NFC -tag: sodra dit klaar is, kyk die script na sy ID teen 'n waarde/paarlys met elke gids uit die prentbron op OSMC en die ooreenstemmende NFC ID soos opgestel deur die gebruiker.

As die ID gelees word, en as die ID in die lys is, sê die Node -script OSMC om die skyfievertoning vir hierdie spesifieke gids te begin. soek na elke gids in die bron "Pictures" op OSMC (met behulp van die JSON-RPC API wat Kodi bied) en voeg dit by 'n lys wat dan op die skyf gestoor word. Deur hierdie tekslêer direk te wysig, kan die gebruiker die ooreenstemmende NFC -ID vir elke album byvoeg.

Stap 2: Maak die beeldjie

Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie
Die skep van die beeldjie

U kan omtrent alles wat u wil vir u beeldjie gebruik: ek hou daarvan om die vinyl -speelgoed te gebruik, want dit is relatief maklik om op te trek, selfs vir iemand soos ek wat nie daarvan hou om te teken nie, en redelik maklik om mee te neem. Ek bestel dit in hul leë, selfgemaakte weergawe, in die kleinste grootte wat dit kom, en trek dit op met behulp van Posca -merkers. Hier kan u die een sien wat ek vir hierdie reis gemaak het, met die vlae van die vier lande wat ons besoek het - dit was toevallig dieselfde dat ek dit van kant tot kant kon kombineer. U kan verskeie lae verf gebruik solank u elkeen regtig laat droog word voordat u die volgende verf. Nadat ek klaar geverf het, hou ek daarvan om 'n paar minute lank 'n hittegeweer op die verf te gebruik, aangesien ek gelees het dat dit eintlik hitte is wat die Posca -verfstel help.

Op die laaste foto kan jy sien hoe Sven - ek gee hulle altyd name - 'n blaaskans in Oslo na 'n taamlike lang oggend. Hy het nie die kop van die oorspronklike speelding nie, aangesien ek dit een minute voor die vertrek reggekry het: ek moes 'n vorige speelding uitmekaar haal om die kop daarvan te gebruik. Ek kan nie sê dat dit nog nooit gebeur het nie …

Stap 3: Installeer OSMC

Installeer OSMC
Installeer OSMC

Die eerste ding wat ek gedoen het, was om OSMC op 'n micro SD -kaart vir die Raspberry Pi te installeer: in ons opset sal dit dien as die mediaspeler om na u foto's te kyk. Ek sal nie in detail op hierdie aspek ingaan nie, aangesien dit redelik goed gedokumenteer is (daar is 'n paar instruksies beskikbaar as u hulp nodig het). Laai die installeringsprogram op u rekenaar af en volg die instruksies. Sodra ek klaar was, het ek net 'n sleutelbord en 'n muis ingeprop, die HDMI op die TV gekoppel en die instellingsassistent gevolg om die tydsone, ens.

Uiteindelik het ek die gids waarin ek my foto's stoor, by die bronne gevoeg: in my geval word dit op 'n NAS met 'n vaste IP op dieselfde netwerk gestoor, maar u kan dit ook op 'n USB -skyf of in die tuismap self stoor, mits u mikro -SD groot genoeg is.

As u die bron byvoeg, sal u gevra word om 'n naam daarvoor in te voer: u kan die standaard verlaat of verander, maar skryf dit op, want ons benodig dit later. In my geval het ek dit 'MyPictures' genoem

U moet nou die inhoud van die gids wat u bygevoeg het, sien en deur u foto's blaai: in my geval het ek 'n subgids vir elke reis.

Baie geluk, u het nou 'n mediasentrum met u foto's daarop en kan 'n skyfievertoning vir 'n spesifieke gids begin (as 'n bonus kan u dit ook gebruik om u video's of musiek te speel)

Stap 4: Stel die leser op

Vir die res van die instruksies maak ons verbinding met die Pi met die opdragreël oor SSH. Om dit te doen, koppel net die Pi aan u netwerk met 'n Ethernet -kabel en gebruik die terminale of 'n spesiale sotware om aan die Pi te koppel. Op Mac OS en Linux is die opdrag

ssh [email protected]

U sal gevra word om 'n wagwoord in te voer, dit is weer osmc

Om die leser te laat funksioneer, moet SPI geaktiveer word: in die meeste verspreiding soos Raspbian kan dit gedoen word met behulp van raspi-config, 'n config-instrument waarmee u 'n paar konfigurasiewaardes kan verander.

OSMC bevat egter nie raspi-config vir u eie veiligheid as u dit gebruik nie. Sluit eerder die framboos, gooi die micro SD -kaart uit en koppel dit net op u rekenaar: die 'opstart' -partisie behoort nou sigbaar te wees. Aan die wortel van die volume sien u 'n lêer met die naam "config.txt" - maak dit oop en voeg hierdie reël aan die einde by:

"dtparam = spi = aan"

U kan die lêer nou stoor, herlaai en SPI moet geaktiveer wees.

Daarna moet u die aangehegte zip -lêer aflaai en dit op die framboos uitpak - ek raai u aan om 'n Projects -lêergids te skep en dit daar uit te rits. Om dit te kan doen, kan u óf via FTP via SSH aan die Framboos koppel (ek gebruik CyberDuck om dit te doen) óf die lêer op 'n USB -stasie plaas en die lêerbestuurder van Kodi gebruik om dit op die Raspberry Pi te kopieer.

Hoe dan ook, sodra u die zip -lêer na die Pi gekopieer het, kan u na die gids waarna u dit gekopieer het en dit uitsluit, na die resulterende gids gaan en die pakket installeer:

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

As alles goed verloop, moet u die leser kan aansluit, herlaai en dan ingaan

explorenfc-basic

As u 'n NFC -chip na die leser nader, moet dit nou 'n klomp inligting van die chip (onder meer sy ID) vertoon

Stap 5: Installeer Node en skep die projek

Vervolgens installeer ons NodeJS op die framboos om ons app te skryf.

Ons wil nodejs installeer, maar die weergawe van die standaard repository is regtig oud, dus moet u eers 'n eerste stap ondergaan: in die opdraglyn koppelvlak, tik

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

U kan dan tik

sudo apt installeer nodejs

om die nuutste weergawe van nodejs en npm beskikbaar te installeer.

Om KODI vanuit nodejs te beheer, gaan ons 'n npm-pakket met die naam kodi-ws gebruik.

Kom ons begin deur 'n nuwe projek te skep: tik net die opdrag

npm init

U sal 'n aantal vrae gevra word: vir die meeste van hulle kan u die standaard verlaat; kies slegs 'n naam vir u app en voer u eie naam aan die einde in. As u gevra word vir die beginpunt, los dan index.js

Dit sal 'n package.json -lêer skep wat die eienskappe van u pakket, soos die afhanklikheid daarvan, opsom.

U kan nou inskryf

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

As u daarna package.json oopmaak, sal u opmerk dat al die pakkette by die afhanklikes gevoeg is.

Stap 6: Die kode, verduidelik

Die kode, verduidelik
Die kode, verduidelik

By hierdie stap is die kode vir die app aangeheg.

Ek het 'n redelike hoeveelheid logging gelaat wat sonder kommentaar gelewer kan word om die draaiboek te verstaan, maar dit kan dit saam breek.

U sal sien dat ondanks al die funksies wat aangegee is, die kode eers slegs 'n paar dinge doen:

kodi ('localhost', 9090). dan (funksie (verbinding) {

Die skrif probeer om aan te sluit by die OSMC JSON-RPC API. Sodra dit slaag (en eers dan), gaan dit voort met die res van die lêer.

As u dit om een of ander rede nie vanaf u Raspberry Pi gebruik nie, verander localhost na u IP -adres. Maak ook seker dat in die diensinstellings binne OSMC (Instellings/Dienste) die boks "Laat afstandbeheer toelaat vanaf toepassings op ander stelsels" (sien prent)

Die res van die lêer is meestal funksieverklarings wat ons later sal gebruik: die twee funksies wat eintlik hier van stapel gestuur word, is (reëls 172/173)

scanAndSetCron (); listenForTag ();

In scanAndSetCron:

- die scanPictures -funksie word van stapel gestuur. Binne -in kyk ons of die veranderlike 'mypicturedirectory', wat die pad na ons foto's bevat, leeg is. As dit die geval is, vra ons OSMC om ons alle bronne wat dit bevat vir prentinhoud te gee (binne die getPictureDirectory -funksie, reël 11):

var piclist = wag verbinding. Files. GetSources ("foto's");

OSMC gee ons 'n skikking in ruil: vir elke item kyk ons of die bronnaam 'My' bevat: as dit die geval is, stoor ons dit as ons prentbron (reël 16 en volgende). Dit is waar u die string van "My" wil verander na alles wat u voorheen ingevoer het as 'n naam vir u prentbron

as (piclist.sources .label.includes ("My")) {console.log (">>> Die gids gevind" + piclist.sources . file); mypicturedirectory = piclist.sources .file; }

Noudat ons die pad na die bron het (in wese die wortelmap na ons albums), vra ons OSMC om dit te skandeer en die pad vir elke gids by te voeg tot 'n skikking genaamd album_directories (as dit nie reeds daar is nie). Aangesien hierdie funksie elke X sekondes uitgevoer word, kyk ons of die gids nie reeds in die lys is nie, voordat die funksie bygevoeg word, met die NFC -ID op 'n leë string. Op hierdie manier word elke nuwe gids wat u by u foto's voeg, outomaties bygevoeg - reël 46

for (var j = 0; j <directories.length; j ++) {if (directories [j].filetype.includes ("directory")) {if (searchDirectory (directories [j].file, album_directories)) {console. log (dopgehou [j].file +"reeds daar"); } anders {console.log (">> Voeg dir" + dopgehou [j]. lêer by); album_directories.push ({directory: directories [j].file, nfc: ""}); }}}

Aan die einde stoor ons die album_directories-skikking in 'n json-lêer op die Pi, wat ons probeer laai elke keer as die funksie uitgevoer word: dit gebeur aan die einde van die scanAndSetCron-funksie, waar ons 'n cron-agtige pakket gebruik om te verseker dat ons funksie werk elke 15 sekondes.

Die JSON -lêer wat ons genereer, album_directories.json, kan met enige notaboek -app oopgemaak word. Sodra u dit gedoen het, word die lys met u fotoalbums aangebied, elk met 'n leë veld "nfc":

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

In hierdie veld moet u nou die ID plak van die etiket wat u met hierdie album wil assosieer. Om hierdie ID te kry, navigeer net na die SW2827-lêergids, voer explorenfc-basic uit en skandeer die etiket wat u wil gebruik. Soek in die uitvoer wat u kry, die waarde langs ISO14443A UID. Kopieer dit na die album wat u wil opstel. In my geval, byvoorbeeld,

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

Stoor die lêer en die inhoud daarvan sal gelaai word wanneer u die app volgende keer begin.

In die listenForTag -funksie doen ons dit: aangesien dit blykbaar nie 'n toegewyde poort van die lesersbiblioteek vir NodeJS is nie, maak ons staat op kinderprosesse om die binêre vir die leser te begin:

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

Ons maak staat op 'n eventlistener om die uitvoer van hierdie uitvoering te ontvang: binne die terugbel vir child.stdout.on ('data', funksie (data) ontleed ons die uitvoer van hierdie opdrag met behulp van die analyseOutput -funksie: ons soek die lyn wat ons vroeër gesien het, begin met "ISO14443A UID:", want dit is waar die ID vir die merker wat ons geskandeer het, gestoor word. oorspronklik).

Uiteindelik probeer ons hierdie ID pas by die ID's wat ons in die album_directories -reeks voorwerpe ingevoer het (gelaai via die album_directories.json -lêer). As 'n wedstryd gevind word, gee ons OSMC opdrag om 'n skyfievertoning vir die spesifieke gids te begin:

var nfcid = analyseOutput (data); console.log ("nfcid is" + nfcid.id); var corresponderende album = searchTag (nfcid.id, album_directories); as (ooreenstemmende album) {console.log ("Album gevind" + JSON.stringify (ooreenstemmende album) + "vir hierdie tag"); var args = [{'pad': ooreenstemmende album.directory}]; connection.run ('Player. Open', args); } luisterForTag ();

U sien hoe ons aan die einde van die funksie weer luisterForTag begin? Dit is die enigste oplossing wat ek gevind het om die program te laat werk: explorenfc-basic sal standaard op 'n etiket wag, dit lees en dan verlaat. Die app het wel 'n deurlopende modus wat ons kan noem met behulp van explorenfc -basic -k, maar in hierdie modus voer die child_process nooit die taginhoud uit nie, aangesien dit nooit eindig nie (met ander woorde child.stdout.on ('data') word nooit afgevuur nie). Aangesien ek nie 'n ander manier gevind het om hierdie leser te gebruik nie, begin ons basies explorenfc-basic in die enkele etiketmodus, en as 'n etiket gelees word, begin ons listenForTag en herbegin daarom explorenfc-basic.

As ek moes teruggaan (en ek dink ek sal), sou ek 'n NFC -leser kies wat meer opsies bied: byvoorbeeld, Adafruit (u het miskien opgemerk dat ek baie lief is vir hulle) het hierdie leser https:// www.adafruit.com/product/789 wat verenigbaar is met libnfc, wat volgens my beteken dat die leser baie netjieser sal wees om mee te skakel as om 'n kinderproses binne die node te bel en die stdout te ontleed!

Stap 7: Probeer dit

Om die app te begin, navigeer u net na die gids en tik 'node index.js' (of begin npm sedert ons dit vroeër in package.json opgestel het). In die logboeke moet u die app sien wat vir die eerste keer met OSMC/Kodi skakel en skandeer. Na 'n paar sekondes word die lêer album_directories.json in die projekgids geskep; U kan dan die NFC -tag -ID's invoer soos vroeër uiteengesit en dit assosieer met die albums wat u wil hê.

Stap 8: Begin outomaties

Om op te som, ons het die Node-app geskep wat (1) soek na u KODI-prentebiblioteek en probeer om die gids te vind waar u u vakansiefoto's stoor, (2) luister na NCF-etikette deur te vertrou op explorenfc-basic en dan (3) stel die album bekend wat met hierdie NFC -ID verband hou.

Om hierdie hele proses op die agtergrond te laat verloop, gebruik ons PM2, 'n prosesbestuurder vir node.

Navigeer in die opdragreël na u projektmap (waar u index.js -lêer geleë is) en tik die volgende reëls:

sudo npm installeer pm2 -gpm2 begin index.js

U app word nou deur PM2 gemonitor en word outomaties weer begin! Tik pm2 -lys in om seker te maak dat dit werklik bekendgestel is, en u moet dit in die lys sien. As u die logboeke wil sien, tik net pm2 -logs.

Aanbeveel: