概要
- BABYMETALのライブの演出に会場一斉制御で光るLEDリストバンドみたいなのがあった
- スイッチとかが無いから持ち帰っても光らないけどやっぱり光らせたいよね
- 多くの方の情報もあって頑張ったら光らせることができた!
- せっかくなので自分がやった方法とその作り方を共有する
- 赤外線信号のフォーマットとかちゃんと判明していない部分も多いから有識者気になることあったら教えてほしい!
はじめに
BABYMETAL LEGEND-MM は、2024年3月2,3日に、メンバーのMOMOMETALの聖誕祭として横浜アリーナにて行われたライブです。
BABYMETALは、なんと2023年にはワールドツアーで全世界25か国、国内外で通算94公演を実施というなかなかにすごいことをしたのですが、その終盤にあったこちらのライブにて、「神器」と呼ばれる、リストバンド型のLEDライトが入場者全員に配られました。一部の曲では、会場の照明に合わせてこの神器も一斉に光り、とても綺麗な演出がされていました。
そんな神器ですが、裏側に電池を入れ替えるフタはあるものの、スイッチなどは一切無く、ライブ終了後に持ち帰っても光らせることができない、思い出の品となる運命......と思われたのですが
過去のライブでも神器が配られたことがあり、その際にも一部メーカーのリモコンの信号に反応して光ったという報告がありました。今回も例にもれず、Twitter(X)ではそのような報告が数件。
頑張れば自由に光らせられるのではないかと考えるような人が私以外にもたくさんおり、情報もいただきながら結構ちゃんと光るようになったので、こちらでその操作をできるものの作成方法などを書いてみようかな、ということで書いています。
赤外線信号とか、マイコンとか、一斉制御とか、詳しい方でなにか話せることとかある方がいらっしゃったら、是非情報共有していただけるととても嬉しいです。
完成品
作り方
専門的な知識とか無くてもできるように頑張って書いてみますが、分からないところとかあったらお気軽に連絡いただけたら回答しますので是非。
連絡はこちら → Twitter(X) @ta_moon_ まで。
※質問とか、うまくいかないから助けてとか、基本的にだいたい受け付けますが、最終的にちゃんとできなくてもそこの保証はできませんので、費用などの部分も含め自己責任でお願いします。もちろん、いくらでもお助けはします!
用意するもの
「技術的なところはどうでもいいからはやく光らせ方を教えろ!」という方も多いかもしれないのではやく作り方にいきたいところですが、割と準備するものが多く、買い揃えるのにも多少お金がかかります。
● Raspberry Pi Zero WH (3000円~4000円程度)
Raspberry Piという小さいコンピュータの種類の一つ、Zeroのうち、無線の機能が付いたWに、更にヘッダーピンがはんだ付けされたものH、となります。
Amazonとかだと Zero WH は高かったりしますが、Zero W はんだ付け済み と書いてあるものなども同じ状態なので、どちらでもOKです。
ヘッダーピンのはんだ付けがないものだと、別で購入して自分ではんだ付けする必要があります。自分でやる、って方はそれでもOK。
Zero 2Wという後継機種もありますが、こちらはヘッダーピンがついているものは売っていないはずなので、自分でやれる方はこれでもOK。
もしくは Raspberry Pi 4B などの上位機種でもできるとは思いますが、だいぶオーバースペックなのと、サイズが大きくなってしまうので、Zero系をおすすめします。
正規代理店
Amazon Raspberry Pi zero W はんだ付け済み
(リンク先情報:2024.03時点)
● Raspberry Pi関連
本体だけを購入すると、電源とかがついていないことがほとんどなので、そのあたりも準備が必要です。
おすすめは、以下リンクのようなスターターキットを購入することです。基盤を守るためのケースとか、変換アダプタとか、ヒートシンク(CPUを冷却しやすくするもの)などがセットになっています。
Raspberry Pi Zero WはMicroUSBで給電するので、適当なACアダプタとMicroUSBケーブルも必要です。(色々な危機で使われているのでたくさん持ってる人も多いはず)
● Bit Trade One ADRSZIRS ゼロワン 赤外線送信拡張基板 (3500円~4000円程度)
Raspberry Piと接続して、赤外線信号を送信するための拡張基盤です。
公式ページ
Amazon
(リンク先情報:2024.03時点)
● MicroSDカード (500円~1000円程度)
Raspberry Piを動作させるために必要です。容量は32GBくらいあれば大丈夫ですが、ほとんど値段も変わらないので64GBとかにしてもいいです。(私は650円で64GB買いました)
● PC
Raspberry Piを動作させるためにシステムの情報を書き込むために、WindowsやMACなどのPCを使用します。
また設定をする際にも、PCがあるとリモートで楽に操作することができます。
● SDカードリーダー (500円~2000円程度)
PCにSDカードを接続し、OSなどを書き込むために使用します。PCにSDカードリーダーがある機種の場合は不要です。
● Wifi、インターネット環境
色々ダウンロードしたり、リモート接続したりで使用します。
● (任意) モバイルバッテリー
完成したものは、単体で持ち運び、スマホから操作が可能なようになります。電源として、一般的なモバイルバッテリーが使用可能なので、持っておくと外出先でも使えるようになります。
● LR44 ボタン電池(神器用)
神器の電池は1日程度光らせると、割とすぐに切れてしまうため、交換用に準備しておくといいです。
ライブの際の電池はとっくに切れているはずです。
Raspberry Piの初期設定
1.Raspberry Pi Imagerを自分のPCにインストールする
Raspberry Pi Imagerは、SDカードにOSを書き込むための公式ソフトです。
公式ホームページ から、自分のPCに合ったものをダウンロードしてください。
Windowsでは .exe ファイルがダウンロードされます。ダウンロードしたらダブルクリックし、[Install]をクリックでインストールし、[Finish]で完了です。
Macでは .dmg ファイルがダウンロードされます。ダウンロードしたらダブルクリックし、アプリのアイコンをapplicationsフォルダへドラッグ&ドロップしたら完了です。
2.SDカードにRaspberry Pi OSを書き込む
PCにインストールしたRaspberry Pi Imagerを使用して、SDカードにOSを書き込みます。
まずPCにSDカードリーダーを接続し、SDカードを挿します。直接させるPCの場合は直接挿してください。
先ほどインストールしたRaspberry Pi Imagerを起動します。
[デバイス]で使用するデバイスを選択します。
[OS]では、インストールするOSを選ぶのですが、Raspberry Pi Zero W / Zero 2W では[Raspberry Pi OS (Legacy, 32-bit)]が推奨なので、こちらを選択します。(画面では一度使用しているため、キャッシュされている表記になっています)
「ストレージ」ではPCに挿したSDカードを選択します。
このとき、書き込むストレージのデータはすべて削除されるので、注意して選択してください。
OSをカスタマイズについて聞かれるので、[設定を編集する]をクリックします。
(Imagerのバージョンによって表記が異なる場合があります。)
[一般]タブでは、以下のように設定をします。
※ご自分用で変更しても大丈夫ですが、この後の説明では置き換えて読んでください。
- ホスト名:pizero.local
- ユーザー名:momo
- パスワード:0303
- Wi-Fi設定:<ご自分のWi-Fi設定を入力してください>
- ロケール設定:Asia/Tokyo
- キーボードレイアウト:us(直接つないで使用しないのでなんでもOK)
[サービス]タブでは、[SSHを有効化する]をON、[パスワード認証を使う]を選択してください。
[オプション]タブはなんでも大丈夫です。
データが消えることを確認する警告が出るので、確認したら[はい]をクリックします。
3.Raspberry Piを起動する
OSを書き込んだSDカードをRaspberry Piに挿入し、電源を入れます。
起動したら、自分のPCからSSHを利用して遠隔でアクセスをし、最初の設定の一部を入れます。これによって、GUIで遠隔操作可能なようにします。
Windowsではコマンドプロンプト、Macではターミナルを開き、以下のコマンドを実行します。
ssh <ユーザー名>@<ホスト名>
ssh momo@pizero.local
最初にアクセスする場合には、以下のようなメッセージが出てくるので、yes
と入力しEnterします。
C:\Users\tatsu>ssh momo@pizero.local
The authenticity of host 'pizero.local (2400:2411:20a3:3700:3ec4:f03f:c50a:50c4)' can't be established.
ED25519 key fingerprint is SHA256:9H42me2cc8anPFmdRtWaTa+llGpUkHyQE4KuQYCvwok.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
パスワード(0303
)を入力します、
このような表示になったら接続完了です。
momo@pizero.local's password:
Linux pizero 6.1.21+ #1642 Mon Apr 3 17:19:14 BST 2023 armv6l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Apr 5 01:15:35 2024 from 2400:2411:20a3:3700:bc89:206d:e0dc:fcd0
momo@pizero:~ $
Raspberry Pi Imagerにおいて、ネットワーク設定の部分が不安定な場合があります。
起動して10分以上経過してもSSH接続ができない場合は、電源を切ってSDカードを抜き、再度インストールを試してみてください。その際、設定内容を一度消して入力しなおしてみてください。
4.VNCを有効にする
VNCとは、ネットワーク上の別のコンピュータをGUIで遠隔操作するためのものです。この機能は自分で有効にする必要があります。
以下コマンドを実行します。
sudo raspi-config
画面が変わり、キーボードの上下左右とEnterで操作できるようになります。
[Interface Options] > [VNC] と選択すると、VNCサーバーを有効化するか聞かれるので、[Yes]を選択します。
5.VNC Viewerでリモート接続する
realvnc.com から自分のPCのOSに合わせてVNC Viewerをダウンロードします。
インストールできたら起動し、Raspberry Piへ接続します。
[File] > [New Connection...] から、以下の情報を入力します。
- アドレス:pizero.local
- ユーザ名:momo
- パスワード:0303
以下、ターミナルで実行している部分は、基本的にはVNC画面から[ >_ ]をクリックしたときのターミナルでも、SSH接続でもどちらでもできますが、一部でVNCの画面内で操作する必要があります。その場合は明記していますので、確認して実行してください。
6.GPIOピンを有効にする
GPIOピンを有効にします。
sudo raspi-config
[Interface Options]を選択します。
環境を構築していく
実際に動作させるための環境を構築していきます。
ソースコードをクローンする
GitHubから、今回使用するソースコードをクローン(ダウンロード)します。
ホームディレクトリ(/home/momo/
)に移動します。
cd ~
以下コマンドを実行し、クローンします。
git clone https://github.com/tatsuki1119/legend-mm-ir.git piz
ls
コマンドを実行し、piz
ディレクトリが作成されていればOKです。
ls
Bookshelf Desktop Documents Downloads Music Pictures piz Public Templates Videos
実行権限が必要なファイルに、権限を付与します。
chmod 755 piz/autostart.sh
chmod 755 piz/flask/send_ir.py
Pythonの環境構築
Pythonで実行するので、その際に必要なライブラリをインストールします。
VNCで接続し、画面上部の[ >_ ]アイコンからターミナルを起動します。
pip install flask flask_session werkzeug
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: flask in /usr/lib/python3/dist-packages (1.1.2)
・・・・・・
Successfully installed Jinja2-3.1.4 MarkupSafe-2.1.5 blinker-1.8.2 cachelib-0.13.0 click-8.1.7 flask-3.0.3 flask-session-0.8.0 importlib-metadata-7.1.0 itsdangerous-2.2.0 msgspec-0.18.6 werkzeug-3.0.3 zipp-3.19.2
以下を実行し、新しいウィンドウが開いて以下の表示が出ていたらOKです。
以下コマンドは、VNC接続した画面から[ >_ ]アイコンをクリックし、そのターミナルで実行してください。
piz/autostart.sh
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:3000
* Running on http://192.168.x.xx:3000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: xxx-xxx-xxx
新しく出てきたウィンドウは、一旦閉じておきます。
赤外線部分の設定をする
赤外線送信機能部分を、システムに登録します。
ターミナルで以下を実行し、新規ファイルを作成します。
sudo nano /etc/systemd/system/ir_signal.service
以下を書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
[Unit]
Description=Send IR Signals
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/python /home/momo/piz/flask/send_ir.py
Restart=always
RestartSec=1
User=momo
[Install]
WantedBy=multi-user.target
コマンドを実行し、作成したサービスが認識されていることを確認します。
systemctl list-unit-files --type=service | grep ir
ir_signal.service disabled enabled
・・・・・・
サービスを有効にします。
sudo systemctl enable ir_signal.service
ステータスを確認します。
sudo systemctl status ir_signal.service
momo@pizero:~ $ sudo systemctl status ir_signal.service
● ir_signal.service - Send IR Signals
Loaded: loaded (/etc/systemd/system/ir_signal.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-06-12 12:54:39 JST; 6min ago
Main PID: 1568 (python)
Tasks: 1 (limit: 414)
CPU: 8.239s
CGroup: /system.slice/ir_signal.service
└─1568 /usr/bin/python /home/momo/piz/flask/send_ir.py
active
の表示になっていたらOKです。
Webから操作してみる
ここまでできたら、Webからリモコン操作をしてみます。
まず、赤外線モジュールをRaspberry Pi ZeroのGPIOピンに挿しこみます。
モジュール側のLEDが点灯したらOKです。
(画像では、LEDにテープを貼っているため、光が弱くなっています。)
Webアプリを起動します。
piz/autostart.sh
先ほど実行したときのように、新しいウィンドウが立ち上がり、そのまま実行できていればOKです。
PCなどのブラウザから、pizero.local:3000 にアクセスします。
画像のようなリモコン画面になり、操作ができるはずです。
例えば、ON/OFF を押すと、モジュールのLEDの点滅も合わせてON/OFFされるはずです。
この時点で、神器に電池が入っていれば光るはずです。
自動起動の設定をする
Raspberry Piの電源を入れた際に、ここまでを自動で起動するように設定をします。
以下コマンドを実行し、新規ファイルを作成します。
cd .config
mkdir autostart
cd autostart
sudo nano piz-auto.desktop
以下を書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
[Desktop Entry]
Exec=lxterminal -e "sleep 10 ; /home/momo/piz/autostart.sh"
Type=Application
Name=Autostart
Terminal=true
Raspberry Piを再起動し、自動でウィンドウが立ち上がるかを確認します。
sudo reboot
外出先でも使用できるようにWi-Fiを出すようにする
この設定に関しては、内容上は可能なのですが、機器のスペックにより動作がギリギリとなっています。
動作確認はできていますが、設定をしない方が安定して動作するかもしれません。
ここまででリモコンとしての機能は完成していますが、ネットワーク接続が必要なので自宅内での使用のみとなっています。
そこで、Raspberry PiからWi-Fiを出すようにすることで、外でも使用できるようにします。
仮想Wi-Fiインタフェースを作成するため、以下コマンドでwlan0
のMACアドレスを確認します。
iw dev
phy#0
Unnamed/non-netdev interface
wdev 0x2
addr ba:27:xx:xx:xx:xx
type P2P-device
txpower 31.00 dBm
Interface wlan0
ifindex 2
wdev 0x1
addr b8:27:xx:xx:xx:xx
ssid D80F99DB9298-2G
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBm
上記で b8:27:xx:xx:xx:xx
にあたる部分をメモしておきます。
ファイルを新規作成します。
sudo nano /etc/udev/rules.d/99-ap0.rules
以下を書き込みます。
2カ所のMACアドレス部分は、メモした自身のものに置き換えてください。
書き込んだら、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:xx:xx:xx:xx", KERNEL=="phy0", \
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
RUN+="/bin/ip link set ap0 address b8:27:xx:xx:xx:xx"
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:eb:10:c4:2f", KERNEL=="phy0",
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap",
RUN+="/bin/ip link set ap0 address b8:27:eb:10:c4:2f"
再起動し、設定が反映されているか確認します。
sudo reboot
再起動後、以下コマンドを実行し、ap0
が追加されていることを確認します。
iw dev
phy#0
Unnamed/non-netdev interface
wdev 0x3
addr ba:27:xx:xx:xx:xx
type P2P-device
txpower 31.00 dBm
Interface ap0
ifindex 3
wdev 0x2
addr b8:27:xx:xx:xx:xx
type AP
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBm
Interface wlan0
ifindex 2
wdev 0x1
addr b8:27:xx:xx:xx:xx
ssid D80F99DB9298-2G
type managed
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 31.00 dBm
必要なパッケージをインストールします。
sudo apt install hostapd dnsmasq
DHCPサーバの設定ファイルを編集します。
sudo nano /etc/dnsmasq.conf
以下を末尾に書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
interface=ap0
dhcp-range=192.168.81.50,192.168.81.150,255.255.255.0,12h
Raspberry PiのIPアドレスを固定するための設定ファイルを編集します。
sudo nano /etc/dhcpcd.conf
以下を末尾に書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
interface ap0
static ip_address=192.168.81.1/24
nohook wpa_supplicant
hostapdの設定ファイルを編集します。
sudo nano /etc/hostapd/hostapd.conf
以下を書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。
Wi-Fiの情報は
- SSID:pizero
- Password:legend-mm
で設定しています。
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=ap0
driver=nl80211
ssid=pizero
hw_mode=g
country_code=JP
channel=11
ieee80211d=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=legend-mm
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
これを有効にするため、以下のコマンドを実行します。
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
以上が完了したら、スマホなどでWi-Fi設定を開き、pizero
というネットワークが表示されていることを確認します。
パスワード legend-mm
を入力し、接続します。
接続できたら、Raspberry PiのIPアドレスは192.168.81.1
となっているので、ブラウザで http://192.168.81.1:3000 へアクセスすることで、リモコンの画面を見ることができるはずです。
最近のスマートフォンでは、トラッキング制限やWi-Fiアドレスを隠す設定が入っている場合がありますが、この設定が有効だと動作が不安定な場合があるので、機器のWi-Fi設定で無効にしておくことをおすすめします。
リモコンを更新する
また、Githubに載せているコードは、更新をする場合があります。
更新をした場合には、Twitter(X) @ta_moon_ にてそのことをお伝えしたりします。
更新されたものを反映するためには、以下を実行してください。
まず、SSHもしくはVNC接続からターミナルを開きます。
以下コマンドを実行します。
cd piz
git pull origin main
更新内容があれば反映されるので、そのまま機器を再起動すると正しく適用されます。
おわりに
以上で、神器を光らせるためのリモコンを自作し、スマートフォンなどから操作することができるようになったはずです。
設定の仕方やその内容に関して、細かく丁寧に書いたつもりですが、わかりにくいところ、難しいところ、うまくいかないところなどありましたら、Twitter(X) @ta_moon_ までご連絡ください。できる限り対応はするつもりです。
作ってみた報告や、これをもとにカスタムなどされたら、是非ご連絡いただけると嬉しいです。
技術的な話
こちらを作成するにあたって、神器が反応する信号を調査する必要があり、その調査情報を共有いただいたりした方々の投稿も載せておきます。
https://x.com/deno0725/status/1765351062930927942
https://x.com/KC_ENTER/status/1766773146194268254
https://x.com/KC_ENTER/status/1769684843611464162
https://x.com/nanakita_da/status/1768257623172980854