İçindekiler:

Tatil Resimleri Slayt Gösterinizi Sihirli Bir Dokunuşla Başlatın!: 9 Adım (Resimlerle)
Tatil Resimleri Slayt Gösterinizi Sihirli Bir Dokunuşla Başlatın!: 9 Adım (Resimlerle)

Video: Tatil Resimleri Slayt Gösterinizi Sihirli Bir Dokunuşla Başlatın!: 9 Adım (Resimlerle)

Video: Tatil Resimleri Slayt Gösterinizi Sihirli Bir Dokunuşla Başlatın!: 9 Adım (Resimlerle)
Video: Yaşamın Genetik Şifresi OYUN - Dr. Öğrt. Üyesi Gökhan GÜNEŞ - Mersin Üniversitesi - Eğitim Fakültesi 2024, Temmuz
Anonim
Bir Sihir Dokunuşuyla Tatil Resimleri Slayt Gösterinizi Başlatın!
Bir Sihir Dokunuşuyla Tatil Resimleri Slayt Gösterinizi Başlatın!
Bir Sihir Dokunuşuyla Tatil Resimleri Slayt Gösterinizi Başlatın!
Bir Sihir Dokunuşuyla Tatil Resimleri Slayt Gösterinizi Başlatın!

Yıllar geçtikçe, seyahat ederken yanıma küçük bir heykelcik alma alışkanlığı edindim: Sık sık küçük, boş bir artoy (resimdeki gibi) satın alır ve onu, bulunduğum ülkenin bayrağına ve temasına uyacak şekilde boyarım. m ziyaret (bu durumda, Sicilya).

O zaman fikir, söz konusu ülkedeki sahnelerin veya ünlü anıtların önündeki heykelciklerin fotoğraflarını çekmek: Sadece anıtın kendisiyle fotoğraf çekmekten çok daha komik buluyorum (bunun için Google var ve çok daha ucuz) ama yine de sahip olmaktan daha kolay. her fotoğrafta kendim olmak (hayran değil, dürüst olmak gerekirse)

Tatile gittiğiniz insanları resimleri izlemek için döndükten birkaç gün sonra bir araya getirmek her zaman eğlenceli olduğundan, her heykelcik bir şekilde otomatik olarak yapıldıkları geziden resimlerin bir slayt gösterisini başlatabilirse iyi olur diye düşündüm..

Bu talimat, NFC, ahududu pi, nodejs ve osmc kullanarak nasıl yaptığımı açıklayacak.

Adım 1: Çözüme Genel Bakış

Çözüme Genel Bakış
Çözüme Genel Bakış
Çözüme Genel Bakış
Çözüme Genel Bakış

Tüm kurulum birkaç şey içerdiğinden, aşağıdaki her şeyi anlamanıza yardımcı olmak için nelerin dahil olduğuna dair genel bir bakış:

Donanım

- heykelcik ev yapımı: Bu talimatları Kopenhag/Oslo/Stockholm/Helsinki'de bir haftalık bir gezinin tam ortasında yazdığım için, bu gezi için yapılan heykelciğin birkaç fotoğrafını ekleyeceğim

- her heykelciğin altında bir NFC çipi var: Her bir heykelciğin altına sığdırabileceğim yuvarlak çıkartmalar kullanıyorum ama başka bir form faktörü kullanabilirsiniz - kullandığınız çipin okuyucunuzla uyumlu olduğundan emin olun

- resimleri görüntülemek için OSMC'nin kurulu olduğu bir ahududu pi kullanacağım: TV şovları ve Filmler için tercih ettiğim medya oynatıcı bu yüzden zaten televizyonuma bağlı

- ahududu pi'nin NFC etiketlerini okuması için bir NFC okuyucu ekledim - kullandığım, birçok web sitesinde bulunan NXP'den Explore-NFC'dir: Pi'ye takılır ve bir kalkan görevi görür

Yazılım

Raspberry Pi'de, bir NodeJS betiği, bir NFC etiketinin okunmasını bekler: bu yapıldıktan sonra, betik, OSMC'deki resim kaynağındaki her klasör ve tarafından yapılandırıldığı gibi ilgili NFC Kimliği ile bir değer/çift listesine göre kimliğini kontrol eder. Kullanıcı.

