Obsah:

Spusťte prezentaci prázdninových obrázků s nádechem magie!: 9 kroků (s obrázky)
Spusťte prezentaci prázdninových obrázků s nádechem magie!: 9 kroků (s obrázky)
Anonim
Spusťte prezentaci fotografií z dovolené s nádechem magie!
Spusťte prezentaci fotografií z dovolené s nádechem magie!
Spusťte prezentaci fotografií z dovolené s nádechem magie!
Spusťte prezentaci fotografií z dovolené s nádechem magie!

Za ta léta jsem si osvojil zvyk brát si s sebou na cesty malou figurku: často si kupuji malou, prázdnou artoy (jako ta na obrázku) a maluji ji tak, aby odpovídala vlajce a tématu země, ve které jsem jsem na návštěvě (v tomto případě na Sicílii).

Smyslem je potom vyfotit figurku před scénami nebo slavnými památkami z uvedené země: Připadá mi to mnohem zábavnější než mít obrázky pouze se samotnou památkou (na to existuje Google a je to mnohem levnější), ale stále jednodušší než mít být na každém obrázku sám (abych nebyl upřímný)

Protože je vždy zábavné shromáždit lidi, se kterými jste jeli o prázdninách, několik dní poté, co jste se vrátili, a podívat se na obrázky, říkal jsem si, že by bylo hezké, kdyby každá figurka mohla nějakým způsobem automaticky spustit prezentaci obrázků z výletu, pro který byla vytvořena..

Tento návod vysvětlí, jak jsem to udělal, pomocí NFC, malinového pi, nodejs a osmc

Krok 1: Přehled řešení

Přehled řešení
Přehled řešení
Přehled řešení
Přehled řešení

Protože celé nastavení obsahuje několik věcí, zde je obecný přehled toho, co je součástí, aby vám pomohl porozumět všemu, co následuje:

Hardware

- figurka je domácí: jelikož píši tyto instrukce přímo uprostřed týdenního výletu v Kodani/Oslo/Stockholmu/Helsinkách, přidám několik záběrů figurky, která byla pro tento výlet vyrobena

- pod každou figurkou je čip NFC: Používám kulaté nálepky, které se mi vejdou pod každou figurku, ale můžete použít jakýkoli jiný tvar - jen se ujistěte, že použitý čip je kompatibilní s vaší čtečkou

- k zobrazení obrázků použiji malinový pi s nainstalovaným OSMC: je to můj oblíbený přehrávač médií pro televizní pořady a filmy, takže je již připojen k mé televizi

- aby malina pi mohla číst NFC tagy, přidal jsem čtečku NFC - používal jsem Explore -NFC od NXP, dostupný na mnoha webech: zapojuje se do Pi a funguje jako štít

Software

Na Raspberry Pi čeká skript NodeJS na přečtení značky NFC: jakmile je hotovo, skript zkontroluje své ID podle seznamu hodnot/párů s každou složkou ze zdroje obrázků v OSMC a odpovídajícím ID NFC, jak je nakonfigurováno uživatel.

Když je tag přečten, pokud je ID v seznamu, skript Node řekne OSMC, aby spustil prezentaci pro tuto konkrétní složku. Aby bylo možné tento seznam sestavit/nakonfigurovat, spustí stejný skript NodeJS funkci skenování každých 5 minut: prohledá každý adresář ve zdroji „Obrázky“na OSMC (pomocí rozhraní JSON-RPC API, které Kodi nabízí) a přidá jej do seznamu, který se poté uloží na disk. Přímou úpravou tohoto textového souboru je pak uživatel schopen přidat odpovídající ID NFC pro každé album.

Krok 2: Vytvoření figurky

Vytvoření figurky
Vytvoření figurky
Vytvoření figurky
Vytvoření figurky
Vytvoření figurky
Vytvoření figurky
Vytvoření figurky
Vytvoření figurky

Pro svoji figurku můžete použít téměř cokoli, co se vám líbí: Miluji používání těchto vinylových uměleckých hraček, protože jsou - relativně - snadno čerpatelné i pro někoho, jako jsem já, který nerad kreslí, a poměrně snadno se nosí. Objednávám je v jejich prázdné, kutilské verzi, v nejmenší velikosti, kterou mají, a kreslím na ně pomocí značek Posca. Zde můžete vidět tu, kterou jsem vytvořil pro tento výlet, s vlajkami čtyř zemí, které jsme navštívili - shodou okolností byly dost podobné na to, abych je mohl kombinovat ze strany na stranu. Můžete použít několik vrstev barvy tak dlouho, dokud opravdu necháte každou zaschnout, než namalujete další. Poté, co jsem skončil s malováním, rád na pár minut použiji na barvu tavnou pistoli, protože jsem se dočetl, že je to vlastně teplo, které pomáhá sadě barev Posca.

Na posledním obrázku můžete vidět, že Sven - vždy jim dávám jména - má po docela dlouhém ránu přestávku v Oslu. Nemá hlavu z původní hračky, protože minutu před odjezdem se mi to podařilo pokazit: Musel jsem demontovat předchozí hračku, abych místo toho použil její hlavu. Nemohu říci, že se to nikdy předtím nestalo …

Krok 3: Nainstalujte OSMC

Nainstalujte OSMC
Nainstalujte OSMC

První věc, kterou jsem udělal, bylo nainstalovat OSMC na kartu micro SD pro Raspberry Pi: v našem nastavení bude sloužit jako přehrávač médií pro sledování vašich obrázků. Nebudu se o tomto aspektu příliš rozepisovat, protože je to docela dobře zdokumentováno (pokud potřebujete pomoc, je k dispozici několik instrukcí). Stačí si stáhnout instalační program do počítače a postupovat podle pokynů. Jakmile jsem skončil, jednoduše jsem připojil klávesnici a myš, připojil HDMI k televizoru a podle průvodce nastavením nastavil časové pásmo atd.

Nakonec jsem ke zdrojům přidal adresář, kam ukládám své obrázky: v mém případě jsou uloženy na NAS s pevnou IP ve stejné síti, ale můžete je také uložit na USB disk nebo do samotné domovské složky, za předpokladu, že je vaše micro SD dostatečně velká.

Při přidávání zdroje budete vyzváni k zadání názvu: výchozí hodnotu můžete ponechat nebo změnit, ale nezapomeňte si ji poznamenat, protože ji budeme potřebovat později. V mém případě jsem tomu říkal „Moje obrázky“

Nyní byste měli vidět obsah adresáře, který jste přidali, a procházet obrázky: v mém případě mám podadresář pro každé cestování.

Gratulujeme, nyní máte mediální centrum, na kterém jsou vaše obrázky, a můžete spustit prezentaci pro konkrétní složku (jako bonus ji můžete použít také k přehrávání videí nebo hudby)

Krok 4: Konfigurace čtečky

Po zbytek instruktážního programu se budeme k Pi připojovat pomocí příkazového řádku přes SSH. Chcete -li to provést, připojte Pi k síti pomocí ethernetového kabelu a pomocí terminálu nebo vyhrazeného sotwaru se připojte k Pi. Na Mac OS a Linux je příkaz

ssh [email protected]

Budete požádáni o zadání hesla, je to opět osmc

Aby mohla čtečka fungovat, musí být povoleno SPI: ve většině distribucí, jako je Raspbian, to lze provést pomocí raspi-config, konfiguračního nástroje, který vám umožňuje změnit některé konfigurační hodnoty.

OSMC však neobsahuje raspi-config, pro vaši vlastní bezpečnost při používání. Místo toho vypněte Raspberry, vysuňte kartu micro SD a připojte ji k počítači: nyní by měl být viditelný oddíl „boot“. V kořenovém adresáři svazku uvidíte soubor s názvem „config.txt“- stačí jej otevřít a na konec přidat tento řádek:

"dtparam = spi = zapnuto"

Nyní můžete soubor uložit, restartovat a SPI by mělo být povoleno.

Poté budete muset stáhnout připojený soubor ZIP a rozbalit jej na malině - doporučuji vytvořit složku Projekty a tam ji rozbalit. Chcete -li to provést, můžete se buď připojit k Raspberry pomocí FTP přes SSH (k tomu používám CyberDuck), nebo umístit soubor na USB disk a pomocí správce souborů Kodi jej zkopírovat na Raspberry Pi.

Ať tak či onak, jakmile zkopírujete soubor zip do Pi, pak můžete přejít do složky, do které jste jej zkopírovali, a rozbalit jej, přesunout se do výsledné složky a nainstalovat balíček:

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

Pokud vše půjde dobře, měli byste být schopni připojit čtečku, restartovat počítač a poté zadat

explorenfc-basic

Pokud se ke čtečce přiblížíte k čipu NFC, měl by nyní zobrazit hromadu informací z čipu (mimo jiné jeho ID)

Krok 5: Nainstalujte Node a vytvořte projekt

Dále nainstalujeme NodeJS na Raspberry a napíšeme naši aplikaci.

Chceme nainstalovat nodejs, ale verze výchozího úložiště je opravdu stará, takže musíte nejprve projít prvním krokem: v rozhraní příkazového řádku zadejte

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

Poté můžete psát

sudo apt install nodejs

nainstalovat nejnovější verzi nodejs a npm k dispozici.

Abychom mohli KODI ovládat zevnitř nodejs, použijeme balíček npm nazvaný kodi-ws.

Začněme vytvořením nového projektu: stačí zadat příkaz

npm init

Bude vám položena řada otázek: u většiny z nich můžete ponechat výchozí nastavení, stačí vybrat název aplikace a na konci zadat své vlastní jméno. Až budete dotázáni na výchozí bod, ponechte index.js

Tím se vytvoří soubor package.json, který shrne vlastnosti vašeho balíčku, například jeho závislosti.

Nyní můžete vstoupit

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

Pokud potom otevřete balíček.json, všimnete si, že všechny tyto balíčky byly přidány do závislostí.

Krok 6: Kód, vysvětleno

Kodex, vysvětleno
Kodex, vysvětleno

K tomuto kroku je připojen kód aplikace.

Zanechal jsem značné množství protokolování, které lze odkomentovat, abychom porozuměli skriptu, ale společně to rozdělíme.

Všimnete si, že navzdory všem deklarovaným funkcím kód zpočátku dělá jen několik věcí:

kodi ('localhost', 9090). pak (funkce (připojení) {

Skript se pokusí připojit k rozhraní OSMC JSON-RPC API. Jakmile se to podaří (a teprve potom), pokračuje se zbytkem souboru.

Pokud to z nějakého důvodu nespustíte ze svého Raspberry Pi, změňte localhost na vaši IP adresu. Také se ujistěte, že v nastavení služby v OSMC (Nastavení/Služby) je zaškrtávací políčko „Povolit dálkové ovládání z aplikací v jiných systémech“(viz obrázek)

Zbytek souboru jsou většinou deklarace funkcí, které použijeme později: dvě funkce, které jsou zde skutečně spuštěny, jsou (řádky 172/173)

scanAndSetCron (); listenForTag ();

V scanAndSetCron:

- je spuštěna funkce scanPictures. V něm kontrolujeme, zda je proměnná „mypicturedirectory“, která bude obsahovat cestu k našim obrázkům, prázdná. Pokud ano, požádáme OSMC, aby nám poskytl všechny zdroje, které má pro obsah obrázku (uvnitř funkce getPictureDirectory, řádek 11):

var piclist = čekejte na connection. Files. GetSources ("obrázky");

OSMC nám na oplátku poskytuje pole: u každé položky zkontrolujeme, zda název zdroje obsahuje „My“: v takovém případě jej uložíme jako zdroj obrázku (řádek 16 a následující). Zde budete chtít změnit řetězec z „My“na cokoli, co jste dříve zadali jako název zdroje obrázků

if (piclist.sources .label.includes ("My")) {console.log (">>> Found the directory" + piclist.sources .file); mypicturedirectory = piclist.sources .soubor; }

Nyní, když máme cestu ke zdroji (v podstatě kořenovou složku našich alb), požádáme OSMC, aby ji naskenovala a přidala cestu pro každou složku do pole s názvem album_directories (pokud již není). Protože tato funkce bude spuštěna každých X sekund, zkontrolujeme, zda adresář ještě není v seznamu, než jej přidáme, s ID NFC nastaveným na prázdný řetězec - tak bude každá nová složka, kterou přidáte do svých obrázků, automaticky doplněno - řádek 46

for (var j = 0; j <directories.length; j ++) {if (directories [j].filetype.includes ("directory")) {if (searchDirectory (directories [j].file, album_directories)) {console. log (adresáře [j].soubor +"již existuje"); } else {console.log (">> Přidávání adresářů" + adresáře [j].soubor); album_directories.push ({adresář: adresáře [j].soubor, nfc: ""}); }}}

Nakonec uložíme pole album_directories do souboru json na Pi, který se pokusíme načíst pokaždé, když je funkce spuštěna: to se stane na konci funkce scanAndSetCron, kde použijeme balíček podobný cronu, abychom zajistili spuštění naší funkce každých 15 sekund.

Soubor JSON, který generujeme, album_directories.json, lze otevřít pomocí jakékoli aplikace poznámkového bloku. Jakmile tak učiníte, zobrazí se vám seznam vašich fotoalb, každé s prázdným polem „nfc“:

[{"directory": "/home/osmc/Pictures/Mada 2016/", "nfc": ""}}, {"directory": "/home/osmc/Pictures/NewFolder/", "nfc": "" }, {"adresář": "/home/osmc/Obrázky/Test/", "nfc": ""}]

Do tohoto pole nyní musíte vložit ID značky, kterou chcete přiřadit k tomuto albu. Chcete-li získat toto ID, přejděte do složky SW2827, spusťte explorenfc-basic a naskenujte značku, kterou chcete použít. Na výstupu, který získáte, stačí hledat hodnotu vedle ISO14443A UID. Zkopírujte jej do alba, které chcete konfigurovat. V mém případě např.

[{"adresář": "/home/osmc/Obrázky/Mada 2016/", "nfc": "040A12EAFC3881"}, {"adresář": "/home/osmc/Pictures/NewFolder/", "nfc": " "}, {" adresář ":"/home/osmc/Obrázky/Test/"," nfc ":" "}]

Uložte soubor a jeho obsah se načte při příštím spuštění aplikace.

Ve funkci listenForTag děláme právě to: protože se nezdá, že by pro NodeJS existoval vyhrazený port knihovny čtenářů, spoléháme se na to, že dětské procesy spustí binární soubor pro čtečku:

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

Při přijímání výstupu z tohoto provedení spoléháme na událostní listener: uvnitř zpětného volání pro child.stdout.on ('data', function (data) analyzujeme výstup tohoto příkazu pomocí funkce analyzeOutput: hledáme řádek, který jsme viděli dříve, počínaje „ISO14443A UID:“, protože tam je uloženo ID pro značku, kterou jsme skenovali. Jakmile tento řádek najdeme, zkrátíme jej a ID uložíme do objektu (nazývaného ID, jak originál).

Nakonec se pokusíme přiřadit toto ID k ID, která jsme zadali do pole objektů album_directories (načteno prostřednictvím souboru album_directories.json). Pokud je nalezena shoda, zadáváme OSMC spuštění prezentace pro tuto konkrétní složku:

var nfcid = analyzeOutput (data); console.log ("nfcid is" + nfcid.id); var odpovídající album = searchTag (nfcid.id, album_directories); if (correspondingalbum) {console.log ("Found album" + JSON.stringify (correspondingalbum) + "for this tag"); var args = [{'cesta': korespondenční album.directory}]; connection.run ('Player. Open', args); } listenForTag ();

Všimli jste si, jak na konci funkce znovu spustíme listenForTag? To je jediné řešení, které jsem našel, aby aplikace fungovala: explorenfc-basic bude ve výchozím nastavení čekat na značku, přečíst si ji a poté ukončit. Aplikace má nepřetržitý režim, který můžeme volat pomocí explorenfc -basic -k, ale v tomto režimu child_process nikdy nevydává obsah tagu, protože nikdy nekončí (jinými slovy child.stdout.on ('data') se nikdy nespouští). Jelikož jsem nenašel žádný jiný způsob, jak tuto čtečku použít, děláme zde v zásadě spouštění explorenfc-basic v režimu jedné značky, a když je tag přečten, spustíme listenForTag, a proto restartujeme explorenfc-basic.

Pokud bych se měl vrátit (a myslím, že budu), zvolil bych čtečku NFC, která nabízí více možností: například Adafruit (možná jste si všimli, že je mám velmi rád) má tuto čtečku https:// www.adafruit.com/product/789, který je kompatibilní s libnfc, což podle mě znamená, že čtečka bude mnohem čistší na rozhraní než volat podřízený proces zevnitř uzlu a analyzovat stdout!

Krok 7: Zkuste to

Chcete -li aplikaci spustit, přejděte do této složky a zadejte „node index.js“(nebo npm start, protože jsme ji nakonfigurovali dříve v Package.json). V protokolech byste měli vidět připojení aplikace k OSMC/Kodi a první skenování. Po několika sekundách se v adresáři projektu vytvoří soubor album_directories.json; Poté můžete zadat ID tagů NFC, jak bylo vysvětleno výše, a přiřadit je k požadovaným albům.

Krok 8: Spusťte automaticky

Abychom to shrnuli, vytvořili jsme aplikaci Node, která (1) prohledává vaši knihovnu obrázků KODI a pokusí se najít složku, kam ukládáte obrázky z dovolené, (2) naslouchá tagům NCF spoléháním na explorenfc-basic a poté (3) spustí album spojené s tímto NFC ID.

Aby celý tento proces běžel na pozadí, použijeme PM2, správce procesů pro uzel.

Na příkazovém řádku přejděte do složky projektů (kde se nachází váš soubor index.js) a zadejte následující řádky:

sudo npm install pm2 -gpm2 start index.js

Vaše aplikace je nyní monitorována PM2 a bude automaticky restartována! Abyste se ujistili, že je skutečně spuštěn, zadejte seznam pm2 a měli byste ho v seznamu vidět. Pokud chcete zobrazit protokoly, zadejte protokoly pm2.

Doporučuje: