2019年1月23日水曜日

Raspberry Pi zero WのAudio出力

やっとVISAバーチャルカードが来ましたので早速AliExpressで部品の注文をしました。おかしな日本語も時々混ざってはいますが、日本語のページもあるので注文についてそれ程迷うこうはありませんでした。注文後は、進捗状況がメール配信されるので好感が持てましたが、到着まではしばらくかかるでしょうからノンビリと到着を待ちたいと思います。

さて、その間にRaspberry Pi Zero Wから音声出力ができるようにしておきたいと思います。

Raspberry Pi 2や3にはイヤフォンジャックが着いていますがZeroには着いていません。Raspberry Pi Zero用のDACも販売されています(Pi-DACZeroHiFiBerry DAC +pHAT DACなど)が、以前Raspberry Pi 2の時に使っていたアンプがあるのでこれを流用したいと思います。Raspberry Pi ZeroではHDMIかGPIOを利用して音声出力は可能なので、GPIOから音声信号を取り出してアンプに接続します。

「Raspberry Pi Zero Audio」で検索すればGPIOを利用した音声出力に関するサイトがたくさん出てきますが、基本的にはAdafruit のサイトを参考にしているようです。

Adafruitのサイトでは二通りの方法が掲載されていますが、boot時にDTO(Device Tree Overlay)を利用してGPIO端子にPWMを割り当てる方法では設定の変更にリブートが必要となりますが設定は簡単です。(今回はRAPIROへの組み込みを前提としているので、こちらの方法で問題はありません)自由度が高い方法はOption 2の方なので、今回はこちらを試したいと思います。

基本的にはAdafruitのサイトに記載されている通りに実行していけば良いのですが、Raspberri Pi Zeroを前提に手順が示されているので、Raspberry Pi Zero Wかつ無線LANへの接続が終了している条件で、Raspberry Pi Zero Wにはパソコンなどからsshで接続している状況での作業を説明したいと思います。私の場合は別のRaspberry Pi 2(有線LANでネットワークには接続)のGUI画面で端末を開いてsshで接続しています。

あ!、ブラウザでAdafruitのサイトを表示しておいて下さい。


以下、Raspberry Pi Zero W側で必要な作業だけ記述して行きたいと思います。

$ sudo apt-get update
$ sudo apt-get install raps-gpio

$ cd
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

ここでwiringPiのbuildがうまくいったかを確認します。

$ gpio -v
$ gpio readall

次にGPIOの割り当てを変更するツールをコンパイルします。(viは適当なエディタを使って下さい)また、ここでは作業用ディレクトリを使いますが、すでに作成済みなら読み替えてください。

$ cd
$ mkdir tmp
$ cd tmp
$ vi gpio_alt.c

ここで、Raspberry Pi 2(またはパソコン)のブラウザに切り替えてAdafruitのサイトからgpio_alt.cのソースをコピー(Changing the GPIO ALTsの下、Here's the code in entirety:でCopy Codeをクリックする)&ペースト後、保存します。

$ gcc -o gpio_alt gpio_alt.c
$ sudo chown root:root gpio_alt
$ sudo chmod u+s gpio_alt
$ sudo mv gpio_alt /usr/local/bin/

$ gpio_alt -p 13 -f 0
$ gpio_alt -p 18 -f 5

変更されたかの確認

$ gpio readable

次に音声出力をヘッドフォン固定に変更します。

$ sudo raspi-config

8 Advanced Option -> A9 Audio -> 1 Force 3.5mm (Headphone)


ここで、一旦Raspberry Pi Zero Wの電源を切ってアンプとスピーカを接続します。

Raspberry Pi Zero WにはGPIOピンが標準では付いていないので、ハンダ付けしてアンプをつなぎます。(アンプ出力もヘッドフォンジャックからメスのジャンパワイヤに変更してあります)


配線が判りづらいですが、Raspberry Pi Zero用のピン配置の物理ピン番号で説明すると

電源+ →1番(3.3V)
電源− →9番(GND)
音声R+ →12番(GPIO 18)
音声L+ →33番(GPIO 13)
音源− →34番(GND)

音源R−と音源L−はアンプ側で接続して1本で配線しています。


Raspberry Pi Zero Wの電源を入れ直して、

$ gpio_alt -p 13 -f 0
$ gpio_alt -p 18 -f 5
$ aplay /usr/share/sounds/alsa/Front_Center.wav

で問題なく再生されました。

ここで電源投入のつどgpio_altを入力するのは面倒なので「Automate it!」以下を行なって起動時に自動的にgpio_altを実行するようにします。

$ sudo vi /root/pwmaudio.sh

先程と同じように「and inside put:」以下のシェルスクリプトをコピー&ペーストして保存します。

$ sudo chmod +x /root/pwmaudio.sh
$ sudo vi /lib/systemd/system/pwmaudio.service

同じく「and in there stick:」以下のシェルスクリプトをコピー&ペーストして保存します。

$ sudo systemctl enable pwmaudio.service
$ sudo systemctl start pwmaudio.service

エラーが出なければ、Raspberry Pi Zero Wを再起動して

$ gpio readall

で設定が変更されていることを確認して終了です。

0 件のコメント:

コメントを投稿

Edisonが故障した一件

 最近またEdisonで遊んでいます。 教育用のデバイスとしてよく出来ているなと思っている Edison ですが、現在3台を所有しています。 最近このうちの1台が調子が悪くなってしましました。具体的にはBeep用のデバイスが壊れたようです。購入時にチェックをしたつもりですが今回久...