Etiket okunduğunda, kimlik listedeyse, Düğüm komut dosyası OSMC'ye bu belirli klasör için slayt gösterisini başlatmasını söyler. Bu listeyi oluşturmak/yapılandırmak için aynı NodeJS komut dosyası her 5 dakikada bir bir tarama işlevi başlatır: OSMC'deki "Resimler" kaynağındaki her dizini tarar (Kodi'nin sunduğu JSON-RPC API'sini kullanarak) ve onu daha sonra diske kaydedilen bir listeye ekler. Bu metin dosyasını doğrudan düzenleyerek, kullanıcı her albüm için ilgili NFC Kimliğini ekleyebilir.

Adım 2: Figürü Oluşturma

Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma
Figürü Oluşturma

Heykelciğiniz için hemen hemen istediğiniz her şeyi kullanabilirsiniz: Bu vinil sanat oyuncaklarını kullanmayı seviyorum çünkü onlar - nispeten - benim gibi çizmeyi sevmeyen biri için bile çizmesi kolay ve taşıması oldukça kolay. Onları boş, DIY versiyonlarında, geldikleri en küçük boyutta sipariş ediyorum ve Posca kalemlerini kullanarak üzerlerine çiziyorum. Burada ziyaret ettiğimiz dört ülkenin bayraklarıyla bu gezi için yaptığımı görebilirsiniz - yan yana birleştirmem için yeterince benzerler. Bir sonrakini boyamadan önce her birinin gerçekten kurumasına izin verdiğiniz sürece birkaç kat boya kullanabilirsiniz. Boyamayı bitirdikten sonra, Posca boya setine yardımcı olanın aslında ısı olduğunu okuduğum için boya üzerinde birkaç dakika ısı tabancası kullanmayı seviyorum.

Son fotoğrafta Sven'i -her zaman onlara isim veririm- oldukça uzun bir sabahtan sonra Oslo'da mola verirken görebilirsiniz. Orjinal oyuncağın kafasına sahip değil, çünkü ayrılmadan bir dakika önce onu mahvetmeyi başardım: Onun yerine kafasını kullanmak için önceki bir oyuncağı sökmek zorunda kaldım. Daha önce hiç olmadığını söyleyemem…

3. Adım: OSMC'yi yükleyin

OSMC'yi yükleyin
OSMC'yi yükleyin

Yaptığım ilk şey, Raspberry Pi için bir mikro SD karta OSMC yüklemek oldu: bizim kurulumumuzda, resimlerinizi izlemek için medya oynatıcı görevi görecek. Oldukça iyi belgelendiğinden bu konuda fazla ayrıntıya girmeyeceğim (yardıma ihtiyacınız olursa, birkaç Talimat var). Sadece yükleyiciyi bilgisayarınıza indirin ve talimatları izleyin. Bitirdikten sonra, bir klavye ve fareyi taktım ve HDMI'yı TV'ye taktım ve saat dilimini vb. ayarlamak için kurulum sihirbazını takip ettim.

Son olarak, resimlerimi depoladığım dizini kaynaklara ekledim: benim durumumda, aynı ağ üzerinde sabit bir IP'ye sahip bir NAS'ta saklanıyorlar, ancak bunları bir USB sürücüsünde veya ana klasörün kendisinde de saklayabilirsiniz, mikro SD'nizin yeterince büyük olması şartıyla.

Kaynağı eklerken, bunun için bir ad girmeniz istenecektir: varsayılanı bırakabilir veya değiştirebilirsiniz, ancak daha sonra ihtiyacımız olacağı için mutlaka not edin. Benim durumumda buna "Resimlerim" adını verdim.

Şimdi eklediğiniz dizinin içeriğini görmeli ve resimlerinize göz atmalısınız: benim durumumda her seyahat için bir alt dizinim var.

Tebrikler, artık üzerinde resimlerinizin olduğu bir medya merkeziniz var ve belirli bir klasör için bir slayt gösterisi başlatabilirsiniz (bonus olarak, videolarınızı veya müziğinizi oynatmak için de kullanabilirsiniz)

4. Adım: Okuyucuyu Yapılandırın

