Spisu treści:

Uruchom pokaz slajdów z wakacji z odrobiną magii!: 9 kroków (ze zdjęciami)
Uruchom pokaz slajdów z wakacji z odrobiną magii!: 9 kroków (ze zdjęciami)

Wideo: Uruchom pokaz slajdów z wakacji z odrobiną magii!: 9 kroków (ze zdjęciami)

Wideo: Uruchom pokaz slajdów z wakacji z odrobiną magii!: 9 kroków (ze zdjęciami)
Wideo: "Rolnik szuka żony". Grzegorz Bardowski przechodzi męki na wakacjach z rodziną. "Dajesz radę?" 2024, Lipiec
Anonim
Uruchom pokaz slajdów z wakacji z odrobiną magii!
Uruchom pokaz slajdów z wakacji z odrobiną magii!
Uruchom pokaz slajdów z wakacji z odrobiną magii!
Uruchom pokaz slajdów z wakacji z odrobiną magii!

Z biegiem lat wyrobiłem sobie nawyk zabierania ze sobą małej figurki podczas podróży: często kupuję małą, pustą artoy (jak ta na zdjęciu) i maluję ją tak, aby pasowała do flagi i motywu kraju, w którym jestem”. m odwiedzający (w tym przypadku Sycylia).

Pomysł polega więc na zrobieniu zdjęć figurki przed scenami lub słynnymi pomnikami z tego kraju: uważam to za dużo zabawniejsze niż robienie zdjęć samego pomnika (jest na to Google i jest to znacznie tańsze), ale nadal łatwiejsze niż posiadanie być na każdym zdjęciu sam (nie jestem fanem, szczerze mówiąc)

Ponieważ zawsze fajnie jest zebrać ludzi, z którymi pojechałeś na wakacje kilka dni po powrocie, aby obejrzeć zdjęcia, pomyślałem, że byłoby miło, gdyby każda figurka mogła w jakiś sposób automatycznie uruchomić pokaz slajdów ze zdjęć z podróży, do której zostały stworzone.

Ta instrukcja wyjaśni, jak to zrobiłem, używając NFC, raspberry pi, nodejs i osmc

Krok 1: Przegląd rozwiązania

Przegląd rozwiązania
Przegląd rozwiązania
Przegląd rozwiązania
Przegląd rozwiązania

Ponieważ cała konfiguracja zawiera kilka rzeczy, oto ogólny przegląd tego, co się z tym wiąże, aby pomóc Ci zrozumieć wszystko, co następuje:

Sprzęt komputerowy

- figurka jest domowej roboty: ponieważ piszę te instrukcje w samym środku tygodniowej podróży w Kopenhadze/Oslo/Sztokholmie/Helsinkach, dołączę kilka ujęć figurki wykonanej na tę podróż

- pod każdą figurką znajduje się chip NFC: używam okrągłych naklejek, które zmieszczę pod każdą figurką, ale możesz użyć dowolnej innej formy - po prostu upewnij się, że chip, którego używasz, jest kompatybilny z twoim czytnikiem

- do wyświetlania zdjęć użyję raspberry pi z zainstalowanym OSMC: jest to mój ulubiony odtwarzacz multimedialny do programów telewizyjnych i filmów, więc jest już podłączony do mojego telewizora

- aby raspberry pi odczytywał tagi NFC dodałem czytnik NFC - ten, którego użyłem to Explore-NFC firmy NXP, dostępny na wielu stronach internetowych: podłącza się do Pi i działa jak tarcza

Oprogramowanie

Na Raspberry Pi skrypt NodeJS czeka na odczytanie tagu NFC: po zakończeniu skrypt sprawdza swój identyfikator na liście wartości/par z każdym folderem ze źródła zdjęć na OSMC i odpowiednim identyfikatorem NFC skonfigurowanym przez użytkownik.

Po odczytaniu tagu, jeśli identyfikator znajduje się na liście, skrypt Node mówi OSMC, aby uruchomił pokaz slajdów dla tego konkretnego folderu. Aby zbudować/skonfigurować tę listę, ten sam skrypt NodeJS uruchamia funkcję skanowania co 5 minut: skanuje każdy katalog w źródle „Obrazy” w OSMC (przy użyciu interfejsu API JSON-RPC oferowanego przez Kodi) i dodaje go do listy, która jest następnie zapisywana na dysku. Poprzez bezpośrednią edycję tego pliku tekstowego użytkownik może dodać odpowiedni identyfikator NFC dla każdego albumu.

