Turinys:

Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!: 9 žingsniai (su nuotraukomis)
Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!: 9 žingsniai (su nuotraukomis)

Video: Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!: 9 žingsniai (su nuotraukomis)

Video: Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!: 9 žingsniai (su nuotraukomis)
Video: Веб-разработка – информатика для руководителей бизнеса 2016 2024, Liepa
Anonim
Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!
Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!
Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!
Pradėkite savo atostogų nuotraukų skaidrių demonstraciją su magija!

Bėgant metams įgijau įprotį pasiimti su savimi mažą figūrėlę keliaujant: dažnai nusiperku mažą, tuščią artoy (pvz., Nuotraukoje) ir nudažau ją taip, kad atitiktų šalies, su kuria aš vėliava, temą “m lankosi (šiuo atveju Sicilija).

Tuomet idėja yra nufotografuoti statulėlę prieš scenas ar garsius paminklus iš minėtos šalies: manau, kad tai daug juokingiau, nei turėti nuotraukas su tik pačiu paminklu (tam yra „Google“ir tai yra daug pigiau), bet vis tiek lengviau nei turėti būti kiekvienoje nuotraukoje pats (ne gerbėjas, tiesą pasakius)

Kadangi visada smagu susirinkti žmones, su kuriais atostogavote, praėjus kelioms dienoms po to, kai grįžote žiūrėti nuotraukų, pagalvojau, kad būtų puiku, jei kiekviena figūrėlė galėtų kažkaip automatiškai paleisti skaidrių demonstraciją iš kelionės, kuriai jie buvo padaryti.

Ši pamoka paaiškins, kaip aš tai padariau naudodamas NFC, aviečių pi, nodejs ir osmc

1 žingsnis: sprendimo apžvalga

Sprendimo apžvalga
Sprendimo apžvalga
Sprendimo apžvalga
Sprendimo apžvalga

Kadangi visa sąranka apima kelis dalykus, čia pateikiama bendra to, kas susiję, apžvalga, padedanti suprasti visa tai:

Techninė įranga

- figūrėlė yra naminė: kadangi aš rašau šią instrukciją savaitės trukmės kelionės Kopenhagoje/Osle/Stokholme/Helsinkyje viduryje, pridėsiu keletą šios kelionės padarytų figūrėlių kadrų

- po kiekviena figūrėlė yra NFC mikroschema: naudoju apvalius lipdukus, kuriuos galiu talpinti po kiekviena figūrėle, bet galite naudoti bet kokius kitus formos veiksnius - tiesiog įsitikinkite, kad jūsų naudojamas mikroschema yra suderinama su jūsų skaitytuvu

- norėdamas parodyti nuotraukas, naudosiu aviečių pi su įdiegta OSMC: tai mano pasirinktas medijos leistuvas TV laidoms ir filmams, todėl jis jau prijungtas prie mano televizoriaus

- kad aviečių pi galėtų skaityti NFC žymes, pridėjau NFC skaitytuvą - naudojau NXP „Explore -NFC“, kurį galima rasti daugelyje svetainių: jis prijungiamas prie „Pi“ir veikia kaip skydas

Programinė įranga

„Raspberry Pi“„NodeJS“scenarijus laukia, kol bus perskaityta NFC žyma: kai tai bus padaryta, scenarijus patikrins, ar jo ID atitinka reikšmių/porų sąrašą su kiekvienu OSMC paveikslėlių šaltinio aplanku ir atitinkamu NFC ID, kaip sukonfigūruota Vartotojas.

Kai skaitoma žyma, jei ID yra sąraše, „Node“scenarijus nurodo OSMC paleisti šio konkretaus aplanko skaidrių demonstraciją. Norėdami sukurti/sukonfigūruoti tą sąrašą, tas pats „NodeJS“scenarijus kas 5 minutes paleidžia nuskaitymo funkciją: nuskaito kiekvieną katalogą OSMC „Paveikslėlių“šaltinyje (naudodamas „Kodi“siūlomą JSON-RPC API) ir prideda jį prie sąrašo, kuris vėliau išsaugomas diske. Tiesiogiai redaguodamas šį teksto failą, vartotojas gali pridėti atitinkamą kiekvieno albumo NFC ID.