Eğitilebilirliğin geri kalanı için, SSH üzerinden komut satırını kullanarak Pi'ye bağlanacağız. Bunu yapmak için, bir Ethernet kablosu kullanarak Pi'yi ağınıza bağlayın ve Pi'ye bağlanmak için terminali veya özel bir yazılımı kullanın. Mac OS ve Linux'ta komut şudur:

ssh [email protected]

Bir şifre girmeniz istenecek, yine osmc

Okuyucunun çalışabilmesi için SPI'nin etkinleştirilmesi gerekir: Raspbian gibi çoğu dağıtımda bu, bazı yapılandırma değerlerini değiştirmenize izin veren bir yapılandırma aracı olan raspi-config kullanılarak yapılabilir.

Ancak OSMC, kullanırken kendi güvenliğiniz için raspi-config içermez. Bunun yerine Raspberry'yi kapatın, mikro SD kartı çıkarın ve bilgisayarınıza monte edin: "önyükleme" bölümü şimdi görünür olmalıdır. Orada, birimin kökünde "config.txt" adlı bir dosya göreceksiniz - sadece açın ve sonuna şu satırı ekleyin:

"dtparam=spi=açık"

Artık dosyayı kaydedebilir, yeniden başlatabilirsiniz ve SPI etkinleştirilmelidir.

Bundan sonra, ekteki ZIP dosyasını indirmeniz ve ahududu üzerinde açmanız gerekecek - bir Projeler klasörü oluşturmanızı ve orada açmanızı tavsiye ederim. Bunu yapmak için, SSH üzerinden FTP kullanarak Raspberry'ye bağlanabilir (bunu yapmak için CyberDuck kullanıyorum) veya dosyayı bir USB Sürücüye koyabilir ve Raspberry Pi'ye kopyalamak için Kodi'nin dosya yöneticisini kullanabilirsiniz.

Her iki durumda da, zip dosyasını Pi'ye kopyaladıktan sonra, onu kopyaladığınız klasöre gidebilir ve sıkıştırmasını açabilir, ortaya çıkan klasöre gidebilir ve paketi yükleyebilirsiniz:

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

Her şey yolunda giderse, okuyucuyu bağlayabilmeli, yeniden başlatabilmeli ve ardından

explorenfc-temel

Okuyucuya bir NFC yongasına yaklaşırsanız, artık yongadan bir sürü bilgi göstermelidir (diğer şeylerin yanı sıra kimliği)

Adım 5: Düğümü Kurun ve Projeyi Oluşturun

Ardından, uygulamamızı yazmak için ahududuya NodeJS yükleyeceğiz.

Nodejs yüklemek istiyoruz, ancak varsayılan deponun sürümü gerçekten eski, bu nedenle önce ilk adımı atmanız gerekiyor: komut satırı arayüzüne şunu yazın

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

sonra yazabilirsiniz

sudo apt kurulum düğümü

mevcut nodejs ve npm'nin en son sürümünü yüklemek için.

KODI'yi düğümler içinden kontrol etmek için kodi-ws adlı bir npm paketi kullanacağız.

Yeni bir proje oluşturarak başlayalım: sadece komutu yazın

npm başlangıç

Size bir dizi soru sorulacak: çoğu için varsayılanı bırakabilirsiniz, uygulamanız için bir ad seçin ve sonunda kendi adınızı girin. Başlangıç noktası sorulduğunda index.js'den ayrılmanız yeterli

Bu, paketinizin bağımlılıkları gibi özelliklerini özetleyen bir package.json dosyası oluşturacaktır.

şimdi girebilirsiniz

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

Bundan sonra package.json'u açarsanız, tüm bu paketlerin bağımlılıklara eklendiğini fark edeceksiniz.

Adım 6: Kod, Açıklandı

Kod, Açıklamalı
Kod, Açıklamalı

Bu adıma, uygulamanın kodu eklenmiştir.

Senaryoyu anlamak için yorumlanamayacak kadar çok sayıda günlük kaydı bıraktım ama birlikte parçalayalım.

Bildirilen tüm işlevlere rağmen, kodun ilk başta yalnızca birkaç şey yaptığını fark edeceksiniz:

kodi('localhost', 9090).then(işlev(bağlantı) {

Komut dosyası, OSMC JSON-RPC API'sine bağlanmaya çalışır. Başarılı olduğunda (ve ancak o zaman), dosyanın geri kalanıyla devam eder.

Herhangi bir nedenle bunu Raspberry Pi'nizden çalıştırmıyorsanız, localhost'u IP adresinize değiştirin. Ayrıca OSMC (Ayarlar/Hizmetler) içindeki hizmet ayarlarında "Diğer sistemlerdeki uygulamalardan uzaktan kontrole izin ver" onay kutusunun işaretlendiğinden emin olun (resme bakın)

Dosyanın geri kalanı çoğunlukla daha sonra kullanacağımız işlevlerin bildirimleridir: buradan başlatılan iki işlev (satır 172/173)

scanAndSetCron();listenForTag();

scanAndSetCron'da:

- scanPictures işlevi başlatılır. İçinde resimlerimizin yolunu tutacak olan "mypicturedirectory" değişkeninin boş olup olmadığını kontrol ediyoruz. Öyleyse, OSMC'den resim içeriği için sahip olduğu tüm kaynakları bize vermesini isteriz (getPictureDirectory işlevi içinde, satır 11):

var piclist = wait connection. Files. GetSources("pictures");

OSMC bize karşılığında bir dizi verir: her öğe için, kaynak adının "Benim" içerip içermediğini kontrol ederiz: durum buysa, onu resim kaynağımız olarak saklarız (satır 16 ve sonraki). Burası, "Benim" olan dizeyi, resim kaynağınız için daha önce girdiğiniz herhangi bir adla değiştirmek isteyeceğiniz yerdir.

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

Artık kaynağa giden yola (esas olarak albümlerimizin kök klasörü) sahip olduğumuza göre, OSMC'den onu taramasını ve her klasörün yolunu album_directories (zaten orada değilse) adlı bir diziye eklemesini istiyoruz. Bu işlev her X saniyede bir çalıştırılacağından, eklemeden önce dizinin listede olmadığını kontrol ederiz, NFC Kimliği boş bir dizeye ayarlanır - bu şekilde resimlerinize eklediğiniz her yeni klasör otomatik olarak eklendi - satır 46

for (var j = 0; j< directory.length;j++) { if(directories[j].filetype.includes("directory")) { if(searchDirectory(directories[j].file, album_directories)) { konsol. log(dizinler[j].file +" zaten orada "); } else { console.log(">> Dizin ekleniyor " + dizinler[j].dosya); album_directories.push({dizin:dizinler[j].dosya, nfc:""}); } }}

Sonunda, album_directories dizisini, fonksiyon her çalıştırıldığında yüklemeye çalıştığımız Pi'deki bir json dosyasına kaydederiz: bu, fonksiyonumuzun çalıştığından emin olmak için cron benzeri bir paket kullandığımız scanAndSetCron fonksiyonunun sonunda olur. her 15 saniyede bir.

Oluşturduğumuz JSON dosyası, album_directories.json, herhangi bir not defteri uygulaması kullanılarak açılabilir. Bunu yaptığınızda, her biri boş bir "nfc" alanına sahip olan fotoğraf albümlerinizin listesiyle karşılaşacaksınız:

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

Bu alana artık bu albümle ilişkilendirmek istediğiniz etiketin kimliğini yapıştırmanız gerekiyor. Bu kimliği almak için SW2827 klasörüne gidin, explorenfc-basic'i çalıştırın ve kullanmak istediğiniz etiketi tarayın. Aldığınız çıktıda, ISO14443A UID'nin yanındaki değeri arayın. Yapılandırmak istediğiniz albüme kopyalayın. Benim durumumda, örneğin,

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

Dosyayı kaydedin, uygulamayı bir sonraki başlatışınızda içeriği yüklenecektir.

listenForTag işlevinde, tam olarak bunu yapıyoruz: Okuyucu kitaplığının NodeJS için ayrılmış bir bağlantı noktası olmadığı için, okuyucu için ikili dosyayı başlatmak için alt süreçlere güveniyoruz:

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

Bu yürütmenin çıktısını almak için bir olay dinleyicisine güveniriz: child.stdout.on('data', function (data) için geri çağırma içinde, bu komutun çıktısını analizOutput işlevini kullanarak ayrıştırırız: daha önce gördüğümüz "ISO14443A UID:" ile başlayan satır, çünkü taradığımız etiketin kimliğinin depolandığı yer burasıdır. Bu satırı bulduğumuzda, onu kısaltır ve kimliği bir nesneye kaydederiz (ID olarak adlandırılır, nasıl orijinal).

Son olarak, bu kimliği (albüm_dizinleri.json dosyası aracılığıyla yüklenen) nesnelerin album_directories dizisine girdiğimiz kimliklerle eşleştirmeye çalışıyoruz. Bir eşleşme bulunursa, OSMC'ye söz konusu klasör için bir slayt gösterisi başlatması talimatını veririz:

var nfcid = analizOutput(veri); konsol.log("nfcid is " + nfcid.id); var karşılık gelenalbum = searchTag(nfcid.id, album_directories); if(correspondingalbum) { console.log("Bu etiket için albüm bulundu " + JSON.stringify(karşılıklı albüm) + "); var args = [{'yol': karşılık gelenalbum.dizin}]; connection.run('Player. Open', argümanlar); } listenForTag();

Fonksiyonun sonunda tekrar listenForTag'i nasıl başlattığımızı fark ettiniz mi? Uygulamayı çalıştırmak için bulduğum tek geçici çözüm bu: explorenfc-basic varsayılan olarak bir etiketi bekleyecek, okuyacak ve çıkacak. Uygulamanın, explorenfc-basic -k kullanarak arayabileceğimiz bir sürekli modu var, ancak bu modda, child_process asla bitmediği için (başka bir deyişle child.stdout.on('data') hiçbir zaman tetiklenmediği için etiket içeriğinin çıktısını vermez.). Bu okuyucuyu kullanmanın başka bir yolunu bulamadığım için burada yaptığımız şey temelde tek etiket modunda explorenfc-basic'i başlatmak ve bir etiket okunduğunda listenForTag'i başlatıyoruz ve bu nedenle explorenfc-basic'i yeniden başlatıyoruz.

Geri dönmek zorunda kalsaydım (ve sanırım yapacağım), daha fazla seçenek sunan bir NFC okuyucu seçerdim: örneğin, Adafruit (onları çok sevdiğimi fark etmiş olabilirsiniz) bu okuyucuya sahip https://www.adafruit.com/product/789 libnfc ile uyumlu, bu da okuyucunun arabirim için düğüm içinden bir alt süreç çağırıp stdout'u ayrıştırmaktan çok daha temiz olacağı anlamına geliyor!

Adım 7: Deneyin

Uygulamayı başlatmak için, o klasöre gidin ve "node index.js" yazın (veya daha önce package.json'da yapılandırdığımızdan beri npm start). Günlüklerde, OSMC/Kodi'ye bağlanan ve ilk kez tarama yapan uygulamayı görmelisiniz. Birkaç saniye sonra proje dizini içinde album_directories.json dosyası oluşturulacaktır; Ardından, daha önce açıklandığı gibi NFC etiket kimliklerini girebilir ve bunları istediğiniz albümlerle ilişkilendirebilirsiniz.

8. Adım: Otomatik Olarak Başlatın

Özetlemek gerekirse, (1) KODI resim kitaplığınızı tarayan ve tatil resimlerinizi sakladığınız klasörü bulmaya çalışan, (2) explorenfc-basic'e güvenerek NCF etiketlerini dinleyen ve ardından (3) bu NFC Kimliği ile ilişkili albümü başlatır.

Tüm bu süreci arka planda çalıştırmak için, düğüm için bir süreç yöneticisi olan PM2'yi kullanacağız.

Komut satırında, projeler klasörünüze (index.js dosyanızın bulunduğu yere) gidin ve aşağıdaki satırları yazın:

sudo npm install pm2 -gpm2 index.js'yi başlat

Uygulamanız artık PM2 tarafından izleniyor ve otomatik olarak yeniden başlatılacak! Gerçekten başlatıldığından emin olmak için pm2 list yazın ve listede görmelisiniz. Günlükleri görmek istiyorsanız, pm2 günlükleri yazmanız yeterlidir.

Önerilen: