Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Ko izvajate božično svetlobno oddajo, sinhronizirano z glasbo, jo boste morda želeli začeti s pritiskom na gumb. Ta vadnica je uporabna samo za predstavo, ki jo nadzira Falcon Pi Player (FPP), ki deluje na Raspberry Pi. Če uporabljate FPP, potem verjetno uporabljate krmilnike Falcon in uporabljate xLights ali LightORama za zaporedje oddaje. Če vam nobena od teh besed ne pomeni nič, vam bo ta vadba za zdaj verjetno malo nad glavo in začnite tako, da preberete ta wiki https://auschristmaslighting.com/wiki/ in se pridružite skupini Facebook, kot je spodaj
- xLights:
- Splošne napredne božične luči:
- Predvajalnik Falcon Pi:
- Skupna raba idej za ohišje/rekvizite:
- "Ni posebej povezano z xLights ali LOR":
- Prodajalci xLights Holiday Light:
- Božič naredi sam:
1. korak: Seznam delov
Potrebovali boste naslednje predmete:
- Gumb. Uporabil sem tega z LED obročko okoli njega: [Amazon]
- Upor. Prednostno 200Ω ali več (2 od teh, če uporabljate gumb LED) Standard 1/4W ali 1/8W je v redu
- Priključna žica. Merilnik, ki ga morate uporabiti, je odvisen od tega, kako daleč bo gumb od vašega Pi. Uporabil sem žico 18awg približno 10 čevljev od mojega Pi in delovala je brezhibno
- Način za povezavo žice s Pi -jevimi zatiči GPIO. S prelomno ploščo lahko uporabite tračni kabel ali pa uporabite nekaj ženskih priključkov, kot sem jaz. Potrebujemo le 3 žice - ozemljitev, 5V in podatke za gumb. [Amazon]
- (Izbirno) Vodotesni priključek na vsakem koncu za enostavno vzdrževanje. Uporabljam 3-pinske priključke za pomorsko kakovost: [Amazon]
- (Izbirno) Konektorji za toplotno skrčljive zadnjice [Amazon]
2. korak: Shema ožičenja
Slike prikazujejo shemo ožičenja za gumb brez priložene LED in gumb z LED. Način nastavitve sheme ožičenja vam omogoča, da zaženete gumb in lučko (neprekinjeno prižgano) s samo tremi žicami.
Za pin GPIO izberite katerega koli od zatičev GPIO na pi. Uporabite tudi zatiča +5V in Gnd. Verjetno bi se lahko izognili uporabi 3.3V vtiča, toda padec napetosti na več metrih žice lahko povzroči, da je signal nezanesljiv ali pa ne bo dovolj, da prižge LED.
OPOMBA: 3-polni konektor ne bo šel skozi luknjo, ki jo morate izvrtati za gumb z LED obročko. Konektor torej pritrdite, potem ko gumb vstavite v sprednjo ploščo.
3. korak: Osnovne nastavitve predvajalnika Falcon Pi Player
OPOMBA - FPP se nenehno posodablja in povsem mogoče je, da bodo izboljšali podporo za skripte ali da bodo kot privzeto funkcijo, ki zahteva manj programiranja, vključili "gumb za zagon".
Sledil sem zgornjemu videoposnetku, ker sem sprva vse nastavil.
Videoposnetki se mi zdijo dolgočasni in počasni, zato je povzetek tega:
- Uvozite svoje zaporedje v fpp z upraviteljem datotek
- Ustvarite seznam predvajanja z zaporedjem. Za naslednje korake se bo seznam predvajanja imenoval "playme"
-
Odprite prazno datoteko beležnice in vnesite naslednje:
- #!/bin/sh
- fpp -P playme
- Shranite ga kot datoteko.sh v računalniku
- Pojdite v upravitelj datotek v FPP in naložite datoteko skripta. Pojdite na zavihek "Skripti" in se prepričajte, da je tam
- V razdelku Stanje/nadzor pojdite na Dogodki
- Ustvarite nov dogodek. ID dogodka 1/1, ime dogodka ne glede na to, zaporedje učinkov NIČ, skript dogodka
- Pojdite pod Nastavitve vhoda/izhoda in kliknite Sprožilci GPIO
- Preklopite pin, na katerega je pritrjen vaš gumb. Če se bo ob pritisku na gumb znižalo, potem dogodek postavite na možnost Padajoče, če je aktivno visoko, postavite dogodek na Vzpon.
- Kliknite gumb Ponovni zagon ob opozorilu, ki se prikaže, ko izvedete vse spremembe
Ko vse to naredite, bi morali pritisniti gumb, da se predstava začne. Woohoo!
Vendar ima ta metoda nekaj omejitev. Če med predvajanjem seznama predvajanja znova pritisnete gumb, bodisi 1) ne bo storil ničesar ali 2) bo zrušil FPP in noče storiti ničesar s svojim gumbom, dokler ga ne znova zaženete. Torej, če gumb uporabljate le kot dramatičen način predvajanja predstave po ukazu, bo zgornja metoda vse, kar potrebujete.
Če potrebujete nekaj več, pojdite na naslednji korak
4. korak: Bolj trden scenarij
Spodaj je scenarij, do katerega sem na koncu prišel. Skript si lahko ogledate v Githubu tukaj: [Gist. Github]
- Če nekdo pritisne gumb v "nočnih" urah, se bo predvajal Tiger Rag (moja pesem1), nato pa preklopil v stanje pripravljenosti, ki se neskončno ponavlja.
- Če pritisnete gumb, medtem ko igra Tiger Rag, se začne moja druga pesem, Hallelujah, nato pa se bo za nedoločen čas pomaknil v stanje pripravljenosti.
- Če pa nekdo pritisne gumb podnevi ali zelo pozno ponoči, bo enkrat zaigral Tiger Rag in nato ugasnil vse luči.
To omogoča, da gumb deluje kadar koli v dnevu, vendar lučk ni treba stalno prižgati. Omogoča tudi predvajanje več skladb z enim gumbom, tako da ugotovi, katera skladba se trenutno predvaja, konča to pesem in predvaja "naslednjo" pesem.
Več virov za skriptiranje v FPP-ju najdete tukaj: https://github.com/FalconChristmas/fpp-scripts Za bolj zapleteno logiko poiščite google “bash script _”, kjer je podčrtavanje tisto, kar poskušate narediti. Skripte lahko preizkusite z lupino FPP (uporabniško ime fpp geslo falcon) Osnovni ukazi so naslednji.
Bodite pozorni na uporabo velikih črk !!
- Veliko -P bo enkrat predvajalo seznam predvajanja, majhne črke -p bodo ponavljale.
- fpp -v 66 Nastavite glasnost na 66%
- fpp -c stop Takoj ustavite oddajo
- fpp -C stop To je lahko stop show graciozno
- fpp -p thisPlaylistName Predvaja thisPlaylistName ob ponavljanju (tako se uvodna pesem predvaja enkrat, nato pa se bodo glavne stvari ponavljale v nedogled.
- fpp -P thisPlaylistName Predvaja to imePlaylistName enkrat
- eventScript "$ {MEDIADIR}/scripts/$ {thisScriptVariable}" Zažene skript. V primeru na levi strani deluje, če imate ime skripta shranjeno v spremenljivki nekje zgoraj, na primer thisScriptVariable =”PlayTheSong.sh”
ButtonSuperScript.sh
#!/bin/sh |
########################################################### |
#Zaženite, če pritisnete gumb. |
#Za vsako skladbo bi morali imeti dva seznama predvajanja - enega z |
# samo pesem kot "prva predstava" in nič glavnega, |
# in še ena s pesmijo kot prvo predvajanje in v pripravljenosti |
# zaporedje kot "Glavno" zaporedje. (Vsaj če želite |
# narediti točno to, kar počnem) |
# |
#Na primer, če je vaša pesem Tiger Rag, bi morali |
# seznama predvajanja "TigerRag", "TigerRagStandby" in "Standby" |
# |
########################################################### |
# Seznami predvajanja, ki se izvajajo, če je med 6 in 11 |
NightSong1 = "TigerRagStandby" |
NightSong2 = "HallelujahStandby" |
NightStandby = "V pripravljenosti" |
# Seznami predvajanja, ki se izvajajo čez dan ali po 11 |
DaySong1 = "TigerRag" |
DaySong2 = "Aleluja" |
DayStandby = "V pripravljenosti" |
#Časi vklopa in izklopa v 24 urah. Če želite minute, veliko sreče |
Na uro = 17 |
OffHour = 23 |
########################################################### |
# Čreva scenarija. # |
########################################################### |
# Pridobite naše trenutno stanje (IDLE = 0, PLAYING = 1, Gracefully Stop = 2) |
STATUS = $ (fpp -s | cut -d ',' -f2) |
#Pridobite tekoči seznam predvajanja in ga obrežite na 7 črk |
PLAYLIST = $ (fpp -s | cut -d ',' -f4 | cut -c1-7) |
#To bo "oboje", če predvaja pesem, in "zaporedje", če je v stanju pripravljenosti |
#Uporablja se za ugotavljanje, ali se izvaja zaporedje pripravljenosti |
STANDBYSTRING = $ (fpp -s | cut -d ',' -f5) |
#Prvih 7 črk imen seznamov predvajanja za primerjavo |
#Samo 7 črk, tako da sta "Song1Standby" in "Song1" enaka |
#V redu, torej bi morale biti prve črke x in x najkrajše ime pesmi, ki ga imate |
StandbyPlaylist = $ (echo $ NightStandby | cut -c1-7) |
Song1Playlist = $ (echo $ NightSong1 | cut -c1-7) |
Song2Playlist = $ (echo $ NightSong2 | cut -c1-7) |
STARTITEM = "" |
#Pridobite trenutno uro v vojaškem času |
Trenutna ura = $ (datum +"%H") |
#Natisnite stanje nekaterih stvari - "echo" je kot "print" v večini jezikov |
#Uporabno za preskušanje, če so različne stvari obrezane ali pravilno izračunane |
echo CurrentHour je $ CurrentHour |
echo Tekoči seznam predvajanja je: $ PLAYLIST |
echo Song2Playlist je: $ Song2Playlist |
echo Status je: $ STATUS |
#Ponoči nastavite glasnost na 80%, sicer 100% |
#Torej, če spim, ni tako glasno |
#if [$ CurrentHour -lt $ OffHour -a $ CurrentHour -ge 11]; potem |
# fpp -v 100 |
#sicer |
# fpp -v 80 |
#fi |
# Preverite, ali imamo kaj smiselnega |
če [-z "$ {STATUS}"]; potem |
echo "Napaka z vrednostjo stanja"> & 2 |
izhod 1 |
fi |
# Ukrepajte glede na trenutno stanje |
etui $ {STATUS} v |
# NEDEJAVEN |
0) |
#Night time - predvajanje skladbe1 v stanju pripravljenosti |
če [$ CurrentHour-lt $ OffHour-a $ CurrentHour-ge $ OnHour]; potem |
echo Predvajanje NightSong1 |
fpp -c stop |
fpp -p "$ {NightSong1}" $ {STARTITEM} |
#Dnevni čas ali res pozno - enkrat predvajajte pesem 1, nato ugasnite luči |
drugače |
echo Predvajanje DaySong1 |
fpp -c stop |
fpp -P "$ {DaySong1}" $ {STARTITEM} |
fi |
;; |
# PREDVAJANJE ali ZAUSTAVITEV POMEMBNO (graciozno se zgodi, če pritisnete gumb, ko se konča razpored predvajanja) |
1 | 2) |
#Standby teče - to deluje, ker je stanje pripravljenosti moje edino zaporedje, ki ni medijsko |
če ["$ STANDBYSTRING" == "zaporedje"]; potem |
#Night time - predvajanje skladbe1 v stanju pripravljenosti |
če [$ CurrentHour-lt $ OffHour-a $ CurrentHour-ge $ OnHour]; potem |
echo Predvajanje NightSong1 ponoči |
fpp -c stop |
fpp -p "$ {NightSong1}" |
#Dnevni čas ali res pozno - enkrat se igrajte s tigrasto krpo, nato ugasnite luči |
drugače |
echo PlayingDaySong1 od predvajanja |
fpp -c stop |
fpp -P "$ {DaySong1}" |
fi |
#Če želite podpreti več pesmi, kopirajte ta razdelek in spremenite "Song2Playlist" v zadnjem razdelku v Song#Playlist |
#Song1 se izvaja |
elif ["$ PLAYLIST" == "$ Song1Playlist"]; nato |
#Night time - igrajte Hallelujah v pripravljenosti |
če [$ CurrentHour-lt $ OffHour-a $ CurrentHour-ge $ OnHour]; potem |
echo Igranje AlelujaStandby iz Tiger Rag teče |
fpp -c stop |
fpp -p "$ {NightSong2}" |
#Dnevni čas ali res pozno - enkrat predvajajte Song2 in nato ugasnite luči |
drugače |
echo Igranje Aleluje enkrat iz Tiger Rag teče |
fpp -c stop |
fpp -P "$ {DaySong2}" |
fi |
#LAST SONG TEČE - IGRAJTE V STANJU |
elif ["$ PLAYLIST" == "$ Song2Playlist"]; nato |
#Night time - predvajajte stanje pripravljenosti v zanki |
če [$ CurrentHour-lt $ OffHour-a $ CurrentHour-ge $ OnHour]; potem |
echo Predvajanje v pripravljenosti ob ponavljanju |
fpp -c stop |
fpp -p "$ {NightStandby}" |
#Dan ali res pozno - enkrat v pripravljenosti |
drugače |
echo Enkratna predvajanje v stanju pripravljenosti |
fpp -c stop |
fpp -P "$ {DayStandby}" |
fi |
drugače |
echo Iz nekega razloga je bila izvedena zadnja druga črka. |
fpp -c stop |
fpp -P "$ {DaySong1}" |
fi |
;; |
esac |
oglejte si rawButtonSuperScript.sh, ki ga gosti ❤ GitHub
5. korak: (izbirno) sprednja plošča za gumb
Imam dostop do laserskega rezalnika v Clemsonu skozi Makerspace, zato sem hitro skiciral načrt za rezanje+jedkanje. V sredini je luknja za moj gumb, besede v božični pisavi pravijo "Potisni me", okoli gumba pa snežinka. Nekaj lesa sem razpršila v belo barvo in ga nato prekrila z maskirnim trakom (da laserski rezalnik ne bi opekel delov, ki jih ne želim jedkati). Datoteka, ki sem jo uporabil, je priložena.