Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Prowadząc świąteczny pokaz świetlny zsynchronizowany z muzyką, możesz chcieć rozpocząć pokaz, naciskając przycisk. Ten samouczek dotyczy tylko pokazu kontrolowanego przez Falcon Pi Player (FPP) uruchomiony na Raspberry Pi. Jeśli korzystasz z FPP, prawdopodobnie używasz kontrolerów Falcon i używasz xLights lub LightORama do sekwencjonowania swojego pokazu. Jeśli żadne z tych słów nic ci nie mówi, ten samouczek jest na razie prawdopodobnie trochę przesadzony i powinieneś zacząć od przeczytania tej wiki https://auschristmaslighting.com/wiki/ i dołączenia do grupy na Facebooku, jak poniżej
- xLights:
- Ogólne zaawansowane lampki świąteczne:
- Falcon Pi Player:
- Dzielenie się pomysłami na obudowy/rekwizyty:
- „Nie konkretnie xLights lub LOR Related”:
- Dostawcy xLights Holiday Light:
- Boże Narodzenie zrób to sam:
Krok 1: Lista części
Będziesz potrzebować następujących przedmiotów:
- Przycisk. Użyłem tego z pierścieniem LED wokół niego: [Amazon]
- Rezystor. Najlepiej 200Ω lub więcej (2 z nich, jeśli używasz przycisku LED) Standardowe 1/4W lub 1/8W jest w porządku
- Przewód łączący. Miernik, którego powinieneś użyć, zależy od odległości przycisku od twojego Pi. Użyłem drutu 18awg na około 10 stóp od mojego Pi i działał bezbłędnie
- Sposób na podłączenie przewodu do pinów GPIO Pi. Możesz użyć kabla taśmowego z płytką stykową lub możesz po prostu użyć złączy żeńskich, tak jak ja. Potrzebujemy tylko 3 przewodów - uziemienia, 5V i danych do przycisku. [Amazonka]
- (Opcjonalnie) Wodoodporne złącze na każdym końcu dla łatwej konserwacji. Używam 3-pinowych złączy klasy morskiej: [Amazon]
- (Opcjonalnie) Złączki termokurczliwe [Amazon]
Krok 2: Schemat połączeń
Na zdjęciach pokazano schemat połączeń przycisku bez dołączonej diody LED oraz przycisku z diodą LED. Sposób, w jaki skonfigurowałem schemat połączeń, pozwala na uruchomienie przycisku i światła (ciągle włączone) za pomocą zaledwie 3 przewodów.
Dla pinu GPIO wybierz dowolny z pinów GPIO na pi. Użyj również pinów +5V i Gnd. Prawdopodobnie możesz uciec z użyciem pinu 3,3 V, ale spadek napięcia na kilku metrach przewodu może sprawić, że sygnał będzie niewiarygodny lub nie wystarczy, aby zapalić diodę LED.
UWAGA: 3-stykowe złącze nie będzie pasować do otworu, w którym należy wywiercić przycisk z pierścieniową lampką LED. Podłącz więc złącze po umieszczeniu przycisku w płycie czołowej.
Krok 3: Podstawowa konfiguracja Falcon Pi Player
UWAGA - FPP jest stale aktualizowane i jest całkowicie możliwe, że poprawią obsługę skryptów lub że domyślną funkcję "naciśnij przycisk, aby rozpocząć", która wymaga mniej programowania.
Postępowałem zgodnie z powyższym filmem, aby wstępnie skonfigurować wszystko.
Uważam, że filmy są nudne i wolne, więc oto ich podsumowanie:
- Zaimportuj swoją sekwencję do fpp za pomocą menedżera plików
- Utwórz listę odtwarzania z zawartą w niej sekwencją. W następnych krokach playlista będzie nazywać się „playme”
-
Otwórz pusty plik notatnika i wpisz:
- #!/kosz/sz
- fpp -P playme
- Zapisz go jako plik.sh na swoim komputerze
- Przejdź do menedżera plików w FPP i prześlij swój plik skryptu. Przejdź do zakładki „Skrypty” i upewnij się, że tam jest
- W sekcji Status/Kontrola przejdź do Zdarzeń
- Utwórz nowe wydarzenie. Identyfikator zdarzenia 1/1, nazwa zdarzenia dowolna, sekwencja efektów BRAK, skrypt zdarzenia
- Przejdź pod Input/Output Setup i kliknij wyzwalacze GPIO
- Przełącz pinezkę, do której dołączony jest przycisk. Jeśli po naciśnięciu przycisku spadnie, ustaw wydarzenie w opcji Falling, jeśli jest aktywne, ustaw wydarzenie na Rising.
- Kliknij przycisk Uruchom ponownie, gdy pojawi się ostrzeżenie, które pojawi się po wprowadzeniu wszystkich zmian
Po wykonaniu tych wszystkich czynności powinieneś być w stanie nacisnąć przycisk, aby rozpocząć pokaz. Hurra!
Jednak ta metoda ma pewne ograniczenia. Jeśli naciśniesz przycisk ponownie podczas odtwarzania listy odtwarzania, albo 1) nic nie zrobi, albo 2) spowoduje awarię FPP i odmówi wykonania czegokolwiek z twoim przyciskiem, dopóki go nie zrestartujesz. Jeśli więc po prostu używasz przycisku jako dramatycznego sposobu odtwarzania swojego programu na polecenie, powyższa metoda będzie wszystkim, czego potrzebujesz.
Jeśli potrzebujesz czegoś więcej, przejdź do następnego kroku
Krok 4: Bardziej solidny skrypt
Poniżej znajduje się scenariusz, do którego ostatecznie dotarłem. Możesz zobaczyć skrypt na Github tutaj: [Gist. Github]
- Jeśli ktoś naciśnie przycisk w „nocnych” godzinach, odtworzy Tiger Rag (mój utwór1), a następnie przejdzie do sekwencji gotowości, która zapętla się w nieskończoność.
- Jeśli przycisk zostanie naciśnięty podczas odtwarzania Tiger Rag, rozpocznie się moja druga piosenka, Alleluja, a następnie przejdzie do sekwencji gotowości w nieskończoność.
- Ale jeśli ktoś naciśnie przycisk w ciągu dnia lub bardzo późno w nocy, odtworzy raz Tiger Rag, a następnie wyłączy wszystkie światła.
Dzięki temu przycisk może działać o każdej porze dnia, ale światła nie muszą być włączone przez cały czas. Pozwala również na odtwarzanie wielu utworów za pomocą 1 przycisku, identyfikując aktualnie odtwarzaną piosenkę, kończąc tę piosenkę i odtwarzając „następną” piosenkę.
Więcej zasobów do pisania skryptów w FPP znajdziesz tutaj: https://github.com/FalconChristmas/fpp-scriptsAby uzyskać bardziej skomplikowaną logikę, po prostu wpisz w Google „bash script _”, gdzie podkreślenie jest tym, co próbujesz zrobić. Możesz przetestować swoje skrypty używając powłoki FPP (nazwa użytkownika fpp hasło falcon) Podstawowe polecenia są następujące.
Zwróć uwagę na wielkość liter!!
- Duże -P odtworzy listę odtwarzania raz, małe -p powtórzy ją.
- fpp -v 66 Ustaw głośność na 66%
- fpp -c stop Zatrzymaj pokaz natychmiast
- fpp -C stop To może być z wdziękiem stop show
- fpp -p taNazwaListyOdtwarzania Odtwarza tęNazwęListyOdtwarzania przy powtarzaniu (więc utwór wprowadzający jest odtwarzany raz, a następnie materiał Main będzie powtarzany w nieskończoność.
- fpp -P thisPlaylistName Odtwarza raz tęPlaylistName
- eventScript "${MEDIADIR}/scripts/${thisScriptVariable}" Uruchamia skrypt. W przypadku po lewej to działa, jeśli masz nazwę skryptu zapisaną w zmiennej gdzieś powyżej, na przykład thisScriptVariable=”PlayTheSong.sh”
ButtonSuperScript.sh
#!/kosz/sz |
########################################################### |
# Do uruchomienia po naciśnięciu przycisku. |
#Powinieneś mieć dwie listy odtwarzania dla każdej piosenki - jedną z |
# tylko utwór jako "Pierwszy raz" i nic w main, |
# i kolejny z piosenką jako pierwszym odtwarzaniem i w trybie gotowości |
# sekwencja jako sekwencja "Main". (Przynajmniej jeśli chcesz |
# zrobić dokładnie to, co robię) |
# |
#Na przykład, jeśli twoja piosenka to Tiger Rag, powinieneś mieć |
# playlisty „TigerRag”, „TigerRagStandby” i „Standby” |
# |
########################################################### |
# Listy odtwarzania do uruchomienia, jeśli jest między 6 a 11 |
NightSong1="Tygrysia SzmataCzuwanie" |
NightSong2="AllelujaCzuwanie" |
NightStandby="Gotowość" |
# Listy odtwarzania do uruchomienia w ciągu dnia lub po 11 |
DaySong1="Tygrysia Szmata" |
DaySong2="Alleluja" |
DayStandby="Gotowość" |
#Czasy włączania i wyłączania w czasie 24-godzinnym. Jeśli chcesz minut, powodzenia |
Godzina = 17 |
OffGodzina=23 |
########################################################### |
# Wnętrzności skryptu. # |
########################################################### |
# Uzyskaj nasz aktualny status (BEZCZYNNOŚĆ=0, GRANIE=1, Stopping Gracefully=2) |
STATUS=$(fpp -s | wytnij -d', ' -f2) |
#Pobierz listę odtwarzania do biegania i przytnij do 7 liter |
PLAYLIST=$(fpp -s | wytnij -d', ' -f4 | wytnij -c1-7) |
#To będzie „oba”, jeśli odtwarza utwór, i „sekwencja”, jeśli jest w trybie gotowości |
#używane do określenia, czy sekwencja czuwania jest uruchomiona |
STANDBYSTRING=$(fpp -s | cut -d', ' -f5) |
#Pierwsze 7 liter nazw list odtwarzania do porównania |
#Tylko 7 liter, aby „Song1Standby” i „Song1” były identyczne |
#Dobra, więc właściwie powinny to być pierwsze litery x, a x powinno być najkrótszą nazwą utworu, jaką masz |
StandbyPlaylist=$(echo $NightStandby| cut -c1-7) |
Song1Playlist=$(echo $NightSong1| cut -c1-7) |
Song2Playlist=$(echo $NightSong2| cut -c1-7) |
STARTITEM="" |
#Uzyskaj aktualną godzinę w czasie wojskowym |
Bieżąca godzina=$(data +"%H") |
#Wydrukuj status niektórych rzeczy - "echo" jest jak "drukuj" w większości języków |
#Przydatne do testowania, czy różne rzeczy zostały poprawnie przycięte lub obliczone |
echo Bieżąca godzina to $bieżąca godzina |
echo Uruchomiona lista odtwarzania to: $PLAYLIST |
echo Song2Playlist to: $Song2Playlist |
status echo to: $STATUS |
#Ustaw głośność na 80% w nocy, w przeciwnym razie 100% |
#Więc jeśli śpię, nie jest tak głośno |
#if [$BieżącaGodzina -lt $OffHour -a $BieżącaGodzina -ge 11]; następnie |
# fpp -v 100 |
#w przeciwnym razie |
# fpp -v 80 |
#fi |
# Sprawdź, czy mamy coś sensownego |
if [-z"${STATUS}"];to |
echo"Błąd z wartością stanu">&2 |
wyjście 1 |
fi |
# Działaj zgodnie z aktualnym stanem |
sprawa${STATUS}w |
# BEZCZYNNY |
0) |
#Noc - odtwórz Song1 w trybie gotowości |
if [$CurrentHour-lt$OffHour-a$CurrentHour-ge$OnHour];to |
echo Grająca piosenkę nocną1 |
fpp -c zatrzymaj |
fpp -p "${NightSong1}"${STARTITEM} |
#Czas dzienny lub bardzo późno - odtwórz utwór 1 raz, a następnie wyłącz światła |
w przeciwnym razie |
echo Playing DaySong1 |
fpp -c zatrzymaj |
fpp -P "${DaySong1}"${STARTITEM} |
fi |
;; |
# ODTWARZANIE lub ZATRZYMYWANIE Z WŁAŚCIWEM (pełne wdzięku dzieje się, gdy przycisk zostanie naciśnięty, gdy zaplanowana lista odtwarzania się kończy) |
1 | 2) |
#Tryb czuwania jest uruchomiony – działa, ponieważ tryb czuwania to moja jedyna sekwencja niemedialna |
if ["$STANDBYSTRING"=="sekwencja"];then |
#Noc - odtwórz Song1 w trybie gotowości |
if [$CurrentHour-lt$OffHour-a$CurrentHour-ge$OnHour];to |
echo Odtwarzanie NightSong1 na noc |
fpp -c zatrzymaj |
fpp -p "${NightSong1}" |
#Pora dnia lub bardzo późno - raz zagraj w tygrysią szmatę, a następnie wyłącz światła |
w przeciwnym razie |
echo PlayingDaySong1 od odtwarzania |
fpp -c zatrzymaj |
fpp -P "${Dzień1}" |
fi |
#Aby obsługiwać więcej utworów, skopiuj tę sekcję i zmień "Song2Playlist" w ostatniej sekcji na Song#Playlist |
#Utwór 1 jest uruchomiony |
elif ["$PLAYLIST"=="$Song1Playlist"];wtedy |
#Noc - graj w Alleluja w trybie gotowości |
if [$CurrentHour-lt$OffHour-a$CurrentHour-ge$OnHour];to |
echo Granie w HallelujahStandby z Tiger Rag jest uruchomione |
fpp -c zatrzymaj |
fpp -p "${NightSong2}" |
#Czas dzienny lub bardzo późno – odtwórz utwór Song2 raz, a następnie wyłącz światła |
w przeciwnym razie |
echo Granie w Alleluja raz z Tiger Rag jest uruchomione |
fpp -c zatrzymaj |
fpp -P "${DaySong2}" |
fi |
#OSTATNIA PIOSENKA JEST URUCHAMIANA – ZAGRAJ W GOTOWOŚĆ |
elif ["$PLAYLIST"=="$Song2Playlist"];wtedy |
#Noc - odtwarzanie w trybie gotowości w pętli |
if [$CurrentHour-lt$OffHour-a$CurrentHour-ge$OnHour];then |
echo Odtwarzanie w trybie gotowości przy powtarzaniu |
fpp -c zatrzymaj |
fpp -p "${Tryb nocny}" |
#Czas dzienny lub bardzo późno - raz w trybie czuwania |
w przeciwnym razie |
echo Jednorazowe odtwarzanie w trybie gotowości |
fpp -c zatrzymaj |
fpp -P "${Gotowość na dzień}" |
fi |
w przeciwnym razie |
echo Z jakiegoś powodu wykonane zostało ostatnie elsecase. |
fpp -c zatrzymaj |
fpp -P "${Dzień1}" |
fi |
;; |
esac |
wyświetl rawButtonSuperScript.sh hostowany z ❤ przez GitHub
Krok 5: (Opcjonalnie) Płyta czołowa przycisku
Mam dostęp do wycinarki laserowej w Clemson przez Makerspace, więc szybko naszkicowałem projekt do wycięcia + wytrawiania. W środku jest otwór na mój guzik, słowa „Push Me” pisane świąteczną czcionką i płatek śniegu wokół guzika. Drewno pomalowałem natryskowo na biało, a następnie pokryłem taśmą maskującą (aby wycinarka laserowa nie przypaliła części, których nie chcę wytrawić). Plik, którego użyłem, jest załączony.