Krok 2: Tworzenie Figurki

Tworzenie figurki
Tworzenie figurki
Tworzenie figurki
Tworzenie figurki
Tworzenie figurki
Tworzenie figurki
Tworzenie figurki
Tworzenie figurki

Możesz użyć prawie wszystkiego, co lubisz do swojej figurki: uwielbiam używać tych winylowych zabawek artystycznych, ponieważ są stosunkowo łatwe do narysowania, nawet dla kogoś takiego jak ja, kto nie lubi rysować, i dość łatwe do noszenia. Zamawiam je w wersji blank, DIY, w najmniejszym rozmiarze, jaki przychodzą i rysuję na nich pisakami Posca. Tutaj możesz zobaczyć ten, który zrobiłem na tę wycieczkę, z flagami czterech krajów, które odwiedziliśmy - akurat były na tyle podobne, że udało mi się je połączyć obok siebie. Możesz użyć kilku warstw farby, o ile naprawdę pozwolisz każdej wyschnąć przed malowaniem następnej. Po skończeniu malowania lubię używać opalarki na farbie przez kilka minut, ponieważ czytałem, że to ciepło pomaga w wiązaniu farby Posca.

Na ostatnim zdjęciu widać Svena - zawsze podaję im imiona - odpoczywającego w Oslo po dość długim poranku. Nie ma głowy z oryginalnej zabawki, ponieważ zdążyłem ją zepsuć minutę przed wyjazdem: musiałem zdemontować poprzednią zabawkę, aby zamiast niej użyć jej głowy. Nie mogę powiedzieć, że nigdy wcześniej się nie zdarzyło…

Krok 3: Zainstaluj OSMC

Zainstaluj OSMC
Zainstaluj OSMC

Pierwszą rzeczą, którą zrobiłem, było zainstalowanie OSMC na karcie micro SD dla Raspberry Pi: w naszej konfiguracji będzie służyć jako odtwarzacz multimedialny do oglądania twoich zdjęć. Nie będę szczegółowo omawiał tego aspektu, ponieważ jest on dość dobrze udokumentowany (dostępnych jest kilka instrukcji, jeśli potrzebujesz pomocy). Wystarczy pobrać instalator na swój komputer i postępować zgodnie z instrukcjami. Kiedy skończyłem, po prostu podłączyłem klawiaturę i mysz, podłączyłem HDMI do telewizora i podążałem za kreatorem konfiguracji, aby ustawić strefę czasową itp.

Na koniec dodałem katalog, w którym przechowuję moje zdjęcia do źródeł: w moim przypadku są one przechowywane na serwerze NAS ze stałym adresem IP w tej samej sieci, ale można je również przechowywać na dysku USB lub w samym folderze domowym, pod warunkiem, że karta microSD jest wystarczająco duża.

Podczas dodawania źródła zostaniesz poproszony o podanie jego nazwy: możesz pozostawić domyślną lub zmienić ją, ale pamiętaj, aby ją zapisać, ponieważ będzie nam potrzebna później. W moim przypadku nazwałem to "MyPictures"

Powinieneś teraz zobaczyć zawartość dodanego katalogu i przeglądać swoje zdjęcia: w moim przypadku mam podkatalog dla każdej podróży.

Gratulacje, masz teraz centrum multimedialne ze swoimi zdjęciami i możesz uruchomić pokaz slajdów dla określonego folderu (jako bonus możesz go również użyć do odtwarzania filmów lub muzyki)

Krok 4: Skonfiguruj czytnik

W pozostałej części instrukcji będziemy łączyć się z Pi za pomocą wiersza poleceń przez SSH. Aby to zrobić, po prostu podłącz Pi do sieci za pomocą kabla Ethernet i użyj terminala lub dedykowanego oprogramowania, aby połączyć się z Pi. W systemach Mac OS i Linux polecenie to

ssh [email protected]

Zostaniesz poproszony o podanie hasła, ponownie osmc

Aby czytnik mógł działać, SPI musi być włączony: w większości dystrybucji, takich jak Raspbian, można to zrobić za pomocą raspi-config, narzędzia konfiguracyjnego, które pozwala zmienić niektóre wartości konfiguracyjne.

OSMC nie zawiera jednak raspi-config, dla własnego bezpieczeństwa podczas korzystania z niego. Zamiast tego wyłącz Raspberry, wyjmij kartę micro SD i po prostu zamontuj ją na swoim komputerze: partycja „boot” powinna być teraz widoczna. Tam, w katalogu głównym woluminu, zobaczysz plik o nazwie "config.txt" - po prostu go otwórz i dodaj tę linię na końcu:

„dtparam=spi=wł.”

Możesz teraz zapisać plik, restart i SPI powinny być włączone.

Następnie musisz pobrać załączony plik ZIP i rozpakować go na malinę - polecam utworzenie folderu Projects i rozpakowanie go tam. Aby to zrobić, możesz połączyć się z Raspberry za pomocą FTP przez SSH (ja do tego używam CyberDuck) lub umieścić plik na dysku USB i użyć menedżera plików Kodi, aby skopiować go na Raspberry Pi.

Tak czy inaczej, po skopiowaniu pliku zip do Pi, możesz przejść do folderu, do którego go skopiowałeś, i rozpakować go, przenieść do wynikowego folderu i zainstalować pakiet:

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

Jeśli wszystko pójdzie dobrze, powinieneś być w stanie podłączyć czytnik, zrestartować, a następnie wejść

explorenfc-basic

Jeśli zbliżysz się do czytnika z chipem NFC, powinien on teraz wyświetlić garść informacji z chipa (m.in. jego identyfikator)

Krok 5: Zainstaluj Node i utwórz projekt

Następnie zainstalujemy NodeJS na malinie, aby napisać naszą aplikację.

Chcemy zainstalować nodejs, ale wersja domyślnego repozytorium jest naprawdę stara, więc musisz wykonać pierwszy krok przed: w interfejsie wiersza poleceń wpisz

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

Następnie możesz wpisać

sudo apt zainstaluj nodejs

aby zainstalować najnowszą dostępną wersję nodejs i npm.

Aby kontrolować KODI z poziomu nodejs, użyjemy pakietu npm o nazwie kodi-ws.

Zacznijmy od stworzenia nowego projektu: po prostu wpisz polecenie

początek npm

Zostaniesz poproszony o szereg pytań: w przypadku większości z nich możesz pozostawić domyślne, po prostu wybierz nazwę swojej aplikacji i wpisz na końcu własną nazwę. Gdy zostaniesz zapytany o punkt początkowy, po prostu zostaw index.js

Spowoduje to utworzenie pliku package.json, który będzie podsumowywał cechy twojego pakietu, takie jak jego zależności.

Możesz teraz wejść

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

Jeśli później otworzysz package.json, zauważysz, że wszystkie te pakiety zostały dodane do zależności.

Krok 6: Wyjaśnienie kodeksu

Wyjaśnienie kodeksu
Wyjaśnienie kodeksu

Do tego kroku dołączony jest kod aplikacji.

Zostawiłem sporo logów, które można odkomentować, aby zrozumieć skrypt, ale podzielmy to razem.

Zauważysz, że pomimo wszystkich zadeklarowanych funkcji, kod na początku robi tylko kilka rzeczy:

