リベルさんの戯言室

ゲームの攻略とか映画のネタバレとか。そのほかヌルヌル書いてます。リンクフリーです。※当ブログはPC版表示に最適化されています。

Raspberry Pi3のpigpio+音の再生は、そのままではできないっぽい



www.raspberrypi.org


半日ハマりました

pigpioにそんな罠があるなんて…

pigpioとは何ぞや

raspberrypiのGPIO制御用ライブラリです。他ライブラリに比べて
諸々良いらしい!

karaage.hatenadiary.jp

超初心者な私は下記記事を参考に、正月休みにリモコンを実装したのですが、
この際にpigpioを使用してGPIOから赤外線通信回路を制御しています。
qiita.com

本題

そろそろ新しい機能が欲しいなぁと思い、酔った勢いでYahoo防災速報の通知をラズパイでしゃべらせる機能を実装しました。

イイ感じでしゃべってくれるようにはなったのですが…翌朝、シーリングライトをONにするコマンドが全く動作しなくなってました。

ラズパイの再起動後は元通り使えます。
これはアヤシイ…と思い、前日に実装したプログラムを使用したとたん、リモコンが一切動作しなくなります。


ちなみに「動作しなくなる」と書いていますが、コンソール上エラー等は発生しません。
上記Tweetにも記載していますが、スピーカーから雑音が発生するようになります。

pigpioとaplay(wavファイルを再生する標準で搭載されているコマンド)の相性問題かな?と考えVLCコマンドを試してみるも改善せず。

こまったなぁと思って調べてみるとこんな掲示板を発見しました
raspberrypi.stackexchange.com

After starting the daemon by sudo pigpiod, it works fine and outputs the signals to the IR leds. However, anytime after I play a wav file using aplay, the IR signals generated by the Python script gets outputted to audio out instead.

やっぱりスピーカー側に行っちゃってるようです。 まぁあの雑音は明らかにおかしい。

pigpioの仕様?

pigpioの「よくある質問」ページに気になる事が書いてあります
abyz.me.uk

pigpio uses at least one of these peripherals during normal operation (for timing DMA transfers). pigpio will use both peripherals if waves or the hardware PWM function is used.

要はオーディオ用に用意されているPWM,PCMを使っちゃってるよーってことらしいです。

解決方法

一度killallでpigpioを殺してから、-t 0を指定してサービスを起動してやると、一応リモコンは復活しました

※ただしこうすると、今度は音声出力のほうがダメになります。OS再起動が確実です。

※こんな掲示板もありましたが、現状未確認です。USB型サウンドカードって何だろうか。そのままUSBで刺すスピーカー?
github.com