BABYMETAL LEGEND-MM 神器を光らせたい ~ ライブ会場でのLED一斉制御のはなし ~ (ラズパイの初期設定から詳しく解説)

# 概要

- BABYMETALのライブの演出に会場一斉制御で光るLEDリストバンドみたいなのがあった
- スイッチとかが無いから持ち帰っても光らないけどやっぱり光らせたいよね
- 多くの方の情報もあって頑張ったら光らせることができた！
- せっかくなので自分がやった方法とその作り方を共有する
- 赤外線信号のフォーマットとかちゃんと判明していない部分も多いから有識者気になることあったら教えてほしい！





# はじめに

BABYMETAL LEGEND-MM は、2024年3月2,3日に、メンバーのMOMOMETALの聖誕祭として横浜アリーナにて行われたライブです。
BABYMETALは、なんと2023年にはワールドツアーで全世界25か国、国内外で通算94公演を実施というなかなかにすごいことをしたのですが、その終盤にあったこちらのライブにて、「神器」と呼ばれる、リストバンド型のLEDライトが入場者全員に配られました。一部の曲では、会場の照明に合わせてこの神器も一斉に光り、とても綺麗な演出がされていました。

そんな神器ですが、裏側に電池を入れ替えるフタはあるものの、スイッチなどは一切無く、ライブ終了後に持ち帰っても光らせることができない、思い出の品となる運命......と思われたのですが
過去のライブでも神器が配られたことがあり、その際にも一部メーカーのリモコンの信号に反応して光ったという報告がありました。今回も例にもれず、Twitter(X)ではそのような報告が数件。
頑張れば自由に光らせられるのではないかと考えるような人が私以外にもたくさんおり、情報もいただきながら結構ちゃんと光るようになったので、こちらでその操作をできるものの作成方法などを書いてみようかな、ということで書いています。

赤外線信号とか、マイコンとか、一斉制御とか、詳しい方でなにか話せることとかある方がいらっしゃったら、是非情報共有していただけるととても嬉しいです。





# 完成品

https://x.com/ta_moon_/status/1775087073722319166





# 作り方

専門的な知識とか無くてもできるように頑張って書いてみますが、分からないところとかあったらお気軽に連絡いただけたら回答しますので是非。

連絡はこちら → [Twitter(X) @ta_moon_](https://twitter.com/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系をおすすめします。

[正規代理店](https://raspberry-pi.ksyic.com/main/index/pdp.id/406/pdp.open/406)
[Amazon Raspberry Pi zero W はんだ付け済み](https://amzn.asia/d/hpe57K6)
（リンク先情報：2024.03時点）

#### ● Raspberry Pi関連

本体だけを購入すると、電源とかがついていないことがほとんどなので、そのあたりも準備が必要です。
おすすめは、以下リンクのようなスターターキットを購入することです。基盤を守るためのケースとか、変換アダプタとか、ヒートシンク（CPUを冷却しやすくするもの）などがセットになっています。
Raspberry Pi Zero WはMicroUSBで給電するので、適当なACアダプタとMicroUSBケーブルも必要です。（色々な危機で使われているのでたくさん持ってる人も多いはず）

#### ● Bit Trade One ADRSZIRS ゼロワン 赤外線送信拡張基板 (3500円~4000円程度)

Raspberry Piと接続して、赤外線信号を送信するための拡張基盤です。

[公式ページ](https://bit-trade-one.co.jp/adrszirs/)
[Amazon](https://amzn.asia/d/48hIkTM)
（リンク先情報：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、インターネット環境

色々ダウンロードしたり、リモート接続したりで使用します。

#### ● (任意) モバイルバッテリー

完成したものは、単体で持ち運び、スマホから操作が可能なようになります。電源として、一般的なモバイルバッテリーが使用可能なので、持っておくと外出先でも使えるようになります。

![IMG_2744.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/a2e5c206-7aa4-bc20-d1b2-19d2dcb13cb0.jpeg)

#### ● LR44 ボタン電池（神器用）

神器の電池は1日程度光らせると、割とすぐに切れてしまうため、交換用に準備しておくといいです。
ライブの際の電池はとっくに切れているはずです。


## Raspberry Piの初期設定

### 1.Raspberry Pi Imagerを自分のPCにインストールする

Raspberry Pi Imagerは、SDカードにOSを書き込むための公式ソフトです。
[公式ホームページ](https://www.raspberrypi.com/software/) から、自分のPCに合ったものをダウンロードしてください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/f35beed7-19b2-6772-ae2e-f3ca2eae0c22.png)

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を起動します。
[デバイス]で使用するデバイスを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/d0d10476-5e54-f995-ba2b-25335f8ab386.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/db0596b9-af4e-9dd2-80ed-9077af8b6649.png)

[OS]では、インストールするOSを選ぶのですが、Raspberry Pi Zero W / Zero 2W では[Raspberry Pi OS (Legacy, 32-bit)]が推奨なので、こちらを選択します。(画面では一度使用しているため、キャッシュされている表記になっています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/978c5993-6ea2-b322-0d89-09a89f9325c0.png)


「ストレージ」ではPCに挿したSDカードを選択します。

このとき、**書き込むストレージのデータはすべて削除される**ので、注意して選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/b8aa5a15-12a4-df67-99b0-896b9db2ac99.png)

選択し終わったら[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/28e4fbba-8fa9-b6c9-df19-704e2660b7fa.png)

OSをカスタマイズについて聞かれるので、[設定を編集する]をクリックします。
(Imagerのバージョンによって表記が異なる場合があります。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/f2220e26-afa7-f6e2-127a-73ce92877f50.png)

[一般]タブでは、以下のように設定をします。
※ご自分用で変更しても大丈夫ですが、この後の説明では置き換えて読んでください。
- ホスト名：**pizero**.local
- ユーザー名：**momo**
- パスワード：**0303**
- Wi-Fi設定：<ご自分のWi-Fi設定を入力してください>
- ロケール設定：Asia/Tokyo
- キーボードレイアウト：us(直接つないで使用しないのでなんでもOK)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/b1c0153e-c463-5af6-d0d6-2535ecfd00ef.png)

[サービス]タブでは、[SSHを有効化する]をON、[パスワード認証を使う]を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/42702862-f43d-5229-de29-8001d34bcc32.png)

[オプション]タブはなんでも大丈夫です。

できたら[保存]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/d48eb367-c55e-a1fc-b736-fc1495809944.png)

設定を入れたので、[はい]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/cd1eb962-e6e3-d5f6-5011-c74febf14e0d.png)

データが消えることを確認する警告が出るので、確認したら[はい]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/f1135c03-699c-1070-4cd5-607feafbac76.png)

書き込みが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/310909f7-d5c9-f52c-3180-1569fd15347b.png)

書き込みが完了したら取り出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/00ce9f03-5c60-97d2-576a-6c8f164fc24f.png)


### 3.Raspberry Piを起動する

OSを書き込んだSDカードをRaspberry Piに挿入し、電源を入れます。
起動したら、自分のPCからSSHを利用して遠隔でアクセスをし、最初の設定の一部を入れます。これによって、GUIで遠隔操作可能なようにします。

Windowsではコマンドプロンプト、Macではターミナルを開き、以下のコマンドを実行します。

```terminal
ssh <ユーザー名>@<ホスト名>
```

```terminal:例
ssh momo@pizero.local
```

最初にアクセスする場合には、以下のようなメッセージが出てくるので、`yes`と入力しEnterします。

```terminal
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`）を入力します、

このような表示になったら接続完了です。

```terminal
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:~ $
```

:::note warn
Raspberry Pi Imagerにおいて、ネットワーク設定の部分が不安定な場合があります。
起動して10分以上経過してもSSH接続ができない場合は、電源を切ってSDカードを抜き、再度インストールを試してみてください。その際、設定内容を一度消して入力しなおしてみてください。
:::

### 4.VNCを有効にする

VNCとは、ネットワーク上の別のコンピュータをGUIで遠隔操作するためのものです。この機能は自分で有効にする必要があります。

以下コマンドを実行します。

```terminal
sudo raspi-config
```

画面が変わり、キーボードの上下左右とEnterで操作できるようになります。

[Interface Options] > [VNC] と選択すると、VNCサーバーを有効化するか聞かれるので、[Yes]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/075f833c-5c56-4d0b-1b6b-3404a51a491e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/47051435-35e5-d879-d5ff-dfef72c936af.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/aa24adb2-d03b-a9b1-381b-cfa63d752323.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/ed47554c-21e1-41a9-331c-9464fc43492a.png)

完了したらOKを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/fedacd8b-3855-6f45-d193-fc8a0c5ad3ee.png)

右キーで[Finish]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/16bc7614-cbf8-9201-15d6-bec98547ba27.png)


### 5.VNC Viewerでリモート接続する

[realvnc.com](https://www.realvnc.com/en/connect/download/viewer/) から自分のPCのOSに合わせてVNC Viewerをダウンロードします。

インストールできたら起動し、Raspberry Piへ接続します。

[File] > [New Connection...] から、以下の情報を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/9b3c6d39-83b6-6c1a-c812-013e6c1a5ac4.png)


- アドレス：pizero.local
- ユーザ名：momo
- パスワード：0303

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/2deac9ed-a95f-92ba-9f51-8314726080fa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/8114e980-a9cc-39a9-f525-0166b7e21571.png)

このように画面を見ることができたらリモート接続完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/2485c462-8d2a-3a9a-52ad-d661428f2e65.png)


:::note info
以下、ターミナルで実行している部分は、基本的にはVNC画面から[ >_ ]をクリックしたときのターミナルでも、SSH接続でもどちらでもできますが、一部でVNCの画面内で操作する必要があります。その場合は明記していますので、確認して実行してください。
:::


### 6.GPIOピンを有効にする

GPIOピンを有効にします。

```terminal
sudo raspi-config
```

[Interface Options]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/62a6e17e-ccd6-8b5e-c954-39fddd8814ce.png)

[SPI]と[I2C]を有効にし、閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/f1e4a8d5-cd15-f901-7b5e-234223545c73.png)


## 環境を構築していく

実際に動作させるための環境を構築していきます。

### ソースコードをクローンする

GitHubから、今回使用するソースコードをクローン（ダウンロード）します。

ホームディレクトリ（`/home/momo/`）に移動します。

```terminal
cd ~
```

以下コマンドを実行し、クローンします。

```terminal
git clone https://github.com/tatsuki1119/legend-mm-ir.git piz
```

`ls`コマンドを実行し、`piz`ディレクトリが作成されていればOKです。

```terminal
ls
```

```terminal:実行結果
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  piz  Public  Templates  Videos
```

実行権限が必要なファイルに、権限を付与します。

```terminal
chmod 755 piz/autostart.sh
chmod 755 piz/flask/send_ir.py
```

### Pythonの環境構築

Pythonで実行するので、その際に必要なライブラリをインストールします。

VNCで接続し、画面上部の[ >_ ]アイコンからターミナルを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/7e82ef82-1d8a-885e-cab1-e616182a064b.png)

```terminal
pip install flask flask_session werkzeug
```

```terminal:実行結果
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です。

:::note warn
以下コマンドは、VNC接続した画面から[ >_ ]アイコンをクリックし、そのターミナルで実行してください。
:::

```terminal
piz/autostart.sh
```

```terminal:実行結果
 * 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
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/947d075c-3b42-7593-0afa-14719f9037cc.png)

新しく出てきたウィンドウは、一旦閉じておきます。


### 赤外線部分の設定をする

赤外線送信機能部分を、システムに登録します。

ターミナルで以下を実行し、新規ファイルを作成します。

```terminal
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
```

コマンドを実行し、作成したサービスが認識されていることを確認します。

```terminal
systemctl list-unit-files --type=service | grep ir
```

```terminal:実行結果
ir_signal.service                          disabled        enabled
・・・・・・
```



サービスを有効にします。

```terminal
sudo systemctl enable ir_signal.service
```

ステータスを確認します。

```terminal
sudo systemctl status ir_signal.service
```

```terminal:実行結果
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にテープを貼っているため、光が弱くなっています。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/f0f4fb62-82d5-eb13-d84d-7887c2935733.png)

Webアプリを起動します。

```terminal
piz/autostart.sh
```

先ほど実行したときのように、新しいウィンドウが立ち上がり、そのまま実行できていればOKです。

PCなどのブラウザから、[pizero.local:3000](http://pizero.local:3000) にアクセスします。

<!---
画像のような画面になったら、パスワード`0303`を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/1fe07762-a823-6ea5-63a3-519983e3a9b1.png)
--->

画像のようなリモコン画面になり、操作ができるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/9ed50c54-7852-0768-ae79-d8d3143e015a.png)

例えば、ON/OFF を押すと、モジュールのLEDの点滅も合わせてON/OFFされるはずです。

この時点で、神器に電池が入っていれば光るはずです。

## 自動起動の設定をする

Raspberry Piの電源を入れた際に、ここまでを自動で起動するように設定をします。

以下コマンドを実行し、新規ファイルを作成します。

```terminal
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を再起動し、自動でウィンドウが立ち上がるかを確認します。

```terminal
sudo reboot
```

## 外出先でも使用できるようにWi-Fiを出すようにする

:::note warn
この設定に関しては、内容上は可能なのですが、機器のスペックにより動作がギリギリとなっています。
動作確認はできていますが、設定をしない方が安定して動作するかもしれません。
:::

ここまででリモコンとしての機能は完成していますが、ネットワーク接続が必要なので自宅内での使用のみとなっています。

そこで、Raspberry PiからWi-Fiを出すようにすることで、外でも使用できるようにします。

仮想Wi-Fiインタフェースを作成するため、以下コマンドで`wlan0`のMACアドレスを確認します。

```terminal
iw dev
```

```terminal:実行結果
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` にあたる部分をメモしておきます。

ファイルを新規作成します。

```terminal
sudo nano /etc/udev/rules.d/99-ap0.rules
```

以下を書き込みます。
2カ所のMACアドレス部分は、メモした自身のものに置き換えてください。

書き込んだら、[Ctrl + o] [Enter] [Ctrl + x] で保存します。

```terminal
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"

再起動し、設定が反映されているか確認します。

```terminal
sudo reboot
```

再起動後、以下コマンドを実行し、`ap0`が追加されていることを確認します。

```terminal
iw dev
```

```terminal:実行結果
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
```

必要なパッケージをインストールします。

```terminal
sudo apt install hostapd dnsmasq
```

DHCPサーバの設定ファイルを編集します。

```terminal
sudo nano /etc/dnsmasq.conf
```

以下を末尾に書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。

```terminal
interface=ap0
dhcp-range=192.168.81.50,192.168.81.150,255.255.255.0,12h
```

Raspberry PiのIPアドレスを固定するための設定ファイルを編集します。

```terminal
sudo nano /etc/dhcpcd.conf
```

以下を末尾に書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。

```terminal
interface ap0
static ip_address=192.168.81.1/24
nohook wpa_supplicant
```

hostapdの設定ファイルを編集します。

```terminal
sudo nano /etc/hostapd/hostapd.conf
```

以下を書き込み、[Ctrl + o] [Enter] [Ctrl + x] で保存します。

Wi-Fiの情報は

- SSID：pizero
- Password：legend-mm

で設定しています。

```terminal                  
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
```

これを有効にするため、以下のコマンドを実行します。

```terminal
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
```

以上が完了したら、スマホなどでWi-Fi設定を開き、`pizero`というネットワークが表示されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/938209/d5bc2362-ef23-f458-9ca2-6eace278ed6c.png)

パスワード `legend-mm` を入力し、接続します。

接続できたら、Raspberry PiのIPアドレスは`192.168.81.1` となっているので、ブラウザで [http://192.168.81.1:3000](http://192.168.81.1:3000) へアクセスすることで、リモコンの画面を見ることができるはずです。

:::note info
最近のスマートフォンでは、トラッキング制限やWi-Fiアドレスを隠す設定が入っている場合がありますが、この設定が有効だと動作が不安定な場合があるので、機器のWi-Fi設定で無効にしておくことをおすすめします。
:::


# リモコンを更新する

また、Githubに載せているコードは、更新をする場合があります。
更新をした場合には、[Twitter(X) @ta_moon_](https://twitter.com/ta_moon_) にてそのことをお伝えしたりします。

更新されたものを反映するためには、以下を実行してください。

まず、SSHもしくはVNC接続からターミナルを開きます。

以下コマンドを実行します。

```terminal
cd piz
git pull origin main
```

更新内容があれば反映されるので、そのまま機器を再起動すると正しく適用されます。


# おわりに

以上で、神器を光らせるためのリモコンを自作し、スマートフォンなどから操作することができるようになったはずです。

設定の仕方やその内容に関して、細かく丁寧に書いたつもりですが、わかりにくいところ、難しいところ、うまくいかないところなどありましたら、[Twitter(X) @ta_moon_](https://twitter.com/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