2 žingsnis: statulėlės sukūrimas

Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas
Figūrėlės kūrimas

Savo figūrėlėms galite naudoti beveik viską, kas jums patinka: man patinka naudoti tuos vinilo meno žaislus, nes juos palyginti lengva piešti net tokiam žmogui kaip aš, kuris nemėgsta piešti, ir gana lengva nešiotis. Aš užsisakau jų tuščią versiją „pasidaryk pats“, mažiausio dydžio, kokį jie gauna, ir piešiu juos naudodami „Posca“žymeklius. Čia galite pamatyti tą, kurį padariau šiai kelionei, su keturių mūsų aplankytų šalių vėliavomis - jos buvo pakankamai panašios, kad galėčiau jas sujungti. Galite naudoti kelis dažų sluoksnius, jei tikrai leisite kiekvienam išdžiūti prieš dažydami kitą. Baigęs dažyti, mėgstu keletą minučių naudoti dažų šilumos pistoletą, nes skaičiau, kad „Posca“dažų rinkiniui padeda šiluma.

Paskutinėje nuotraukoje galite pamatyti Sveną - aš visada duodu jiems vardus - po gana ilgo ryto pertraukos Osle. Jis neturi galvos nuo originalaus žaislo, nes man pavyko sujaukti tą minutę iki išvykimo: turėjau išardyti ankstesnį žaislą, kad galėčiau naudoti jo galvą. Negaliu pasakyti, kad to niekada nebuvo …

3 veiksmas: įdiekite OSMC

Įdiekite OSMC
Įdiekite OSMC

Pirmas dalykas, kurį aš padariau, buvo įdiegti OSMC į „Raspberry Pi“„micro SD“kortelę: mūsų sąrankoje ji bus laikmena, skirta žiūrėti jūsų nuotraukas. Aš nesigilinsiu į šį aspektą, nes jis yra gana gerai dokumentuotas (jei reikia pagalbos, yra keletas instrukcijų). Tiesiog atsisiųskite diegimo programą į savo kompiuterį ir vykdykite instrukcijas. Kai baigiau, tiesiog prijungiau klaviatūrą ir pelę, prijungiau HDMI prie televizoriaus ir sekiau sąrankos vedlį, norėdamas nustatyti laiko juostą ir pan.

Galiausiai prie šaltinių pridėjau katalogą, kuriame saugoju savo nuotraukas: mano atveju jos yra saugomos NAS su fiksuotu IP tame pačiame tinkle, tačiau jas taip pat galite laikyti USB diske arba pačiame namų aplanke, jei jūsų „micro SD“yra pakankamai didelis.

Pridėdami šaltinį, būsite paprašyti įvesti jo pavadinimą: galite palikti numatytąjį arba jį pakeisti, bet būtinai užsirašykite, nes mums jo prireiks vėliau. Mano atveju tai pavadinau „MyPictures“

Dabar turėtumėte pamatyti pridėto katalogo turinį ir naršyti savo nuotraukas: mano atveju kiekvienai kelionei turiu po katalogą.

Sveikiname, dabar turite daugialypės terpės centrą su savo nuotraukomis ir galite paleisti konkretaus aplanko skaidrių demonstraciją (kaip premiją galite ją naudoti ir vaizdo įrašams ar muzikai paleisti)

4 žingsnis: sukonfigūruokite skaitytuvą

Likusioje instrukcijoje mes prisijungsime prie „Pi“naudodami komandinę eilutę per SSH. Norėdami tai padaryti, tiesiog prijunkite „Pi“prie tinklo naudodami eterneto kabelį ir naudokite terminalą arba specialią sotware, kad prisijungtumėte prie „Pi“. „Mac OS“ir „Linux“komanda yra

ssh [email protected]

Jūsų bus paprašyta įvesti slaptažodį, tai vėl osmc

Kad skaitytuvas galėtų veikti, SPI turi būti įjungtas: daugelyje platinimų, pvz., „Raspbian“, tai galima padaryti naudojant raspi-config-konfigūravimo įrankį, leidžiantį pakeisti kai kurias konfigūracijos reikšmes.

Tačiau OSMC neapima raspi-config jūsų pačių saugumui jį naudojant. Vietoj to, išjunkite „Raspberry“, išimkite „micro SD“kortelę ir tiesiog prijunkite ją prie kompiuterio: dabar turėtų būti matomas „įkrovos“skaidinys. Ten, tomo šaknyje, pamatysite failą pavadinimu „config.txt“- tiesiog atidarykite jį ir pabaigoje pridėkite šią eilutę:

"dtparam = spi = on"

Dabar galite išsaugoti failą, iš naujo paleisti ir SPI turėtų būti įjungtas.

Po to turėsite atsisiųsti pridėtą ZIP failą ir išpakuoti jį avietėje - rekomenduoju sukurti aplanką „Projektai“ir ten jį išpakuoti. Norėdami tai padaryti, galite prisijungti prie „Raspberry“naudodami FTP per SSH (tam naudoju „CyberDuck“) arba įdėti failą į USB diską ir naudoti „Kodi“failų tvarkyklę, kad nukopijuotumėte jį į „Raspberry Pi“.

Bet kokiu atveju, nukopijavę ZIP failą į „Pi“, galite pereiti prie aplanko, į kurį jį nukopijavote, ir išpakuoti, pereiti į gautą aplanką ir įdiegti paketą:

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

Jei viskas gerai, turėtumėte turėti galimybę prijungti skaitytuvą, iš naujo paleisti ir tada įeiti

explorenfc-basic

Jei prie skaitytuvo priartėsite prie NFC lusto, jis dabar turėtų parodyti krūvą informacijos iš lusto (be kita ko, jo ID)

5 veiksmas: įdiekite mazgą ir sukurkite projektą

Toliau avietėje įdiegsime „NodeJS“, kad parašytume savo programą.

Mes norime įdiegti „nodejs“, tačiau numatytosios saugyklos versija yra tikrai sena, todėl prieš tai turite atlikti pirmąjį žingsnį: komandų eilutės sąsajoje įveskite

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

Tada galite įvesti

sudo apt įdiegti nodejs

įdiegti naujausią galimą „nodejs“ir „npm“versiją.

Norėdami valdyti KODI iš nodejs, mes naudosime npm paketą, vadinamą kodi-ws.

Pradėkime nuo naujo projekto sukūrimo: tiesiog įveskite komandą

npm init

Jums bus užduota daugybė klausimų: daugumai jų galite palikti numatytąjį, tiesiog pasirinkite programos pavadinimą ir pabaigoje įveskite savo vardą. Kai jūsų paprašys atskaitos taško, tiesiog palikite index.js

Taip bus sukurtas failas package.json, kuriame bus apibendrintos jūsų paketo charakteristikos, pvz., Jo priklausomybės.

Dabar galite įeiti

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

Jei po to atidarysite paketą.json, pastebėsite, kad visi šie paketai buvo pridėti prie priklausomybių.

6 žingsnis: paaiškintas kodas

Kodas, paaiškinta
Kodas, paaiškinta

Prie šio veiksmo pridedamas programos kodas.

Palikau nemažai registravimo, kurio galima nekomentuoti, kad suprastume scenarijų, bet kartu jį išardome.

Pastebėsite, kad nepaisant visų deklaruotų funkcijų, kodas iš pradžių atlieka tik keletą dalykų:

kodi ('localhost', 9090). Tada (funkcija (ryšys) {

Scenarijus bando prisijungti prie OSMC JSON-RPC API. Kai tai pavyksta (ir tik tada), jis tęsiasi su likusiu failu.

Jei dėl kokių nors priežasčių to nepaleidžiate iš savo Raspberry Pi, pakeiskite localhost į savo IP adresą. Taip pat įsitikinkite, kad OSMC paslaugų nustatymuose (Nustatymai/Paslaugos) pažymėtas žymimasis laukelis „Leisti nuotolinį valdymą iš kitų sistemų programų“(žr. Paveikslėlį)

Likusi failo dalis dažniausiai yra funkcijų, kurias naudosime vėliau, deklaracijos: dvi iš tikrųjų paleistos funkcijos yra čia (172/173 eilutės)

scanAndSetCron (); listenForTag ();

„ScanAndSetCron“:

- paleidžiama „scanPictures“funkcija. Viduje mes patikriname, ar kintamasis „mypicturedirectory“, kuris laikys kelią į mūsų paveikslėlius, yra tuščias. Jei taip, mes prašome OSMC pateikti mums visus šaltinius, kuriuos jis turi vaizdo turiniui („getPictureDirectory“funkcijos 11 eilutėje):

var piclist = laukti ryšio. Files. GetSources ("nuotraukos");

OSMC mums duoda masyvą: kiekvienam elementui patikriname, ar šaltinio pavadinime yra „Mano“: jei taip, mes jį saugome kaip savo vaizdo šaltinį (16 eilutė ir tolesnė). Čia norėsite pakeisti eilutę iš „Mano“į bet kurią, kurią anksčiau įvedėte kaip savo nuotraukų šaltinio pavadinimą

if (piclist.sources .label.includes ("Mano")) {console.log (">>> Radau katalogą" + piclist.sources .file); mypicturedirectory = piclist.sources .file; }

Dabar, kai turime kelią į šaltinį (iš esmės šakninį aplanką į mūsų albumus), prašome OSMC jį nuskaityti ir pridėti kiekvieno aplanko kelią į masyvą, pavadintą albumas_katalogai (jei jo dar nėra). Kadangi ši funkcija bus vykdoma kas X sekundes, prieš pridėdami ją patikriname, ar katalogas dar nėra sąraše, o NFC ID nustatytas į tuščią eilutę - tokiu būdu kiekvienas naujas aplankas, kurį pridėsite prie savo nuotraukų, bus automatiškai pridėta - 46 eilutė

for (var j = 0; j <directories.length; j ++) {if (directory [j].filetype.includes ("directory")) {if (searchDirectory (katalogai [j].file, album_directories)) {console. log (katalogai [j].file +"jau yra"); } else {console.log (">> Pridedamas dir" + katalogai [j].file); album_directories.push ({katalogas: katalogai [j].failas, nfc: ""}); }}}

Pabaigoje mes išsaugome albumo_direktorių masyvą į „json“failą „Pi“, kurį bandome įkelti kiekvieną kartą, kai vykdoma funkcija: tai atsitinka funkcijos „scanAndSetCron“pabaigoje, kur mes naudojame į cron panašų paketą, kad užtikrintume, jog mūsų funkcija veikia kas 15 sekundžių.

Mūsų sukurtą JSON failą albumą_direktorijos.json galima atidaryti naudojant bet kurią užrašų knygelės programą. Kai tai padarysite, jums bus pateiktas jūsų nuotraukų albumų sąrašas, kurių kiekvienas turi tuščią lauką „nfc“:

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

Šiame lauke dabar turite įklijuoti žymos, kurią norite susieti su šiuo albumu, ID. Norėdami gauti šį ID, tiesiog eikite į aplanką SW2827, paleiskite „explorenfc-basic“ir nuskaitykite norimą naudoti žymą. Išvestyje, kurią gaunate, tiesiog ieškokite vertės šalia ISO14443A UID. Nukopijuokite jį į albumą, kurį norite konfigūruoti. Mano atveju pvz.

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

Išsaugokite failą ir jo turinys bus įkeltas, kai kitą kartą paleisite programą.

Naudodami funkciją „listenForTag“mes tai ir darome: kadangi neatrodo, kad „NodeJS“skirta skaitytojų bibliotekos prievadas, mes pasikliaujame vaikų procesais, kad paleistume skaitytojui skirtą dvejetainę:

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

Mes pasikliaujame įvykių klausytoju, kad gautume šio įvykdymo išvestį: atšaukimo lauke „child.stdout.on“(„duomenys“, funkcija (duomenys), analizuojame šios komandos išvestį naudodami funkciją „analyOutput“: ieškome anksčiau matytą eilutę, prasidedančią „ISO14443A UID:“, nes čia saugomas nuskaitytos žymos ID. Radę tą eilutę, ją nukerpame ir išsaugome objekte (vadinamame ID, kaip originalus).

Galiausiai, mes stengiamės suderinti šį ID su ID, kuriuos įvedėme į album_directories objektų masyvą (įkeltą per failą album_directories.json). Jei randama atitiktis, nurodome OSMC paleisti to konkretaus aplanko skaidrių demonstraciją:

var nfcid = analizuoti išvestį (duomenys); console.log ("nfcid yra" + nfcid.id); varrespondingalbum = searchTag (nfcid.id, albumo_katalogai); if (respondingalbum) {console.log ("Rastas albumas" + JSON.stringify (respondingalbum) + "šiai žymai"); var args = [{'kelias':respondingalbum.directory}]; connection.run ('Player. Open', args); } listenForTag ();

Pastebite, kaip pasibaigus funkcijai vėl paleidžiame „listenForTag“? Tai vienintelis sprendimas, kurį radau, kad programa veiktų: „explorenfc-basic“pagal numatytuosius nustatymus lauks žymos, ją perskaitys ir išeis. Programa turi nuolatinį režimą, kurį galime iškviesti naudodami „explorenfc -basic -k“, tačiau šiuo režimu „child_process“niekada neišveda žymos turinio, nes jis niekada nesibaigia (kitaip tariant, child.stdout.on („duomenys“) niekada nėra suaktyvinamas). Kadangi neradau kito būdo, kaip naudoti šį skaitytuvą, čia mes iš esmės paleidžiame „explorenfc-basic“vienos žymos režimu, o kai skaitoma žyma, paleidžiame „listenForTag“ir todėl iš naujo paleidžiame „explorenfc-basic“.

Jei turėčiau grįžti atgal (ir manau, kad tai padarysiu), rinkčiausi NFC skaitytuvą, kuris siūlo daugiau galimybių: pavyzdžiui, „Adafruit“(galbūt pastebėjote, kad man jie labai patinka) turi šį skaitytuvą https:// www..adafruit.com/product/789, kuris yra suderinamas su libnfc, o tai, mano manymu, reiškia, kad skaitytojas bus daug švaresnis už sąsają nei iškviesdamas antrinį procesą iš mazgo ir analizuodamas stdout!

7 žingsnis: Išbandykite

Norėdami paleisti programą, tiesiog eikite į tą aplanką ir įveskite „node index.js“(arba „npm start“, nes mes jį anksčiau sukonfigūravome „package.json“). Žurnale turėtumėte pamatyti programą, kuri prisijungia prie OSMC/„Kodi“ir pirmą kartą nuskaito. Po kelių sekundžių failas album_directories.json bus sukurtas projekto kataloge; Tada galite įvesti NFC žymų ID, kaip paaiškinta anksčiau, ir susieti juos su norimais albumais.

8 veiksmas: paleiskite automatiškai

Apibendrinant, mes sukūrėme „Node“programą, kuri (1) nuskaito jūsų KODI paveikslėlių biblioteką ir bando rasti aplanką, kuriame saugote atostogų nuotraukas, (2) klauso NCF žymų, remdamasi „explorenfc-basic“ir tada (3) paleidžia albumą, susietą su šiuo NFC ID.

Kad visas šis procesas vyktų fone, mes naudosime PM2, mazgo proceso tvarkyklę.

Komandinėje eilutėje eikite į savo projektų aplanką (kuriame yra jūsų index.js failas) ir įveskite šias eilutes:

sudo npm įdiegti pm2 -gpm2 pradėti index.js

Dabar jūsų programą stebi PM2 ir ji bus automatiškai paleista iš naujo! Norėdami įsitikinti, kad jis iš tikrųjų paleistas, įveskite pm2 sąrašą ir turėtumėte jį pamatyti sąraše. Jei norite matyti žurnalus, tiesiog įveskite pm2 žurnalus.

Rekomenduojamas: