Raspberry Pi(ラズベリーパイ)と組み合わせてカメラモジュールや、音声取り込みに使用するマイク、Raspberry Piに時間を保持しておくことができるようになるRTCモジュールを実際に接続して使用するための手順をご紹介します。

クリエイター最終更新日: 20190501

Raspberry Piとカメラモジュールを接続する

  • このエントリーをはてなブックマークに追加

軽量小型で取り扱いやすいコンピューターボード「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 の設定Raspberry Piのメニューボタンから設定→Raspberry Pi の設定

左上のRaspberry Piのメニューボタンから「設定」>「Raspberry Piの設定」をクリックし、システム設定を開きます。

下図「インターフェイス」タブをクリックし、「カメラ」が「有効」になっていることを確認します。もし「無効」になっていた場合は「有効」を選択し、「OK」ボタンをクリックしてください。

Raspberry Piの設定からインターフェイスタブで「カメラ」を「有効」にするRaspberry Piの設定からインターフェイスタブで「カメラ」を「有効」にする

続いて、上部メニューのアイコンから「LXTerminal」を起動します。

上部メニューの「LXTerminal」をクリックして起動上部メニューの「LXTerminal」をクリックして起動

「LXTerminal」が起動すると黒い画面が開きます。「LXTerminal」はWindowsのコマンドプロンプトのように、テキストでコマンドライン(命令文)を入力してパソコンに様々な動作をさせるためのアプリケーションです。

「LXTerminal」を開いた画面

LXTerminal上で「vcgencmd get_camera」コマンドをキーボードで入力します。

vcgencmd get_camera

このコマンドは先ほど接続したカメラモジュールが正常に接続されているかの確認するためのコマンドとなっています。

「vcgencmd get_camera」コマンドを入力「vcgencmd get_camera」コマンドを入力

コマンドが入力できたら、実行してみましょう。コマンドを実行するには「Enter」キーを押して実行します。

コマンドの次の行に「supported=1 detected=1」と表示されたら、カメラが認識されていることになります。

「supported=1 detected=1」と表示されたらカメラが認識されている「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

「sudo apt-get update」コマンドを実行している様子「sudo apt-get update」コマンドを実行している様子

上記を実行してもカメラが正しく認識されない場合は、カメラモジュールの向きやケーブルがしっかりと挿し込まれているかなど、正しく接続されているかをもう一度確認してみてください。

接続をし直したら、再度「vcgencmd get_camera」コマンドを実行します。

カメラモジュールでの撮影と画像ファイルの保存

カメラモジュールが正常に認識できていることを確認できたら、実際に写真を撮影してみましょう。

写真撮影の操作もコマンドを入力して行います。

LXTerminalで「sudo raspistill -o image.jpg」と入力して実行します。

sudo raspistill -o image.jpg

「sudo raspistill -o image.jpg」コマンドを実行「sudo raspistill -o image.jpg」コマンドを実行

コマンドを実行すると、下図のように撮影画像が画面上に5秒ほど表示されます。

撮影画像が表示された画面撮影画像が表示された画面

上図表示の後、画面左上の左から3つ目のアイコンをクリックするとウィンドウが開きます。「/home/pi」の中に、先ほどコマンドで入力していたものと同じ「image.jpg」という名前の画像ファイルがあります。こちらが先ほど撮影した画像で、初期設定では撮影した画像はここに保存されます。

「/home/pi」内に「image.jpg」ファイルが保存されている「/home/pi」内に「image.jpg」ファイルが保存されている

「sudo raspistill -t 3000 -o image.jpg」コマンドを入力「sudo raspistill -t 3000 -o 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コネクタに差し込んで接続します。

USBマイクを接続するUSBマイクを接続する

上部メニューから「LXTerminal」をクリックして起動し、「arecord -l」コマンドを実行します。

arecord -l

ターミナル上で「arecord -l」を実行して「ハードウェアデバイス CAPTUREのリスト」として、「USB Audio」が表示されるとマイクが認識できているということになります。

「USB Audio」が表示されるとマイクが認識できている「USB Audio」が表示されるとマイクが認識できている

次はマイクを実際に使って音を聞いてみましょう。マイクで話したことを、そのままスピーカーで再生させてみます。

スピーカーをRaspberry Piのイヤホンジャックに接続します。

スピーカーをRaspberry Piに接続スピーカーをRaspberry Piに接続

続いてLXTerminalで「arecord -D plughw:1,0 -f cd | aplay」コマンドを実行します。

arecord -D plughw:1,0 -f cd | aplay

そうすると、マイクで話した音がそのままスピーカーの方で出力されているのがわかります。

「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

「aplay audio.wav」コマンドで音声ファイルを再生「aplay audio.wav」コマンドで音声ファイルを再生

マイクの感度をコマンドで調節することもできます。

LXTerminal上で「alsamixer」と入力してコマンドを実行してみてください。

alsamixer 

キーボードの上下キーで感度調整をして、ESCキーで調整を終了することができます。

「alsamixer」画面。キーボードの上下キーで感度調整ができる「alsamixer」画面。キーボードの上下キーで感度調整ができる

Raspberry PiとRTCモジュールを接続する

RTCモジュールとは

Raspberry Piは電源を切ると、機器内の時刻が電源を切った時点の時刻のまま止まってしまいます。

インターネットに接続されている場合は、NTP(Network Time Protocol)サーバと呼ばれる現在時刻を配信しているサーバと同期を取って時刻を補正するため時刻がずれることはありませんが、単体で使用するような使い方をする場合には、そのままでは時刻がずれてしまいます。

これを解決するために、RTC(Real-Time Clock)モジュールと呼ばれる機器を接続します。RTCは、バッテリーバックアップ等により機器の電源が切られた状態でも内部に時刻を保持する機能を持っており、パソコンを始め多くの機器の内臓時計として用いられています。このRTCをRaspberry Pi上で使用できる形にしたものがRTCモジュールです。

今回は下図のRTCモジュールを使用します。

今回使用するRTCモジュール今回使用するRTCモジュール

RTCモジュールの接続と設定

今回使用するRTCモジュールはRaspberry Pi上のGPIOピン(下図赤枠部分)に接続して使用します。

※GPIOピンについては下記の記事も参考にしてください

“Raspberry Piをローテクで「便利」に使う!”

https://www.pc-koubou.jp/magazine/14369

Raspberry Pi上のGPIOピンRaspberry Pi上のGPIOピン

一番右のピンに合わせてRTCモジュールを挿し込みます。

GPIOピンの一番右に合わせてRTCモジュールを挿し込むGPIOピンの一番右に合わせてRTCモジュールを挿し込む

接続の際は下図のようにしっかり奥まで接続してください。

RTCを接続した図RTCを接続した図

接続ができたらRaspberry Piを起動し、画面左上のRaspberry Piのメニューボタンから「設定」>「Raspberry Piの設定」をクリックし、システム設定を開きます。

「インターフェイス」タブを開き、「I2C」が「有効」になっていることを確認し、有効になっていない場合は有効に切り替えて「OK」をクリックします。

「I2C」が「有効」になっていることを確認「I2C」が「有効」になっていることを確認

続いて必要なパッケージのインストールをします。LXTerminalで「sudo apt-get install i2c-tools」を実行します。

sudo apt-get install i2c-tools 

「sudo apt-get install i2c-tools」を実行「sudo apt-get install i2c-tools」を実行

設定ファイルを開いてファイルを編集するために、今回はRaspberry Pi上で使用できるテキストエディタである「vim」を使います。

まず、「sudo apt-get install vim」とコマンドを実行してvimをインストールします。

「vim」インストール「vim」インストール

コマンドを実行してしばらくすると、「続行しますか?[Y / n]」という表示が出ますので、「y」を入力して「Enter」を押してください。

「続行しますか?[Y / n]」で「y」を入力「続行しますか?[Y / n]」で「y」を入力

インストールが完了したら、設定ファイルを編集するために「sudo vim /etc/modules」をコマンド入力して、モジュール設定ファイルをvimで開きます。

sudo vim /etc/modules

モジュール設定ファイルをvimで開くモジュール設定ファイルをvimで開く

モジュール設定ファイルが開いたら内容を編集していきますが、vimエディタで文字を入力するためには「i」キーを押して「編集モード」に切り替える必要があります。

また文字入力後は,「Esc」キーで「コマンドモード」に以降して、キーボードの「Shift」キーを押しながら、「z」キーを2回押すことで、ファイルの保存と、vimエディタを終了することができます。このようにvimエディタは「コマンドモード」と「編集モード」を切り替えながら操作を行う形になっています。

vimではキーボード操作により「コマンドモード」と「編集モード」を切り替えて使用するvimではキーボード操作により「コマンドモード」と「編集モード」を切り替えて使用する

では実際にvimエディタでモジュール設定ファイルを編集して保存してみましょう。

まず「i」キーを押して「編集モード」に移行した後、i2c-devの下に「rtc-ds1307」と入力します。

※下図黄枠部分に「挿入」と表示されている状態が、「編集モード」を示しています。

「編集モード」でi2c-devの下に「rtc-ds1307」と入力「編集モード」でi2c-devの下に「rtc-ds1307」と入力

次にファイルの保存です。「編集モード」から「Esc」キーを押して「コマンドモード」に切り替えます。

そのまま「Shift」キーを押しながら「z」キーボードを2回押すとvimエディタが閉じられます。

これでファイルの保存とvimエディタを閉じることができました。

続いてLXTerminalで「sudo i2cdetect -y 1」を実行して「68」と表示されていれば、RTCモジュールが認識されているということになります。

sudo i2cdetect -y 1

上図のように「68」と表示されていれば、RTCモジュールが認識されている上図のように「68」と表示されていれば、RTCモジュールが認識されている

「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つまとめてのコマンド入力後の画面3つまとめてのコマンド入力後の画面

3つのコマンドを入力したら、「exit」と入力します。

exit

LXTerminalで、再度「sudo i2cdetect -y 1」を実行して先ほどの「68」が「UU」に表示に変更されていれば、システムで利用できるようになったことを示しています。

上図赤枠部分が「UU」になっていればRTCモジュールがシステムで利用できる状態上図赤枠部分が「UU」になっていればRTCモジュールがシステムで利用できる状態

上図のような表示が確認できたら「sudo hwclock -w」コマンドを実行して、RTCに現在時刻(OSの時刻)を記録します。

sudo hwclock -w

RTCに現在時刻を書き込むRTCに現在時刻を書き込む

時刻表示の確認

続いてLXTerminalで「sudo hwclock -r」を実行してRTCに書き込まれている時刻を確認してみます。

sudo hwclock -r

RTCに書き込まれている時刻を確認RTCに書き込まれている時刻を確認

正しく動作していれば上図のように現在の日付と時刻が表示されます。

最後に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

「rc.local」ファイルをvimで編集「rc.local」ファイルをvimで編集

上図のようにファイルを編集できたら「esc」キーでコマンドモードに切り替えた後、「Shift」キーを押しながら「z」キーボードを2回押し、vimエディタを閉じます。

これで、電源を切ってもRaspberry Pi内部に時刻が保持されるようになりました。

画像や音声の認識などでRaspberry Piが活用されるケースが増えている

ここまでRaspberry Piといくつかの機器を接続して使用するための設定を見てきましたが、

小型の機器を使いたいけれど他のマイコンボードでは力不足になりそうな場面、具体的には画像や音声の認識などで、Raspberry Piが活用されるケースが増えています。

今回使用したようなカメラモジュールやマイクを用いた画像認識や音声認識についても、別の機会にご紹介したいと思います。

ライタープロフィール 合同会社 4D Pocket
石郷祐介

大学卒業後、公設研究機関勤務を経て、「情報科学芸術大学院大学[IAMAS]」に入学。
専門学校講師を経て、企業の研究開発をコンセプトから開発まで支援する「合同会社4D Pocket」代表、エンジニアを養成するフリースクール「一般社団法人HOPTER TECH SCHOOL」代表理事、「名古屋文理大学」及び「名古屋造形大学」非常勤講師。

記事を
シェア