Innholdsfortegnelse:

Start bildene med julebilder med et snev av magi!: 9 trinn (med bilder)
Start bildene med julebilder med et snev av magi!: 9 trinn (med bilder)

Video: Start bildene med julebilder med et snev av magi!: 9 trinn (med bilder)

Video: Start bildene med julebilder med et snev av magi!: 9 trinn (med bilder)
Video: Den nye pige - En film om mobning 2024, Juli
Anonim
Start bildene av julebildene med et snev av magi!
Start bildene av julebildene med et snev av magi!
Start bildene av julebildene med et snev av magi!
Start bildene av julebildene med et snev av magi!

Gjennom årene har jeg utviklet en vane med å ta med meg en liten figur når jeg reiser: Jeg kjøper ofte en liten, tom artoy (som den på bildet) og maler den for å matche flagget og temaet i landet jeg ' m besøker (i dette tilfellet Sicilia).

Ideen er da å ta bilder av figuren foran scener eller berømte monumenter fra nevnte land: Jeg synes det er mye morsommere enn å ha bilder med bare monumentet selv (det er Google for det og det er mye billigere), men likevel lettere enn å ha å være på hvert bilde selv (ikke en fan, for å være ærlig)

Ettersom det alltid er morsomt å samle folk du dro på ferie med noen dager etter at du kom tilbake for å se bildene, tenkte jeg at det ville være fint om hver figur på en eller annen måte automatisk kunne starte et lysbildefremvisning av bildene fra turen de ble laget for.

Denne instruksen vil forklare hvordan jeg gjorde det, ved hjelp av NFC, en bringebær pi, nodejs og osmc

Trinn 1: Oversikt over løsningen

Oversikt over løsningen
Oversikt over løsningen
Oversikt over løsningen
Oversikt over løsningen

Siden hele oppsettet inneholder noen få ting, her er en generell oversikt over hva som er involvert for å hjelpe deg å forstå alt som følger:

Maskinvare

- figuren er hjemmelaget: siden jeg skriver denne instruksen midt i en ukelang tur i København/Oslo/Stockholm/Helsinki, vil jeg inkludere noen få bilder av figuren som ble laget for denne turen

- under hver figur er det en NFC -brikke: Jeg bruker runde klistremerker som jeg kan passe under hver figur, men du kan bruke hvilken som helst annen formfaktor - bare sørg for at brikken du bruker er kompatibel med leseren din

- For å vise bildene, vil jeg bruke en bringebærpi med OSMC installert: det er min mediespiller som er valgt for TV -programmer og filmer, så den er allerede koblet til TVen min

- for at bringebær -pi skulle lese NFC -koder, la jeg til en NFC -leser - den jeg brukte er Explore -NFC fra NXP, tilgjengelig på mange nettsteder: den kobles til Pi og fungerer som et skjold

Programvare

På Raspberry Pi venter et NodeJS -skript på at en NFC -tag skal leses: Når det er gjort, sjekker skriptet om ID -en mot en verdi/parliste med hver mappe fra bildekilden på OSMC og den tilsvarende NFC -IDen som konfigurert av brukeren.

Når koden er lest, og hvis ID -en er i listen, forteller Node -skriptet OSMC om å starte lysbildeserien for denne spesifikke mappen. For å bygge/konfigurere denne listen, starter det samme NodeJS -skriptet en skannefunksjon hvert 5. minutt: det skanner etter hver katalog inne i "Bilder" -kilden på OSMC (ved hjelp av JSON-RPC API som Kodi tilbyr) og legger den til en liste som deretter lagres på disken. Ved å redigere denne tekstfilen direkte, kan brukeren deretter legge til den tilsvarende NFC -IDen for hvert album.

Trinn 2: Lag figuren

Å lage figuren
Å lage figuren
Å lage figuren
Å lage figuren
Å lage figuren
Å lage figuren
Å lage figuren
Å lage figuren

Du kan bruke stort sett alt du liker til figuren din: Jeg elsker å bruke vinylleker fordi de er relativt enkle å tegne på, selv for noen som meg som ikke liker å tegne og ganske enkle å ha med seg. Jeg bestiller dem i deres tomme, DIY -versjon, i den minste størrelsen de kommer den, og tegner på dem ved hjelp av Posca -markører. Her kan du se den jeg har laget for denne turen, med flaggene til de fire landene vi besøkte - de var tilfeldigvis like nok til at jeg kunne kombinere dem side om side. Du kan bruke flere strøk maling så lenge du virkelig lar hver tørke før du maler den neste. Etter at jeg er ferdig med å male, liker jeg å bruke varmepistol på malingen i noen minutter, ettersom jeg har lest at det faktisk er varme som hjelper Posca -malingen.

På det siste bildet kan du se Sven - jeg gir dem alltid navn - ha en pause i Oslo etter en ganske lang morgen. Han har ikke hodet fra den originale leken, siden jeg klarte å rote det ett minutt før jeg dro: Jeg måtte demontere en tidligere leketøy for å bruke hodet i stedet. Jeg kan ikke si at det aldri har skjedd før …

Trinn 3: Installer OSMC

Installer OSMC
Installer OSMC

Det første jeg gjorde var å installere OSMC på et micro SD -kort for Raspberry Pi: i vårt oppsett vil det fungere som mediespiller for å se bildene dine. Jeg vil ikke gå nærmere inn på dette aspektet siden det er ganske godt dokumentert (det er noen få instrukser tilgjengelig hvis du trenger hjelp). Bare last ned installasjonsprogrammet på datamaskinen din og følg instruksjonene. Når jeg var ferdig, plugget jeg bare inn et tastatur og en mus og koblet HDMI til TV -en og fulgte oppsettveiviseren for å sette opp tidssonen osv.

Til slutt la jeg katalogen der jeg lagrer bildene mine til kildene: i mitt tilfelle er de lagret på en NAS med en fast IP på det samme nettverket, men du kan også lagre dem på en USB -stasjon eller i selve hjemmemappen, forutsatt at mikro -SD -en din er stor nok.

Når du legger til kilden, blir du bedt om å angi et navn for den: du kan la standarden eller endre den, men husk å skrive den ned fordi vi trenger det senere. I mitt tilfelle kalte jeg det "MyPictures"

Du bør nå se innholdet i katalogen du la til og bla gjennom bildene: i mitt tilfelle har jeg en undermappe for hver reise.

Gratulerer, du har nå et mediesenter med bildene dine på det og kan starte en lysbildefremvisning for en bestemt mappe (som en bonus kan du også bruke den til å spille av videoer eller musikk)

Trinn 4: Konfigurer leseren

For resten av instruksjonene vil vi koble til Pi ved hjelp av kommandolinjen over SSH. For å gjøre det, bare koble Pi til nettverket ditt ved hjelp av en Ethernet -kabel og bruk terminalen eller en dedikert sotware til å koble til Pi. På Mac OS og Linux er kommandoen

ssh [email protected]

Du blir bedt om å skrive inn et passord, det er osmc igjen

For at leseren skal kunne fungere, må SPI være aktivert: i de fleste distribusjoner som Raspbian kan dette gjøres ved å bruke raspi-config, et konfigureringsverktøy som lar deg endre noen konfigurasjonsverdier.

OSMC inkluderer imidlertid ikke raspi-config, for din egen sikkerhet når du bruker den. I stedet må du slå av bringebæret, kaste ut micro SD -kortet og bare montere det på datamaskinen din: "oppstart" -partisjonen skal nå være synlig. Der, ved roten til volumet, vil du se en fil som heter "config.txt" - bare åpne den og legg til denne linjen på slutten:

"dtparam = spi = på"

Du kan nå lagre filen, omstart og SPI skal være aktivert.

Etter det må du laste ned den vedlagte ZIP -filen og pakke den ut på bringebæret - jeg anbefaler å opprette en Projects -mappe og pakke den ut der. For å gjøre det kan du enten koble til Raspberry ved å bruke FTP over SSH (jeg bruker CyberDuck til å gjøre det) eller sette filen på en USB -stasjon og bruke Kodis filbehandling for å kopiere den til Raspberry Pi.

Uansett, når du har kopiert zip -filen til Pi, kan du deretter navigere til mappen du kopierte den til og pakke den ut, flytte til den resulterende mappen og installere pakken:

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

Hvis alt går bra, bør du kunne koble til leseren, starte på nytt og deretter gå inn

explorenfc-basic

Hvis du nærmer deg en NFC -brikke til leseren, bør den nå vise en haug med informasjon fra brikken (blant annet dens ID)

Trinn 5: Installer Node og opprett prosjektet

Deretter installerer vi NodeJS på bringebæret for å skrive appen vår.

Vi ønsker å installere nodejs, men versjonen av standardlageret er virkelig gammel, så du må gå gjennom et første trinn før: I kommandolinjegrensesnittet skriver du inn

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

Du kan deretter skrive

sudo apt install nodejs

for å installere den nyeste versjonen av nodejs og npm tilgjengelig.

For å kontrollere KODI fra nodejs, skal vi bruke en npm-pakke kalt kodi-ws.

La oss starte med å lage et nytt prosjekt: bare skriv kommandoen

npm init

Du vil bli spurt en rekke spørsmål: For de fleste av dem kan du forlate standarden, bare velg et navn for appen din og skriv inn ditt eget navn på slutten. Når du blir bedt om utgangspunktet, er det bare å forlate index.js

Dette vil opprette en package.json -fil som oppsummerer egenskapene til pakken din, for eksempel dens avhengigheter.

Du kan nå gå inn

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

Hvis du åpner package.json etter det, vil du merke at alle disse pakkene ble lagt til i avhengighetene.

Trinn 6: Koden, forklart

Koden, forklart
Koden, forklart

Koden for appen er knyttet til dette trinnet.

Jeg har lagt igjen en god del logging som ikke kan kommenteres for å forstå manuset, men det er å bryte det ned sammen.

Du vil legge merke til at til tross for alle deklarerte funksjonene, gjør koden bare noen få ting i begynnelsen:

kodi ('localhost', 9090).then (funksjon (tilkobling) {

Skriptet prøver å koble til OSMC JSON-RPC API. Når det lykkes (og bare da), fortsetter det med resten av filen.

Hvis du av en eller annen grunn ikke kjører dette fra Raspberry Pi, bytter du localhost til IP -adressen din. Sørg også for at i tjenesteinnstillingene inne i OSMC (Innstillinger/Tjenester) er det merket av i boksen "Tillat fjernkontroll fra applikasjoner på andre systemer" (se bilde)

Resten av filen er stort sett funksjonserklæringer som vi skal bruke senere: de to funksjonene som faktisk lanseres herfra er (linje 172/173)

scanAndSetCron (); listenForTag ();

I scanAndSetCron:

- scanPictures -funksjonen lanseres. Inne i den sjekker vi om variabelen "mypicturedirectory", som holder veien til bildene våre, er tom. Hvis det er det, ber vi OSMC om å gi oss alle kildene det har for bildeinnhold (inne i getPictureDirectory -funksjonen, linje 11):

var piclist = avvente tilkobling. Files. GetSources ("bilder");

OSMC gir oss en matrise i retur: For hvert element kontrollerer vi om kildenavnet inneholder "Min": hvis det er tilfelle lagrer vi det som vår bildekilde (linje 16 og følgende). Det er her du vil endre strengen fra "Min" til det du skrev inn tidligere som et navn på bildekilden

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

Nå som vi har banen til kilden (i hovedsak rotmappen til albumene våre), ber vi OSMC om å skanne den og legge til banen for hver mappe i en matrise kalt album_directories (hvis den ikke allerede er der). Siden denne funksjonen kjøres hvert X sekund, kontrollerer vi at katalogen ikke allerede er i listen før vi legger den til, med NFC -IDen satt til en tom streng - på den måten blir hver nye mappe du legger til i bildene dine automatisk lagt til - linje 46

for (var j = 0; j <directories.length; j ++) {if (directories [j].filetype.includes ("directory")) {if (searchDirectory (directories [j].file, album_directories)) {console. log (kataloger [j].file +"allerede der"); } annet {console.log (">> Legger til dir" + kataloger [j].file); album_directories.push ({katalog: kataloger [j].file, nfc: ""}); }}}

På slutten lagrer vi album_directories-arrayet i en json-fil på Pi, som vi prøver å laste hver gang funksjonen utføres: dette skjer på slutten av scanAndSetCron-funksjonen der vi bruker en cron-lignende pakke for å sikre at funksjonen vår kjører hvert 15. sekund.

JSON -filen som vi genererer, album_directories.json, kan åpnes ved hjelp av en hvilken som helst notisblokk -app. Når du gjør det, vil du bli presentert med listen over fotoalbumene dine, hvert med et tomt "nfc" -felt:

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

I dette feltet må du nå lime inn ID -en til taggen du vil knytte til dette albumet. For å få denne IDen, bare naviger til SW2827-mappen, kjør explorenfc-basic og skann taggen du vil bruke. Bare se etter verdien ved siden av ISO14443A UID i utgangen du får. Kopier det til albumet du vil konfigurere. I mitt tilfelle, for eksempel,

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

Lagre filen og innholdet blir lastet når du starter appen neste gang.

I listenForTag -funksjonen gjør vi nettopp det: siden det ikke ser ut til å være en dedikert port i leserbiblioteket for NodeJS, stoler vi på barneprosesser for å starte binæret for leseren:

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

Vi stoler på en eventlistener for å motta utdataene fra denne kjøringen: inne i tilbakeringingen for child.stdout.on ('data', funksjon (data), analyserer vi utdataene fra denne kommandoen ved hjelp av analyseutdatafunksjonen: vi leter etter linje som vi så tidligere, som begynte med "ISO14443A UID:", siden det er der ID -en for taggen vi skannet er lagret. Når vi finner den linjen, klipper vi den ned og lagrer ID -en til et objekt (kalt ID, hvordan opprinnelig).

Til slutt prøver vi å matche denne ID -en med ID -ene som vi skrev inn i album_directories -objekter (lastet inn via album_directories.json -filen). Hvis det blir funnet en treff, instruerer vi OSMC om å starte en lysbildefremvisning for den spesifikke mappen:

var nfcid = analyseOutput (data); console.log ("nfcid er" + nfcid.id); var samsvarende album = searchTag (nfcid.id, album_directories); if (samsvarende album) {console.log ("Fant album" + JSON.stringify (tilsvarende album) + "for denne taggen"); var args = [{'path': correspondingalbum.directory}]; connection.run ('Player. Open', args); } listenForTag ();

Du merker hvordan vi på slutten av funksjonen lanserer listenForTag igjen? Det er den eneste løsningen jeg har funnet for å få appen til å fungere: explorenfc-basic vil som standard vente på en kode, lese den og deretter avslutte. Appen har en kontinuerlig modus som vi kan kalle ved hjelp av explorenfc -basic -k, men i denne modusen sender child_process aldri ut kodeinnholdet siden det aldri slutter (med andre ord child.stdout.on ('data') blir aldri avfyrt). Siden jeg ikke har funnet noen annen måte å bruke denne leseren på, er det vi gjør her i utgangspunktet å lansere explorenfc-basic i enkelt tag-modus, og når en tag blir lest, starter vi listenForTag og starter derfor explorenfc-basic på nytt.

Hvis jeg måtte gå tilbake (og jeg tror jeg vil), ville jeg valgt en NFC -leser som tilbyr flere alternativer: for eksempel har Adafruit (du har kanskje lagt merke til at jeg er veldig glad i dem) denne leseren https:// www.adafruit.com/product/789 som er kompatibel med libnfc, som jeg tror betyr at leseren vil være mye renere å koble til enn å ringe en barneprosess fra noden og analysere stdout!

Trinn 7: Prøv det

For å starte appen, bare naviger til den mappen og skriv "node index.js" (eller npm start siden vi har konfigurert den tidligere i package.json). I loggene bør du se appen koble til OSMC/Kodi og skanne for første gang. Etter noen sekunder vil filen album_directories.json bli opprettet inne i prosjektkatalogen; Du kan deretter angi NFC -tag -IDene som forklart tidligere og knytte dem til albumene du vil ha.

Trinn 8: Start automatisk

For å oppsummere, har vi opprettet Node-appen som (1) søker etter KODI-bildebiblioteket ditt og prøver å finne mappen der du lagrer feriebildene dine, (2) lytter etter NCF-tagger ved å stole på explorenfc-basic og deretter (3) lanserer albumet som er knyttet til denne NFC -IDen.

For å få hele denne prosessen til å kjøre i bakgrunnen, vil vi bruke PM2, en prosessbehandling for node.

På kommandolinjen, naviger til prosjektmappen din (der index.js -filen er plassert) og skriv inn følgende linjer:

sudo npm installer pm2 -gpm2 start index.js

Appen din overvåkes nå av PM2 og startes på nytt automatisk! For å være sikker på at den faktisk ble lansert, skriver du pm2 list, og du bør se den på listen. Hvis du vil se loggene, skriver du bare pm2 -logger.

Anbefalt: