Raspberry PI ZERO調査

調査・試行錯誤の記録なので記事の順番はかならずしも時系列ではない。

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


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 (raspbianではインストール済み)
      ./configure
      make
      sudo make install
    • libid3tag-0.15.1b.tar.gz
      ./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には何も記入しない(自動的に設定されます)。
  • libao-1.2.0.tar.gz (以下 2019/03/02)
    mpg321が必要とする。
  • mpg321_0.3.2.orig.tar.gz
    コマンドラインスタイルのmp3デコーダ。曲途中からの再生位置指定にフレーム数を指定しなければならない。

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秒ぐらいになった。ただしインターネット接続不可となる。
  • 以上、Raspbian Jessie Liteをベースに各種設定でたどりついたRaspbianをMP3プレーヤ第13作の基本ソフトとする。(2019/03/03)
  • 64GByte SDカードへの展開
    • 32G SDカード(ブランド:LEPLUS)のイメージをWin32DiskImagerで吸い出す。
    • 64G SDカード(ブランド:Sandisk)にWin32DiskImagerで書き込む。
    • Raspberry PI をそれで起動する。
    • sudo raspi-config → 7.Advanced Options → A1 Expand Filesystem
    • 再起動

Minibian (2019/02/16)

  • 2016-03-12-jessie-minibian.tar.gz
  • SDカードへの書き込みはEtcher-1.4.4-x64
  • OTG接続は簡単でない? → Minibianの調査は後の課題とする

Raspberry PI zero W (2019/03/01)

  • 今までに作成した "非W"用Raspbian (2017-03-02-raspbian-jessie-liteをベースにI2Sオーディオの設定をし、起動時間短縮のための各種設定をしたもの)でテストを行う。
    参考サイト : Setting WiFi up via the command line
  • まず起動してUSBケーブル経由でログインできることを確認
  • raspi-configに Network Options がない
  • それでも sudo iwlist wlan0 scan コマンドはwifi networkを検出できた(Buffaloのルータを見つけた)。
  • /etc/wpa_supplicant/wpa_supplicant.conf 作成
  • パスワードの暗号化 wpa_passphrase "Buffalo......"
    これは変換結果を標準出力へ出すだけなので、その表示結果から暗号化されたパスワードの部分をコピー、wpa_supplicant.confファイルにペーストした。
  • 上記サイトは wpa_cli -i wlan0 reconfigure でインターフェースの再設定をすると書いているがエラーになる(no such device ...のような)。
    (別の機会に実行したらOKになった。違いの理由は不明だがdhcpcdを有効化してたからか)
  • dhcpcdを無効にしていた。これを再有効化。sudo systemctl enable dhcpcd
  • raspi-config → 4 Localisation Options → I4 Change Wi-Fi Country → JP を選択して再起動
  • wpa_cli -i wlan0 reconfigure はあいかわらずエラー。ただしエラーは 'RECONFIGURE' command timed out. に変わった。
  • ところが ifconfig wlan0 を実行してみるとIPアドレスが振られている。そのIPを使ってTera Termからログインもできた。
  • USBケーブルをバスパワー専用の方につなぎ変えてもログイン可能。WinSCPもつながった。
  • DHCPは起動時間がかかる原因の一つなので固定IPにしたい、ということでUSBケーブル接続の場合と同じ設定をためした。
    /etc/network/interfacesを編集します。ifaceのmanual→staticにし、address/netmaskを追記。
    allow-hotplug wlan0
    #iface wlan0 inet manual
    iface wlan0 inet static
    address 192.168.??.??
    netmask 255.255.255.0
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  • ふたたびdhcpcdを無効にする。sudo systemctl disable dhcpcd
  • 再起動してログインできること確認。
  • systemd-analyze time による起動所要時間は13秒であった。
    Startup finished in 874ms (kernel) + 12.231s (userspace) = 13.105s

Raspberry PI zero W の Bluetooth

  • BluezのインストールはTech Blog by Akanuma Hiroakiを参考にした。
  • インストールしたライブラリは上記サイトで言及されているものの他、libreadline-dev も必要だった。
    sudo apt-get install -y libreadline-dev
  • bluez-5.50.tar.xz
    ./configure --enable-experimental上記サイトのやり方。
    ↓bluezのREADMEを参考にしたconfigureの実行。
    ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc \
        --localstatedir=/var --enable-library
    make
    sudo make install
  • このページのsimplescan.cでコンパイルと動作を確認
  • BlueZのAPI/サンプルコードのメモ
  • sudo apt-get install libncursesw5-dev
    これではcurses.hを取得できない。
  • sudo apt-get install libncurses5-dev
    これはcurses.hを取得できる。
  • sudo date -s "03/21 20:45 2019"
  • sudo python get-pip.py
  • sudo pip install dbus-pythondbus-python is now obsolete, you should be using pydbus:
  • sudo apt-get install python-dbus
  • sudo ./list-devices

Raspberry PI zero W の USB Audio (2019/04/20)

  • CQ出版の「ヘッドホン・アンプ製作実例集」に付属のDAC基板を使ってみる。
  • Raspberry PI と接続には「カコムイ USB OTG ケーブル(Micro USB-B to USB mini-B)オスtoオスタイプ Micro-B to Mini-B OTG機能対応」を使用。(Amazonで入手)
  • 参考サイト:Raspberry Pi Zero USB Audio on Raspbian Jessie (method 1)
  • /usr/share/alsa/alsa.conf を編集
    defaults.ctl.card 1
    defaults.pcm.card 1
  • /lib/modprobe.d/aliases.conf を編集
    options snd-usb-audio index=-2 をコメントアウト
  • 再起動後、aplayでwavファイルが再生できることを確認。しかし、madplayでmp3ファイルを再生できない。
  • I2Sオーディオのための設定を解除
    /boot/config.txt の dtoverlay=hifiberry-dac をコメントアウト
    /etc/modules の snd_soc_hifiberry_dac をコメントアウト
  • madplayでmp3ファイルを再生できるようになった
  • aplay -l によるとサウンドデバイスは1つだけになった。とするとalsa.confの設定は 0 に戻してよいことになる。 (戻さなくてもmadplayは使えたが)
  • 以上、要するにI2Sの設定を解除すれば他に設定は不要だった。
MP3プレーヤのページに戻る トップページに戻る