LoginSignup
2

More than 3 years have passed since last update.

Ubuntu MATEを載せたRaspberry PiからデジタルマイクSPH0645LM4HとI2S通信する。

Last updated at Posted at 2019-07-31

RaspbianからI2Sを行う方法については記事が見つかりますが、Ubuntu MATEを使ったものは見当たらなかったのでまとめました。

目標

Raspberry Pi 3 model BにUbuntu MATEを入れ、デジタルマイクSPH0645LM4HとI2S通信する。

インストール手順

  • 公式ページ(https://ubuntu-mate.org/download/ )からUbuntu MATEをダウンロードし、Raspberry Pi 3 model Bに書き込む。今回使用したのは、ubuntu-mate-18.04.2-beta1-desktop-armhf+raspi-ext4.img。

  • /boot/config.txtに以下を追加で書き込む。

dtparam=i2s=on
  • /etc/modulesに以下を追加で書き込む。
snd-bcm2835
  • リブートする。
sudo reboot
  • snd_bcm2835などのモジュールがロードされていることを確認。
lsmod | grep snd # snd_bcm2835 などが表示されるはず。
  • linux imageのアップデートおよびlinux headerのインストール。
sudo apt update
sudo apt install linux-image-raspi2 # 今回インストールしたバージョン:linux-image-raspi2/bionic-updates,bionic-security,now 4.15.0.1041.39 armhf
sudo apt install linux-headers-raspi2 # 今回インストールしたバージョン:linux-headers-raspi2/bionic-updates,bionic-security,now 4.15.0.1041.39 armhf
  • リブートする。
sudo reboot
  • i2sをコンパイルする準備ができていることを確認。
sudo mount -t debugfs debugs /sys/kernel/debug # mount: debugs already mounted or mount point busy. などと表示されるはず。
  • カーネルモジュールをmakeするためのパッケージをインストール。
git clone https://github.com/PaulCreaser/rpi-i2s-audio
cd rpi-i2s-audio
  • カーネルモジュールをmakeして作成し、カーネル本体にロードする。
sudo apt install make gcc git bc libncurses5-dev bison flex libssl-dev
make -C /lib/modules/$(uname -r )/build M=$(pwd) modules
sudo insmod my_loader.ko
  • audioグループに自分のユーザを追加する。
sudo adduser $USER audio
  • ユーザの追加を反映させるため、ログアウトしてログインする。

  • Raspberry Piをブートするたびに、今回作成したカーネルモジュールを自動でロードできるようにする。

cd rpi-i2s-audio
sudo cp my_loader.ko /lib/modules/$(uname -r)
echo 'my_loader' | sudo tee --append /etc/modules > /dev/null # 先ほど書いたsnd-bcm2835と改行されて書かれているか確認する。
sudo depmod -a
sudo modprobe my_loader
  • リブートして設定完了。
sudo reboot
  • SPH0645LM4HとRaspberry Piを配線でつなぐ。ピン接続は以下のようにする。
SPH0645LM4H Raspberry Pi
3V pin1 (3.3V)
GND pin6 (GND)
BCLK pin12 (PCM_CLK)
DOUT pin38 (PCM_DIN)
LRCL pin35 (PCM_FS)
SEL Not connected

テスト

・マイクデバイスの一覧を表示し、「snd_rpi_simple_card」があることを確認。

arecord -l

・arecordというコマンドから音声を保存する。ノートPCなどで再生できればテスト成功!

arecord -D plughw:1 -c2 -r 48000 -f S32_LE -t wav -V stereo -v file_stereo.wav

・pyaudioからも読める。

import pyaudio
p = pyaudio.PyAudio()
for index in range(p.get_device_count()):
    print(p.get_device_info_by_index(index)['name'])
    print('')

参考

(これらのサイトの環境はRaspbianだが自分の環境はUbuntu MATEなので、細かい違いがある)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2