軽量小型で取り扱いやすいコンピューターボード「Raspberry Pi(ラズベリーパイ)」は、外部機器と連携して様々な機能に用いられることが特徴の一つです。 今回はRaspberry Piと組み合わせて使用されることの多いカメラモジュールや、音声取り込みに使用するマイク、Raspberry Piに時間を保持しておくことができるようになるRTCモジュールを実際に接続して使用するための手順をご紹介します。
Raspberry Pi 3 Model B+で無線LANネットワークに接続する
外部機器との接続にあたり、ドライバをダウンロードする必要があるため、まずRaspberry Pi をインターネットに接続します。
今回使用する「Raspberry Pi 3 Model B+」には標準で無線LAN接続機能が搭載されています。画面右上のネットワークアイコンが初期状態では下図のようになっています。
上図のアイコンをクリックすると、近くにあるアクセスポイントの一覧が表示されますので、接続するアクセスポイント名をクリックしてパスワードを入力します。
アクセスポイントへの接続が完了すると、ネットワークアイコンの表示が下図のように変わります。
これでRaspberry Piのネットワーク接続が完了しました。
Raspberry Piとカメラモジュールを接続する
カメラモジュールの接続方法
Raspberry Pi上の下図赤枠の部分がカメラモジュールを接続する部分です。
カメラモジュール本体は下図のようにカメラレンズが付いた基盤状の部分から平たい接続ケーブルが伸びた形になっています。このケーブルの端を上図の接続箇所に差し込みます。
上図の向きのままRaspberry Piに接続します。
接続部分の端を持って引き上げると隙間ができるので、その隙間にカメラモジュールのケーブルを差し込みます。
カメラモジュールのケーブルを挿し込んだら先ほど引き上げた接続部分の白い部品を元に戻します。この時カメラモジュールが抜けてしまうことがあるのでしっかりカメラモジュールが差し込まれていることを確認してください。
カメラモジュールの設定
カメラモジュールの接続ができたら、Raspberry Piの設定からカメラモジュールを読み込ませるための設定を確認しておきましょう。
左上のRaspberry Piのメニューボタンから「設定」>「Raspberry Piの設定」をクリックし、システム設定を開きます。
下図「インターフェイス」タブをクリックし、「カメラ」が「有効」になっていることを確認します。もし「無効」になっていた場合は「有効」を選択し、「OK」ボタンをクリックしてください。
続いて、上部メニューのアイコンから「LXTerminal」を起動します。
「LXTerminal」が起動すると黒い画面が開きます。「LXTerminal」はWindowsのコマンドプロンプトのように、テキストでコマンドライン(命令文)を入力してパソコンに様々な動作をさせるためのアプリケーションです。
LXTerminal上で「vcgencmd get_camera」コマンドをキーボードで入力します。
vcgencmd get_camera
このコマンドは先ほど接続したカメラモジュールが正常に接続されているかの確認するためのコマンドとなっています。
コマンドが入力できたら、実行してみましょう。コマンドを実行するには「Enter」キーを押して実行します。
コマンドの次の行に「supported=1 detected=1」と表示されたら、カメラが認識されていることになります。
先ほどのコマンドを実行して「supported=1 detected=0」など違う表示が出た場合は、正しくカメラモジュールが認識されていないということになります。
正しくカメラモジュールが認識されていないと思われる場合は、Raspberry Pi上のドライバ(カメラモジュールを動作させるためのプログラム)の一覧を最新のものにするため、「sudo apt-get update」コマンドを実行します。
sudo apt-get update
「sudo apt-get update」コマンドを実行するとパッケージ(ソフトウェアをインストールするためのプログラムのまとまり)の一覧が下図のように表示されます。
一覧の表示が終わると、再度コマンドを入力可能な状態になりますので、今度は「sudo apt-get upgrade」コマンドを実行します。
sudo apt-get upgrade
上記を実行してもカメラが正しく認識されない場合は、カメラモジュールの向きやケーブルがしっかりと挿し込まれているかなど、正しく接続されているかをもう一度確認してみてください。
接続をし直したら、再度「vcgencmd get_camera」コマンドを実行します。
カメラモジュールでの撮影と画像ファイルの保存
カメラモジュールが正常に認識できていることを確認できたら、実際に写真を撮影してみましょう。
写真撮影の操作もコマンドを入力して行います。
LXTerminalで「sudo raspistill -o image.jpg」と入力して実行します。
sudo raspistill -o image.jpg
コマンドを実行すると、下図のように撮影画像が画面上に5秒ほど表示されます。
上図表示の後、画面左上の左から3つ目のアイコンをクリックするとウィンドウが開きます。「/home/pi」の中に、先ほどコマンドで入力していたものと同じ「image.jpg」という名前の画像ファイルがあります。こちらが先ほど撮影した画像で、初期設定では撮影した画像はここに保存されます。
続いてターミナルで「sudo raspistill -t 3000 -o image.jpg」コマンドを入力して実行してみてください。
sudo raspistill -t 3000 -o image.jpg
先ほどとコマンドが違うのが分かると思いますが、このコマンドは「3秒後に静止画を撮影」するコマンドになります。
今回は「-t」というパラメーター(設定値)を書き換えてみましたが、撮影および撮影画像の用途により、さまざまなパラメーターを指定することが可能です。
撮影時の「raspistill」コマンドのパラメーターについては別の機会にもご紹介したいと思います。
Raspberry Piとマイクを使用した音声取り込み
USBマイクの接続と入出力の確認
Raspberry Piで音声を取り込むために、まずマイクを接続します。
USBマイクを準備し、USBコネクタに差し込んで接続します。
上部メニューから「LXTerminal」をクリックして起動し、「arecord -l」コマンドを実行します。
arecord -l
ターミナル上で「arecord -l」を実行して「ハードウェアデバイス CAPTUREのリスト」として、「USB Audio」が表示されるとマイクが認識できているということになります。
次はマイクを実際に使って音を聞いてみましょう。マイクで話したことを、そのままスピーカーで再生させてみます。
スピーカーをRaspberry Piのイヤホンジャックに接続します。
続いてLXTerminalで「arecord -D plughw:1,0 -f cd | aplay」コマンドを実行します。
arecord -D plughw:1,0 -f cd | aplay
そうすると、マイクで話した音がそのままスピーカーの方で出力されているのがわかります。
「ctrl」+ 「c」 を同時に押すとコマンドが停止し、音声の出力も止まります。
録音と音声データの保存
先ほどはマイクで話した音をそのままスピーカーから出力していましたが、次はマイクで話した音を録音し、音声データとして保存してみます。
LXTerminalで「arecord -D plughw:1,0 -f cd audio.wav」コマンドを実行します。
arecord -D plughw:1,0 -f cd audio.wav
コマンドを実行すると下図のように「録音中」と表示されるので、マイクに向かって何か話してみましょう。
上記「arecord -D plughw:1,0 -f cd audio.wav」コマンドの「-f cd」はサンプリングレート44100 Hz(CD音質)で録音を行い、「-f dat」にするとサンプリングレート48000 Hzで録音することができます。
録音を止める場合は先ほどと同様にキーボードの「Ctrl」+ 「C」を同時に押して録音を止めます。
録音を止めたら、録音した音声データを再生してみます。
スピーカーを接続していない場合はスピーカーをRaspberry Piに接続し、LXTerminalで「aplay audio.wav」と入力して実行してみてください。先ほど録音した音声が聞こえるはずです。
aplay audio.wav
マイクの感度をコマンドで調節することもできます。
LXTerminal上で「alsamixer」と入力してコマンドを実行してみてください。
alsamixer
キーボードの上下キーで感度調整をして、ESCキーで調整を終了することができます。
Raspberry PiとRTCモジュールを接続する
RTCモジュールとは
Raspberry Piは電源を切ると、機器内の時刻が電源を切った時点の時刻のまま止まってしまいます。
インターネットに接続されている場合は、NTP(Network Time Protocol)サーバと呼ばれる現在時刻を配信しているサーバと同期を取って時刻を補正するため時刻がずれることはありませんが、単体で使用するような使い方をする場合には、そのままでは時刻がずれてしまいます。
これを解決するために、RTC(Real-Time Clock)モジュールと呼ばれる機器を接続します。RTCは、バッテリーバックアップ等により機器の電源が切られた状態でも内部に時刻を保持する機能を持っており、パソコンを始め多くの機器の内臓時計として用いられています。このRTCをRaspberry Pi上で使用できる形にしたものがRTCモジュールです。
今回は下図のRTCモジュールを使用します。
RTCモジュールの接続と設定
今回使用するRTCモジュールはRaspberry Pi上のGPIOピン(下図赤枠部分)に接続して使用します。
※GPIOピンについては下記の記事も参考にしてください
“Raspberry Piをローテクで「便利」に使う!”
https://www.pc-koubou.jp/magazine/14369
一番右のピンに合わせてRTCモジュールを挿し込みます。
接続の際は下図のようにしっかり奥まで接続してください。
接続ができたらRaspberry Piを起動し、画面左上のRaspberry Piのメニューボタンから「設定」>「Raspberry Piの設定」をクリックし、システム設定を開きます。
「インターフェイス」タブを開き、「I2C」が「有効」になっていることを確認し、有効になっていない場合は有効に切り替えて「OK」をクリックします。
続いて必要なパッケージのインストールをします。LXTerminalで「sudo apt-get install i2c-tools」を実行します。
sudo apt-get install i2c-tools
設定ファイルを開いてファイルを編集するために、今回はRaspberry Pi上で使用できるテキストエディタである「vim」を使います。
まず、「sudo apt-get install vim」とコマンドを実行してvimをインストールします。
コマンドを実行してしばらくすると、「続行しますか?[Y / n]」という表示が出ますので、「y」を入力して「Enter」を押してください。
インストールが完了したら、設定ファイルを編集するために「sudo vim /etc/modules」をコマンド入力して、モジュール設定ファイルをvimで開きます。
sudo vim /etc/modules
モジュール設定ファイルが開いたら内容を編集していきますが、vimエディタで文字を入力するためには「i」キーを押して「編集モード」に切り替える必要があります。
また文字入力後は,「Esc」キーで「コマンドモード」に以降して、キーボードの「Shift」キーを押しながら、「z」キーを2回押すことで、ファイルの保存と、vimエディタを終了することができます。このようにvimエディタは「コマンドモード」と「編集モード」を切り替えながら操作を行う形になっています。
では実際にvimエディタでモジュール設定ファイルを編集して保存してみましょう。
まず「i」キーを押して「編集モード」に移行した後、i2c-devの下に「rtc-ds1307」と入力します。
※下図黄枠部分に「挿入」と表示されている状態が、「編集モード」を示しています。
次にファイルの保存です。「編集モード」から「Esc」キーを押して「コマンドモード」に切り替えます。
そのまま「Shift」キーを押しながら「z」キーボードを2回押すとvimエディタが閉じられます。
これでファイルの保存とvimエディタを閉じることができました。
続いてLXTerminalで「sudo i2cdetect -y 1」を実行して「68」と表示されていれば、RTCモジュールが認識されているということになります。
sudo i2cdetect -y 1
「sudo su」と入力して実行、その後に「modprobe rtc-ds1307」と入力してまた実行、最後に「echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device」を入力して実行してください。
sudo su
modprobe rtc-ds130
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
この3つのコマンドを入力画面は以下になります。
3つのコマンドを入力したら、「exit」と入力します。
exit
LXTerminalで、再度「sudo i2cdetect -y 1」を実行して先ほどの「68」が「UU」に表示に変更されていれば、システムで利用できるようになったことを示しています。
上図のような表示が確認できたら「sudo hwclock -w」コマンドを実行して、RTCに現在時刻(OSの時刻)を記録します。
sudo hwclock -w
時刻表示の確認
続いてLXTerminalで「sudo hwclock -r」を実行してRTCに書き込まれている時刻を確認してみます。
sudo hwclock -r
正しく動作していれば上図のように現在の日付と時刻が表示されます。
最後にLXTerminalから「sudo vim /etc/rc.local」を実行します。
sudo vim /etc/rc.local
vimで「rc.local」ファイルが開くので「i」キーを押して「編集モード」に切り替えた後、「exit 0」の前に、下記の内容を書き込んで保存します。
このコマンドはRaspberry Pi起動時にRTCの時刻をOSに適用させるコマンドです。
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sleep 1
hwclock -s
上図のようにファイルを編集できたら「esc」キーでコマンドモードに切り替えた後、「Shift」キーを押しながら「z」キーボードを2回押し、vimエディタを閉じます。
これで、電源を切ってもRaspberry Pi内部に時刻が保持されるようになりました。
画像や音声の認識などでRaspberry Piが活用されるケースが増えている
ここまでRaspberry Piといくつかの機器を接続して使用するための設定を見てきましたが、
小型の機器を使いたいけれど他のマイコンボードでは力不足になりそうな場面、具体的には画像や音声の認識などで、Raspberry Piが活用されるケースが増えています。
今回使用したようなカメラモジュールやマイクを用いた画像認識や音声認識についても、別の機会にご紹介したいと思います。
石郷祐介
大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。