image

概要

Raspberry Pi Zero Wが発売された時に購入しましたが全く使用せず、最近引き出しに入っているのを発見したので何かに使用できないかとRaspberry Pi OSを書き込みました。
が、最近のRaspberry Pi OSを使用するとブラウザも起動できず、さらに処理が激重になっているので使い物にならず。
ただ、GUIを使用せずsshで接続していると特に問題なく使用できるし、発熱も少ないため常時起動させておくようなものに使用できるのでは?と思いました。
そこで、遅いとは言えWi-FiとBluetoothが使用できるため何か使い道がないかと調べていると、Radikoなどのネットラジオを再生・録音するスクリプトradish/radish-playを公開している方がいました。
ラジオを使用するか分かりませんが、OLEDとタクトスイッチを接続し、Wi-FiとBluetoothのスピーカーでラジオを再生・録音(最低限)できるアプリを作成しました。
再起動やシャットダウンもアプリから行うことができ、電源のUSBの接続だけで使用できるので思っていたより便利です。

準備

部品 説明
Raspberry Pi
※Wi-Fi+Bluetoothありモデル
Raspberry Pi Zero WとRaspberry Pi3で動作することを確認。
Raspberry Pi OS (Legacy) Lite Legacy(Bullseye)でない方(Bookworm)の最新で動作することは確認しましたが、起動時間や処理が遅いし何か不安定なのでLegacyを使用しました。
※今回使用したものは以下
2024-03-12-raspios-bullseye-armhf-lite.img.xz
Release date: March 12th 2024
System: 32-bit
OLED(128x64) SSD1306を使用したI2C接続のOLED。
秋月で購入した0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色を使用。
タクトスイッチx4 緑・青・黄・赤色のタクトスイッチ。
なぜか手元にあったものでいつ購入したのか不明、たぶん秋月で購入したと思う。
Raspberry Pi ZERO用
ユニバーサル基板
OLEDとタクトスイッチx4を乗せるのにちょうど良いサイズのユニバーサル基板が秋月で売られていたため購入しました。
Bluetoothスピーカー Raspberry Piで接続・再生ができるもの。
手持ちの良くわからないスピーカーとイヤホンで再生できることを確認。

Raspberry Pi設定

以下は、HDMIとUSBキーボードを接続したRaspberry PiでWi-Fiの設定までを行い、その後はWindows PCからTera Termでログインして設定を行う。
また、IPv6はサポートしていない。


  1. 公式サイトから「Raspberry Pi OS (Legacy) Lite」のイメージファイルをダウンロードし、SDカードへ書き込む。
  2. SDカードをRaspberry Piへ挿入し、Raspberry Pi を起動
  3. しばらく待つとキーボード設定が表示されるため、使用するキーボードを選択
    例)一般的な日本語キーボードの場合
    
    -> Other
      -> Japanese
        -> Japanese - Japanese (OADG 109)
  4. ユーザー追加を求められるため、ユーザー名とパスワードを入力
  5. ログイン待ちが表示されたら、ユーザー名とパスワードを入力しログイン
  6. raspi-configを実行し、Raspberry Piの設定
    $ sudo raspi-config
    
    1 System Options
      -> S4 Hostname                ← ホスト名を変更する時のみ選択
        -> <OK>
          -> ****                   ← ホスト名
    3 Interface Options
      -> I2 SSH                     ← SSH 有効、Windows PCからログインするのに使用
        -> <YES>
          -> <OK>
    3 Interface Options
      -> I5 I2C                     ← I2C 有効
        -> <YES>
          -> <OK>
    5 Locations Options
      -> L1 Locale
        -> [*] ja_JP.UTF-8.UTF-8
          -> ja_JP.UTF-8
    5 Locations Options
      -> L2 Timezone
        -> Asia
          -> Tokyo
    5 Locations Options
      -> L4 WLAN Country
        ->  JP Japan
          -> <OK>
    6 Advanced Options              ← Raspberry Pi OS (Legacy) Lite時のみ選択
      -> AA Network Config
        -> 2 NetworkManager
          -> <OK>
    
    ※ESC キー押下で抜ける
  7. 以下コマンドを実行し、無線ネットワークの設定を行う。
    $ sudo nmtui
  8. 無線ネットワーク設定完了後、以下コマンドを実行しネットワーク接続を行う。
    $ sudo nmcli con up "profile name"
    
    ※profile nameは、nmtuiで追加した名前
  9. 以下コマンドを実行し、wlan0のIPアドレスが設定されていることを確認(inetの後がIPアドレスで、覚えておく)
    $ ip a
  10. 以下コマンドを実行し、Raspberry Piを再起動
    $ sudo reboot
  11. ネットワーク設定まで完了したため、この後はWindows PCのTera Termからsshでログインし設定を行う(個人的にTera Termから設定した方が楽なので使用)
  12. Tera Termを起動し、「ファイル」‐「新しい接続」‐「TCP/IP」へRaspberry Piのホスト名、またはIPアドレスを入力し「OK」ボタンを押下
  13. SSH認証ダイアログが表示されたなら、Raspberry Piのユーザ名とパスワードを入力し、「OK」ボタンを押下しRaspberry Piへログイン
  14. Raspberry Pi OS (Legacy) Lite時のみ以下を行う
    (ファイル共有時にWindowsからRaspberry Piを見えるようにするwsddのインストールに必要)
    ※以下はviを使用していますが、nanoなど別のテキストエディタでも良い、また、現在はこのファイルへ直接追加するのは駄目だったような気がしますが面倒なので
    $ sudo vi /etc/apt/sources.list
    
    deb https://pkg.ltec.ch/public/ buster main                 ← この文字列を行末へ追加
    
    $ sudo apt-key adv --fetch-keys https://pkg.ltec.ch/public/conf/ltec-ag.gpg.key
    
  15. 以下コマンドを実行し、アップデートとアプリ、ライブラリやツール類のインストールを行う。
    # アップデート関連
    $ sudo apt update
    $ sudo apt upgrade -y
    
    # 再生・録音関連に必要なアプリ類
    $ sudo apt install -y ffmpeg
    $ sudo apt install -y libxml2-utils
    $ sudo apt install -y pulseaudio-module-bluetooth
    
    # ラジオアプリビルド時に必要なライブラリ
    $ sudo apt install -y libasound2-dev
    $ sudo apt install -y libbluetooth-dev
    $ sudo apt install -y libgpiod-dev
    
    # ツール類(vimは必要に応じて)
    $ sudo apt install -y vim
    $ sudo apt install -y git
    $ sudo apt install -y samba
    $ sudo apt install -y wsdd
  16. /etc/samba/smb.confファイルを編集し、Samba設定の変更を行う
    例)設定例
    $ sudo vi /etc/samba/smb.conf
    
      :
    [homes]
       comment = Home Directories
       browseable = no
    
    # By default, the home directories are exported read-only. Change the
    # next parameter to 'no' if you want to be able to write to them.
       read only = no
    
    # File creation mask is set to 0700 for security reasons. If you want to
    # create files with group=rw permissions, set next parameter to 0775.
       create mask = 0664
    
    # Directory creation mask is set to 0700 for security reasons. If you want to
    # create dirs. with group=rw permissions, set next parameter to 0775.
       directory mask = 0775
  17. 以下コマンドを実行し、Sambaの再起動を行う
    $ sudo service smbd restart
  18. 以下コマンドを実行し、Sambaユーザーを追加する
    $ sudo pdbedit -a ユーザー名
  19. Windows PCからファイル共有を開き、Raspberry Piのユーザーのホームディレクトリへアクセスできることを確認する。
  20. I2Cの速度400kb/sへ変更するため、config.txtファイルの最後へdtparamを追加する
    # Raspberry Pi OS (Legacy) Lite時
    $ sudo vi /boot/config.txt
    
    # 上記以外
    $ sudo vi /boot/firmware/config.txt
    
    dtparam=i2c_baudrate=400000
    
    # 再起動
    $ sudo reboot

Bluetoothスピーカー接続

Raspberry PiとBluetoothスピーカーの接続を行います。

  1. 以下コマンドを実行し、Bluetoothの設定を行う
    $ bluetoothctl
  2. 以下コマンドを実行し、ペアリング可能なデバイス検索
    [bluetooth]# scan on
    
    # Bluetoothスピーカーをペアリングモードにしデバイスが表示されるのを確認、その時にBDアドレスを記憶
    [NEW] Device xx:xx:xx:xx:xx:xx デバイス名               ← xx:xx:xx:xx:xx:xx 箇所がBDアドレス
  3. 以下コマンドを実行し、デバイスとペアリング
    [bluetooth]# pair xx:xx:xx:xx:xx:xx
    
    # 以下のメッセージが表示されるのを確認
    Attempting to pair with xx:xx:xx:xx:xx:xx
        :
    Pairing successful
  4. 以下コマンドを実行し、デバイスの信頼を行う
    [bluetooth]# trust xx:xx:xx:xx:xx:xx
    
    # 以下のメッセージが表示されるのを確認
    Changing xx:xx:xx:xx:xx:xx trust succeeded
  5. 以下コマンドを実行し、接続を行う
    [bluetooth]# connect xx:xx:xx:xx:xx:xx
    
    # 以下のメッセージが表示されるのを確認
    Attempting to connect to xx:xx:xx:xx:xx:xx
        :
    Connection successful
    
    ※詳細は不明ですが、上記失敗してもtrustまで成功しているならRaspberry Piの再起動で接続できるようです
  6. 以下コマンドを実行し、bluetoothctを終了
    [デバイス名]# exit

ラジオアプリ(btradio)設定

  1. btradioの圧縮ファイルをRaspberry Piのホームディレクトリ(Windows PCのファイル共有から見たルート)へコピー
  2. 以下コマンド実行し、圧縮ファイルを解凍、btradioをビルド
    $ cd ~
    $ tar -jxvf 圧縮ファイル
    $ cd ~/btradio
    $ make
  3. 以下コマンド実行し、radish/radish-playをダウンロード
    $ cd ~/btradioscript
    $ git clone https://github.com/uru2/radish.git
    $ git clone https://github.com/jg1uaa/radish-play

btradio/setup.iniファイル編集

BluetoothスピーカーのBDアドレス設定

Windows PC、またはRaspberry Piからbtradio/setup.iniファイルを開き、以下個所を使用するBDアドレスへ変更する。

bdaddr = xx:xx:xx:xx:xx:xx              ; Bluetooth デバイスアドレス

ラジオ局編集

radikoは地域により聞ける局が決まっているのため、地域の設定へ変更が必須となる。
[station]セクション以下にある内容を編集する。

[station]
; type   id       image  commenct
radiko = TBS,     0,     TBSラジオ
radiko = QRR,     1,     文化放送

type列へ種類を指定する。
指定できる種類は以下コマンドで確認する。

$ ~/btradio/script/radish/radi.sh
Usage: radi.sh [options]
Options:
  -t TYPE         Record type
                    nhk: NHK Radidu
                    radiko: radiko
                    lisradi: ListenRadio
                    shiburadi: Shibuya no Radio
  :

id列へステーションIDを指定する
指定する文字列は、以下コマンドで確認する。

$ ~/btradio/script/radish/radi.sh -l
  :
Record type: radiko
  HBC: HBCラジオ
  STV: STVラジオ
  AIR-G: AIR-G'(FM北海道)
  :

image列は、~/btradio/data/station.bmpファイル中の画像インデックスを指定する。
station.bmpは256色のビットマップで白色ドットのみOLEDへ表示する。
画像形式は、128x40を1つのラジオ局の画像とし縦に並べたもの(先頭の画像がインデックス0)。

comment列はコメントで特に参照しない。


動作確認

OLED+タクトスイッチで動作させる前に、テキストで動作確を行う。
操作ですが、緑・後ボタンで選択、黄で決定(メニュー非表示時再生)、赤で戻る(メニュー非表示時停止)。

最初に起動したときに音量が最大になっている可能性があるため、誤操作防止のためMaster音量をalsamixerで調整する。

$ alsamixer

また、アプリ起動後にVolumeメニューも一応確認した方が安全。

テキストで動作確認を行う場合、テキストの表示範囲を128x64以上にする必要がある。
そのため、Windows PCからTera Termからログインして実行する。
実行する前に、Tera Termのウィンドウサイズを調整後、以下コマンドを実行する。
操作方法はキーボードから、z(緑)/x(青)/c(黄)/v(赤)で、btradioの終了は「Ctrl+C」。

$ ~/btradio/btradio -t

image

メニューからBluetoothスピーカーの接続・切断、ラジオの再生ができることを確認。
初回起動時、接続できているのに音が出ない時は、Bluetoothスピーカーの切断→切断を行うと音が出るかも。


回路図

image

タクトスイッチは、Raspberry Piが持つプルアップ設定を使用。
また、gpioはbtradio/setup.iniで指定可能。


btradioの自動起動

起動時にアプリを起動する方法がいくつかあるようですが、crontabのrebootを使用しました。
以下コマンドを実行し、アプリを自動起動に設定します。
※sleep 3しているのは、起動直後だとi2cのドライバがinsmodされていない時があるため安全な時間待っています

$ crontab -e

@reboot    sleep 3; pulseaudio --start; ~/btradio/btradio              ← この行を追加

また、crontabを使用することでアプリとは別に録音できる。
例)毎週日曜の11:59-13:00の文化放送を録音(1分前にしているのは録音開始するまで時間が掛かるため)

$ crontab -e

59 23 * * 0    cd ~/btradio/record; ~/btradio/script/radish/radi.sh -t radiko -s QRR -d 61