Raspberry PI ZERO調査 / MP3プレーヤ試作

Raspberry PI zeroによるMP3プレーヤ試作。目標は今までに製作したMP3プレーヤと同等のユーザインターフェースを持つ、スタンドアロンで使える作品への道筋をつけること。
調査・試行錯誤の記録なので記事の順番はかならずしも時系列ではない。
RaspberryPIへのソフトウエアインストールは多くの場合、Windowsでダウンロード→WinSCPでファイルコピー→インストール、の流れで行っている。

更新: 2018/10/08, 2018/10/15, 2018/11/03, 2018/12/09, 2018/12/23, 2019/01/01


Raspbian Stretch

  • インストールしたバージョン:2018-06-27-raspbian-stretch
  • SDカード書き込み:Etcher-1.4.4-x64
  • 参考サイト
    adafruitのSetting up your SD card
    Raspberry Pi ZeroをUSBケーブル1本で遊べるようにする
    (2018/12/09追記) OSイメージの書き込みについては主として前者を、書き込んだ後の設定については後者を参照した。
    後者によればOSの設定は要するにconfig.txtとcmdline.txtの編集である。ただ、これだけではSSHが繋がらない(2018-11-13-raspbian-stretch-lite)。追加の参考サイトとして
    Raspberry Pi Zero(W)のセットアップ では、bootディレクトリに ssh ファイルが必要とある。sshファイルの作成は単にWindowsのexplorerで右クリック−新規作成−テキストファイルを実行し、ファイル名をssh(拡張子を消す)とした。
  • Windows10側ドライバ
    上記参考サイトではフランス語のページが紹介されているが今はアクセス不能のようだ。 また、サイトによってはマイクロソフトのダウンロードファイルの直リンクが貼ってあることがあるが、それもアクセス不能だったりする。
    次のやり方で入手した。Microsoft Update カタログで「USB Ethernet/RNDIS Gadget」を検索する。今現在、9件みつかるので該当するもの(Acer Incorporated. - Other hardware - USB Ethernet/RNDIS Gadget)の右端のダウンロードボタンをクリック。(Chromeなら)小ウインドウが開くので、表示されているリンクをクリックするとcabファイルが落ちてくる。
  • Bonjour Print Services (Windows)

オーディオ出力回路(PWM)

DACはいずれ検討するとして、差し当たって簡易的な方法でオーディオを出力する。
  • 参考サイト
    adafruitのPi Zero PWM Audio。Option 1. Use Device Tree Overlay の 1 (config.txtに追記するやり方)でできた。
    Raspberry Pi Zero PWMオーディオを試してみる。 
  • ありあわせの部品だけを使って左の図のようになった。
  • aplayerで再生してイヤホンで聞いてみるとほとんどノイズを感じなかった。このまま実用になるかもしれない。

Raspbian Stretch[PWM]オーディオ設定

aplayやomxplayerはすぐに使えたが、MP3専用のmadplayをインストールしました。
  • wiringPi-8d188fa.tar.gz
  • libid3tag-0.15.1b.tar.gz
    make中、ワーニングが出るが無視した。
  • libmad-0.15.1b.tar.gz
    makeがエラーになる。configureが作るMakefileの -fforce-mem を単純に削除した。
  • alsa-lib-1.1.6.tar.bz2
    下の --with-alsaオプションのために必要。
  • madplay-0.15.2b.tar.gz
    ./configure --with-alsa
    このスイッチをつけないでmadplayをコンパイルして実行すると、
    ERROR : audio: /dev/dsp no such file or directory
    のようなエラーになる。
  • madplayでMP3ファイルを再生できるようになりました。
    nohup madplay mp3ファイル名 &
    再生中にalsamixerで音量変更できる。

今後の課題(2018/10/08)

  • SDカードへのMP3ファイル転送手段の調査
  • SDカードの効率利用のため、サイズの小さいLinuxディストリビューション調査
  • Raspberry PIのプログラミング手法の調査
  • Raspberry PIのGPIOプログラミング調査
  • ユーザインターフェース制御プログラムからオーディオプレーヤプログラム(madplay)の制御方法
  • 電源スイッチ回路の検討
  • DACの検討

Windows側の追加インストール

  • Ext2Fsd-0.69.exe (2018/10/14, windows10/toshiba ultrabook)
    大量のMP3ファイルをLinuxのパーティションにコピーするため。
    だが不具合あり? Windows10がSDカード(今回のraspbianのカードだけでなく、FAT32だけのカードも)を認識しなくなった。Windows10の復旧作業をするはめに。raspbianのSDカードは破損していないようだ。
  • Ext2Fsd-0.69.exe (2018/12/01, windows10/hp probook)
    しばらくはこれが使えていたが、最近また調子が悪い(2019/02/16)。ファイルをSDカードにコピーしたにも関わらず、Raspbianで見るとなにもコピーされていない。
  • WinSCP-5.13.4-Setup.exe (2018/10/15, windows10)
    これならMP3ファイルをSDカードに転送できる。難点はMP3プレーヤとしてまとめるときもRaspberry PI zero のUSBポートを(物理的に)開けておく必要があること。
    SSH(TeraTerm)を接続したままの状態でファイルの交換ができることを確認した。
  • WSL(Windows Subsystem for Linux / Windows10) (2018/10/22)
  • Debian GNU/Linux (Windows10) (2018/10/22, Windows Storeから)
    • 上記Debianにgccをインストール
      sudo apt-get update
      sudo apt install build-essential
      "Hello World"プログラムを試した。 Raspberry PI に依存しないLinuxのテストなどはこれでできる。
    • zlib-1.1.4.tar.gz (Debian GNU/Linux)
      ./configure
      make
      sudo make install
    • libid3tag-0.15.1b.tar.gz (Debian GNU/Linux)
      ./configure --disable-shared (このオプションはraspbianでは不要)
      make
      sudo make install
    • libid3tagを使うプログラムのコンパイルは例えば
      gcc source_pg.c -lid3tag -lz
  • win32diskimager-1.0.0-install.exe (2019/02/15, Windows10)

Raspbian Stretch Lite (2018/11/03, 再インストール:2018/12/23)

  • インストールしたバージョン:2018-11-13-raspbian-stretch-lite
  • SDカードへの書き込みはEtcher-1.4.4-x64
  • WindowsでSDカード上のファイル編集
    ・/boot/config.txt に dtoverlay=dwc2 の行を追加
    ・/boot/cmdline.txt に modules-load=dwc2,g_ether を追加
    ・/boot に ssh ファイル作成。
  • wiringPi-8d188fa.tar.gz
  • libid3tag-0.15.1b.tar.gz
    make中、ワーニングが出るが無視した。
  • libmad-0.15.1b.tar.gz
    makeがエラーになる。configureが作るMakefileの -fforce-mem を単純に削除した。
  • alsa-lib-1.1.3.tar.bz2
    下の --with-alsaオプションのために必要。対象のRaspbian には aplay(alsa-utilsも?)がインストール済み。そのバージョン(1.1.3)に合わせる。
  • madplay-0.15.2b.tar.gz
    ./configure --with-alsa
  • [PWM出力] madplayでmp3ファイルを再生し、alsamixerで音量変更できることを確認
  • I2S-DAC(PCM5102)設定
    参考サイト:Raspberry Pi2 に I2S DACを接続する
    ・/boot/config.txt に dtoverlay=hifiberry-dac を追加。
    (このファイルには #dtparam=i2s=on というコメントアウトされた行があるが、これはそのまま。)
    ・/etc/modules に snd_soc_hifiberry_dac を追加。
  • インターネット接続。どのサイトもその設定を簡単に書いているが、苦労の末ようやく接続できた。
    何が決め手だったのかよくわからないのですが、経過を記録しておくと....
    • 症状。外部サイトの名前解決ができない。たとえば外部サイトへのpingは「temporary failure in name resolution」となる。apt-getもエラーになります。
    • windowsのネットワークアダプタのプロパティ変更で共有設定するわけですが、そのさい「ホームネットワーク接続」は「USB Ethernet/RNDIS Gadget」を選択する。この選択肢はRaspberry PI がWindowsに接続された状態(SSHなどで)でないと現れません。
    • /etc/network/interfacesには何も記入しない(自動的に設定されます)。
    • /etc/resolv.confには何も記入しない(自動的に設定されます)。

Raspbian Stretch Lite の軽量化 (2018/12/09)

起動の高速化をこのサイトを参考にして進めた。
  • 固定IP化:/etc/dhcpcd.confに以下を追記(ここの参考サイトはこちら)
    interface usb0
    static ip_address=192.168.0.9/24
  • dhcpcdサービス停止 - sudo systemctl disable dhcpcd SSHログインできなくなる
  • sudo systemctl disable keyboard-setup
  • sudo systemctl disable dphys-swapfile
  • sudo systemctl disable triggerhappy
  • sudo systemctl disable bluetooth
  • ここまで設定しても起動に1分30秒ぐらいかかる。

Raspbian Jessie Lite (2018/12/09, 再インストール:2018/12/23, 2019/02/14)

  • Stretchでは起動時間が大きいので旧バージョンを試してみる。
  • 旧バージョンのRaspbianのダウンロードはこちら
  • インストールしたバージョン:2017-03-02-raspbian-jessie-lite
  • インストール手順はRaspbian Stretch Lite と同じ。
    要点はWindowsで
     ・config.txtを編集する(末尾に dtoverlay=dwc2 の行を追加)。
     ・cmdline.txtを編集する(行途中、rootwaitの後ろあたりに modules-load=dwc2,g_ether を追加)。
     ・bootディレクトリにsshファイルを作成する。
  • この時点で起動時間は25秒だった

Raspbian Jessie Lite の設定 (2018/12/10, 2018/12/23, 2019/02/16)

  • wiringPi-8d188fa.tar.gz ((1)tar -zxvf ... (2)cd ... (3)./build)
  • libid3tag-0.15.1b.tar.gz ((1)tar -zxvf ... (2)cd ... (3)./configure (4)make (5)sudo make install)
  • libmad-0.15.1b.tar.gz ((1)tar -zxvf ... (2)cd ... (3)./configure (4)Makefile編集 (5)make (6)sudo make install)
    以上の3つのインストールはStretchのときと同じ。
    libid3tagなどのライブラリは/usr/loca/libにインストールされ、そのパスは/etc/ld.so.conf.d/libc.confに記述されている。にもかかわらずプログラム実行時に"cannot open shared object file: No such file or directory"のエラーがでる。/sbin/ldconfigでキャッシュを更新しておく。
  • alsa-lib-1.0.28.tar.bz2 ((1)tar -xvf ... (2)cd ... (3)./configure (4)make (5)sudo make install)
    Jessieにインストール済みのaplayのバージョン(1.0.28)に合わせる。
  • madplay-0.15.2b.tar.gz
    ./configure --with-alsa
  • I2S-DAC(PCM5102)設定
    参考サイト:Raspberry Pi2 に I2S DACを接続する
    ・/boot/config.txt に dtoverlay=hifiberry-dac を追加。
    (このファイルには #dtparam=i2s=on というコメントアウトされた行があるが、これはそのまま。)
    ・/etc/modules に snd_soc_hifiberry_dac を追加。
  • nohup madplay mp3ファイル名 &
    でmp3を再生できる。
    ただし、再生中にalsamixerによる音量調整はできなかった。
  • madplay mp3ファイル名
    で実行したとき、+/-キー入力で音量を調整することはできる。
  • インターネット接続。Stretch Liteでインターネット接続ができるようになったら、そのまま Jessie Lite でも接続できるようになっていた。(2018/12/24)
  • SPI有効化。raspi-config → 5.Interfacing Options → P4.SPI → Yes (2019/01/01)

Raspbian Jessie Lite の軽量化 (2018/12/09, 2018/12/24)

参考サイト:
Raspberry Pi Zeroを10秒以内で高速起動する最も簡単な方法
Raspbian stretch でIPアドレスを固定する方法
  • sudo systemctl disable dphys-swapfile
  • sudo systemctl disable keyboard-setup
  • sudo systemctl disable kbd
  • sudo systemctl disable triggerhappy
  • sudo systemctl disable plymouth
  • sudo systemctl disable plymouth-start (実行してもなにも効果ない?)
  • sudo systemctl disable ntp
  • /boot/cmdline.txt の行末に quiet を追加
  • /boot/config.txt に force_turbo=1 を追加
  • 以上の設定により起動時間は19.3秒になった。
  • /boot/config.txt のdtparam=audio=on をコメントアウト
  • 固定IP化:/etc/network/interfaces に以下を追記
    allow-hotplug usb0
    iface usb0 inet static
    address 192.168.137.9
    netmask 255.255.255.0
    (gatewayの記述なし)
  • sudo systemctl disable dhcpcd
  • 起動時間は8.6秒ぐらいになった。ただしインターネット接続不可となる。
MP3プレーヤのページに戻る トップページに戻る