kodi('localhost', 9090).then(funkcja(połączenie) {

Skrypt próbuje połączyć się z interfejsem API OSMC JSON-RPC. Gdy się powiedzie (i tylko wtedy), kontynuuje z resztą pliku.

Jeśli z jakiegoś powodu nie uruchamiasz tego ze swojego Raspberry Pi, zmień localhost na swój adres IP. Upewnij się również, że w ustawieniach usług wewnątrz OSMC (Ustawienia/Usługi) pole wyboru „Zezwalaj na zdalne sterowanie z aplikacji w innych systemach” (patrz zdjęcie)

Reszta pliku to głównie deklaracje funkcji, których użyjemy później: dwie funkcje, które są faktycznie uruchamiane z tego miejsca, to (linie 172/173)

scanAndSetCron();listenForTag();

W scanAndSetCron:

- uruchomiona jest funkcja scanPictures. Wewnątrz sprawdzamy, czy zmienna "mypicturedirectory", która będzie zawierać ścieżkę do naszych zdjęć, jest pusta. Jeśli tak, prosimy OSMC o podanie wszystkich dostępnych źródeł zawartości obrazu (wewnątrz funkcji getPictureDirectory, wiersz 11):

var piclist = czekaj na połączenie. Files. GetSources("zdjęcia");

OSMC w zamian daje nam tablicę: dla każdego elementu sprawdzamy, czy nazwa źródła zawiera "My": jeśli tak jest, przechowujemy ją jako źródło obrazu (linia 16 i następne). W tym miejscu będziesz chciał zmienić ciąg z „Mój” na ten, który wpisałeś wcześniej jako nazwę źródła swoich zdjęć

if(piclist.sources.label.includes("Moje")) { console.log(">>> Znaleziono katalog " + piclist.sources.plik); mój katalogobrazów = piclist.sources.file; }

Teraz, gdy mamy ścieżkę do źródła (zasadniczo folderu głównego naszych albumów), prosimy OSMC o przeskanowanie go i dodanie ścieżki do każdego folderu do tablicy o nazwie album_directories (jeśli jeszcze jej tam nie ma). Ponieważ ta funkcja będzie uruchamiana co X sekund, przed dodaniem sprawdzamy, czy katalog nie znajduje się już na liście, z identyfikatorem NFC ustawionym na pusty ciąg - w ten sposób każdy nowy folder, który dodasz do swoich zdjęć, będzie automatycznie dodano - wiersz 46

for (var j = 0; j< katalogi.długość;j++) { if(katalogi[j].typpliku.includes("katalog")) { if(katalogwyszukiwania(katalogi[j].plik, katalogi_albumu)) { konsola. log(katalogi[j].plik +" już tam "); } else { console.log(">> Dodanie katalogu " + katalogi[j].plik); album_directories.push({katalog:katalogi[j].plik, nfc:""}); } }}

Na koniec zapisujemy tablicę album_directories do pliku json na Pi, który próbujemy wczytać za każdym razem, gdy funkcja jest wykonywana: dzieje się to na końcu funkcji scanAndSetCron, gdzie używamy pakietu podobnego do crona, aby zapewnić działanie naszej funkcji co 15 sekund.

Wygenerowany przez nas plik JSON, album_directories.json, można otworzyć za pomocą dowolnej aplikacji notatnika. Gdy to zrobisz, zostanie wyświetlona lista Twoich albumów ze zdjęciami, każdy z pustym polem „nfc”:

[{"directory":"/home/osmc/Zdjęcia/Mada 2016/", "nfc":""}, {"directory":"/home/osmc/Zdjęcia/NowyFolder/", "nfc":"" }, {"directory":"/home/osmc/Zdjęcia/Test/", "nfc":""}]

W tym polu musisz teraz wkleić identyfikator tagu, który chcesz powiązać z tym albumem. Aby uzyskać ten identyfikator, po prostu przejdź do folderu SW2827, uruchom explorenfc-basic i zeskanuj tag, którego chcesz użyć. W otrzymanych danych wyjściowych poszukaj wartości obok ISO14443A UID. Skopiuj go do albumu, który chcesz skonfigurować. W moim przypadku na przykład

[{"directory":"/home/osmc/Obrazy/Mada 2016/", "nfc":"040A12EAFC3881"}, {"directory":"/home/osmc/Zdjęcia/NowyFolder/", "nfc":" "}, {"directory":"/home/osmc/Zdjęcia/Test/", "nfc":""}]

Zapisz plik, a jego zawartość zostanie załadowana przy następnym uruchomieniu aplikacji.

W funkcji listenForTag właśnie to robimy: ponieważ nie wydaje się, aby istniał dedykowany port biblioteki czytnika dla NodeJS, polegamy na procesach potomnych, aby uruchomić plik binarny dla czytnika:

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

Polegamy na odbiorniku zdarzeń, aby otrzymać dane wyjściowe z tego wykonania: wewnątrz wywołania zwrotnego dla child.stdout.on('data', function (data), analizujemy dane wyjściowe tego polecenia za pomocą funkcji analysisOutput: szukamy wiersz, który widzieliśmy wcześniej, zaczynając od „ISO14443A UID: , ponieważ to tam jest przechowywany identyfikator skanowanego przez nas tagu. Gdy już znajdziemy tę linię, przycinamy ją i zapisujemy identyfikator w obiekcie (nazywanym ID, jak oryginał).

Na koniec próbujemy dopasować ten identyfikator do identyfikatorów, które wprowadziliśmy w tablicy obiektów album_directories (ładowanej za pośrednictwem pliku album_directories.json). Jeśli zostanie znalezione dopasowanie, poinstruujemy OSMC, aby uruchomiło pokaz slajdów dla tego konkretnego folderu:

var nfcid = analizujWyjście(dane); console.log("nfcid to " + nfcid.id); var odpowiednialbum = searchTag(nfcid.id, album_directories); if(correspondingalbum) { console.log("Znaleziono album " + JSON.stringify(correspondingalbum) + " dla tego tagu"); var args = [{'ścieżka': odpowiednikatalog.katalogu}]; connection.run('Gracz. Otwórz', args); } słuchajForTag();

Zauważyłeś, że na końcu funkcji ponownie uruchamiamy listenForTag ? To jedyne obejście, jakie znalazłem, aby aplikacja działała: explorenfc-basic domyślnie czeka na tag, odczytuje go, a następnie kończy działanie. Aplikacja ma tryb ciągły, który możemy wywołać za pomocą explorenfc-basic -k, ale w tym trybie child_process nigdy nie wyświetla zawartości znacznika, ponieważ nigdy się nie kończy (innymi słowy child.stdout.on('data') nigdy nie jest uruchamiany). Ponieważ nie znalazłem innego sposobu na użycie tego czytnika, to, co tutaj robimy, to w zasadzie uruchomienie explorenfc-basic w trybie pojedynczego tagu, a gdy tag zostanie odczytany, uruchamiamy listenForTag i tym samym ponownie uruchomić explorenfc-basic.

Gdybym miał wrócić (a myślę, że to zrobię), wybrałbym czytnik NFC, który oferuje więcej opcji: na przykład Adafruit (może zauważyłeś, że bardzo je lubię) ma ten czytnik https://www.adafruit.com/product/789, który jest kompatybilny z libnfc, co moim zdaniem oznacza, że interfejs z czytnikiem będzie znacznie czystszy niż wywołanie procesu potomnego z węzła i parsowanie stdout !

Krok 7: Wypróbuj

Aby uruchomić aplikację, po prostu przejdź do tego folderu i wpisz „node index.js” (lub npm start, ponieważ skonfigurowaliśmy go wcześniej w package.json). W dziennikach powinieneś zobaczyć aplikację łączącą się z OSMC/Kodi i skanującą po raz pierwszy. Po kilku sekundach w katalogu projektu zostanie utworzony plik album_directories.json; Następnie możesz wprowadzić identyfikatory tagów NFC, jak wyjaśniono wcześniej, i powiązać je z wybranymi albumami.

Krok 8: Uruchom automatycznie

Podsumowując, stworzyliśmy aplikację Node, która (1) skanuje Twoją bibliotekę zdjęć KODI i próbuje znaleźć folder, w którym przechowujesz zdjęcia z wakacji, (2) nasłuchuje tagów NCF, opierając się na explorenfc-basic, a następnie (3) uruchamia album powiązany z tym identyfikatorem NFC.

Aby cały proces działał w tle, użyjemy PM2, menedżera procesów dla węzła.

W wierszu poleceń przejdź do folderu projektów (w którym znajduje się plik index.js) i wpisz następujące wiersze:

sudo npm install pm2 -gpm2 start index.js

Twoja aplikacja jest teraz monitorowana przez PM2 i zostanie automatycznie zrestartowana! Aby upewnić się, że jest rzeczywiście uruchomiony, wpisz pm2 list i powinieneś go zobaczyć na liście. Jeśli chcesz zobaczyć logi, po prostu wpisz logi pm2.

Zalecana: