Raspi Zero(w)でWebラジオ(本体プログラム)

今回は本体プログラムを書いて行きます。

下準備

  • プログラム言語
    • Pythonを使用します。
    • Raspi Zero-W OSインストール時に既にインストールされています。
  • HTTPサーバー
    • Raspi Zero-WにHTTPサーバ立ててラジオの管理を行います。
    • python_HTTP_Serverで説明されているサーバを元にしています。
  • HTTPクライアント
    • Webラジオのサイトにアクセスする為にHTTPクライアントの機能が必要です。
    • 今回は requests を使用しています。
    • requestsのインストール
      • requestsのインストールの前に PIP をインストールする必要が有ります。
        • PIPのインストールはモニターで sudo apt install pip を実行
      • その後 requestsのインストール
        • モニターで pip install requests を実行
  • GPIO
    • Raspberry PI最大の特徴であるIOポート。
    • 今回はPilot LEDの点滅用に使用しています。
    • 簡単は説明はここに有りますー>GPIO
  • IPアドレスの固定
    • 現在の環境ではスマホからRaspi Zero-Wにアクセス時DNSが効きません。
    • そこでRaspi Zero-WのIPアドレスを 192.168.3.245 固定しました。
    • 固定方法はここを参照下さい ー> IPアドレスを固定する

プログラムの説明

使用したプログラム一覧

プログラムはRaspi Zero-Wのホームディレクトリの下に radio フォルダを作りそこに保存しています。

  ファイル名        説明
1 radio_player.py本体プログラム。Pythonで書いています。
2 radiko.js , radiko_rec.js Java Script。 サーバーのHPで使用
3 radiko.cssサーバーHPのCSSファイル
4 list.txt , state.txt放送局リストとラジオの状態を保存したファイル
5 favicon.icoファビコンファイル
6 その他録音したファイル
1から5までが使用しているファイルです。その他はサンプルとしてこのアプリで録音したファイルです。
ここに今回使用したファイル一覧を保存しました。

アプリの説明

アプリは Player Recorder Editor の3部構成になっています。

Player

サーバーへはブラウザにIPアドレス 192.168.3.245:8080 でアクセス出来ます。(ポートも8080に指定しています)。サーバーにアクセスするとこの画面が最初に表示されます。 

このプログラムはこれを参考に書いています ー> Radikoを聞く(Arduino編) ESP32で書いたプログラムをRaspi Zero-Wで書き換えました。デコーダーとしてFFPlay、Mplayerを使用したのですが、これらが強力でRadikoだけでは無く他のラジオ局も簡単に聞けるようになりました。

  1.   サーバーのIPアドレスとポートを192.168.3.245:8080に固定してます。
  2.  ボリュームは0が最小 100が最大です。スライドバーで調整出来ます。
  3. 4 リスト選択とラジオ局リスト
    • リストはRadiko(上の段)とそれ以外のラジオ局(下段)
    • Radikoは東京エリアで聞ける15局が登録されています。
    • それ以外の局は後で説明する Edit機能で追加削除出来ます。
  1. 6,7 開始、ミュート、停止ボタン
  1.  Recorder(録音の機能)へ移動
  2.  Editor(ラジオ局の追加削除)
  3. 11 AutoチェックとSaveボタン
    • Saveボタン:ラジオの状態を保存。次回同じ状態で立ち上がります。
    • Autoがチェックされた状態で保存すると次回その局が自動再生されます。
  1.  終了ボタン。アプリを終了しRaspi Zero-Wの電源を落とします。

Recorder

ラジオを録音する録音部とそれを再生する再生部の構成。

  • 録音部
    • 対応しているのは ラジコ タイムフリー のみです。
    • ラジコ タイムフリー のルールに従って項目を指定して下さい。
      1.  このリストで録音したいRadikoのラジオ局を選択
      2.  開始時間の設定 各欄は 年、月日、時間設定です。
        • 年: 4桁で設定
        • 月日: 月日共に2桁で指定して下さい。 1月ー>01 5日ー>05
        • 時間: 時分秒の順で設定します。ここも各項目2桁で指定
      3.  終了時間ー>開始時間と同じ様に設定
      4.  ファイルネーム
        • このファイルネームで保存されます
        • 名前のみで拡張子は付けないで下さい。
      5.  録音開始
        • 録音が終了するとボタンの状態が戻ります。
  • 再生部
    • 上記で録音したファイルを再生します。
    • 追加機能として録音したファイルのダウンロード、削除も出来ます。
      1.  ボリューム
      2.  ファイルリスト
        • ここに録音されたファイルのリストです。
        • ここで再生したいファイルを選びます。
      3.  再生用、Play、Mute、Stop ボタン
        • Playerと同じ機能です
      4.  ファイルリストで選んだファイルを削除します。
      5.  ファイルリストで選んだファイルをダウンロードします。
      6.  Playerに戻ります。

Editor

  • ラジオ局の追加と削除を行います。
  • ラジコは自動的に登録されるので、それ以外のラジオ局を登録します。
  • 登録されたラジオ局はPlayerのラジオ局リストの下の段に表示されます。
  • 10局の放送局を登録出来ます。
  • 左側Title欄がプルダウンリストに表示されます。ここにラジオ局のタイトルを入力。
  • 右側URL欄のラジオ局のリンク先入力ですが、
    • SHOUTcastの場合
      • SHOUTcast のHPの行く       
      • 聞きたい局のDownLoadマークをクリック
      • 出て来たウインドウで、”Any player(.m3u)の上にマウスを置いて右クリック
      • 出て来たウインドウで、”URLのコピー” を選択。
      • コピーされたURL ”http://yp.shoutcast.com/sbin/tunein-station.m3u?id=22146” の前に、”-playlist “を付けた”-playlist http://yp.shoutcast.com/sbin/tunein-station.m3u?id=22146” を入力
      • SHOUTcastは最後の数字で放送局を区別している様です。
    • サイマルラジオの場合
      • HPで音声のみのアイコンの上で右クリック
      • リンクのURLのコピーを選ぶ
      • コピーされたURLが、http://www.simulradio.info/asx/fmpalulun.asxと .asxで終わるURLをそのまま入力
        • ー> サイマルラジは聞けない局が結構有りました。
  • 入力後、OKボタンを押せばリストが更新され、Backボタンを押せばリストの更新は無くPlayerに戻ります。

自動起動

最後にRaspi Zero-Wに電源を入れたらこのプログラムが自動的に立ち上がる設定にします。立ち上がりと同時にプログラムを実行させる方法をここで説明しています。ー> CUIで起動時にプログラムを自動実行させる方法 今回はこの中の 2. .bashrc を使いました。

  • Raspi Zero-WをCUI Auto Loginモードに設定します。
  • .bashrcを編集する。
    • .bashrcファイルの最後に 
      • if [ $(tty) == ‘/dev/tty1’ ]; then /home/pi/radio/python radio_player.py; sudo shutdown -h now; fi 
      • を追加しました。
    • /home/pi/radio/python radio_player.py; ー> 本体プログラムを実行
    • sudo shutdown -h now; ー> 本体プログラム終了後 シャットダウンを行う。

OSのインストールから実行までのおさらい

  • ハード関係
    •  RUNスイッチの追加
    •  Pilot LEDの追加
    •  USBスピーカの接続
  • ソフト関係 
    •  Raspberry Pi imagerでインストール用SDを作製
    •  Raspi Zero-WにSDカード入れてOSをインストール
    •  インストール完了後、DeskTop_PCからSSHでRaspi Zero-Wに接続
    •  日本語化、スピーカ接続を行う
    •  ホームの下にradioフォルダを作製しSambaをインストール
    •  ffmpeg, mplayerのインストール
    •  requestsのインストール
    •  Raspi Zero-W IPアドレスの固定
    •  radioフォルダにプログラム一式をコピーする。
    •  Raspi Zero-WをCUI Auto Loginモードにする
    •  .bashrcを編集
    •  モニターで sudo shutdown -h now を実行する
    •  Raspi Zero-W上のLEDが消えたらRUNスイッチを押す
    •  Raspi Zero-W上のLEDが点滅ししばらくするとPilot LEDが点灯します。
    •  アプリがレディーになるとJ-WAVEが自動で再生されます。
    •  DeskTop_PCのブラウザから 192.168.3.245:8080と入力しサーバにアクセス。Playerが立ち上がります。
    •  アプリのENDボタンを押すと終了しRaspi Zero-Wのパワーが落ちます

最後に

ESP32で書いたRadikoラジオをRaspi Zero-Wでと思い始めました。ESP32と違いRaspberry PI には多くの関数や機能が有りESP32より色んな事が比較的簡単に出来ました。ただ、Raspi Zero-Wは起動とシャットダウンに時間がかかるのが玉にキズって感じでしょうか。