コラム
2016年10月12日11:38
2016年09月20日16:35
2016年09月12日15:57
2016年09月03日09:55
2016年08月27日14:45

Raspberry Piは小型で消費電力も小さいため、センサーや様々なデバイスを接続して活用する「IoT」に適しています。GPIOポートにセンサーを接続してセンサーの値を読み取ったり、モーターを接続して動かすのはそれほど難しくありません。しかしこれをインターネットからコントロールしようとすると、様々な難題を乗り越えなくてはなりません。
インターネットからコントロールするためには…
・サーバー側のプログラムはどうするか?
・ファイアウォールの設定は?
・セキュリティは?
・スマートフォンのアプリはどうするか?
そこで活用するのがIoTサービスです。今回紹介する「Blynk」は、これらの面倒なことを全て引き受けてくれる、とても便利なサービスです。しかも無料で使用できます。(アプリ内課金もあります)
続きを読む

11月26日にRaspberry Piの新機種「Raspberry Pi Zero」が発表されました。縦横 65mm x 30mm、高さ5mmという細長いカードサイズで、多くのインターフェースが小型化&省略されています。そして何より驚くのが、イギリスでの販売価格が5ドルという点です。
主なスペック
- BCM2835 クロック周波数 1GHz (B+は700MHz)
- コア数 1個 (Pi 2は4個、B+は1個)
- メモリ 512MB (Pi 2は1GB、B+は512MB)
インターフェース
- 電源 micro USB (他製品と同じ)
- 映像出力 mini-HDMI (従来はHDMI)
- USBポート micro USB (従来はUSB Aタイプ)
- メモリスロット micro SD
- LANポート なし
- オーディオ / CSI / DSI ポートなし
- GPIOヘッダーピン なし(追加可能)
実際に5ドルでは済まない場合も…
今までのRaspberry PiであればPC用のキーボードやディスプレイがそのまま流用できたため、本体だけ買ってもなんとか使用することができました。しかしPi Zeroではインターフェースが異なるため、変換ケーブル等を別途買わなければいけません。
<ディスプレイとの接続>
Pi Zeroはmini HDMIのため、ディスプレイのケーブルがHDMIしか無い場合は、mini HDMI→HDMI に変換するケーブルやアダプタが別途必要です。
<キーボード・マウスとの接続>
Pi ZeroのUSBはmicro USBのため、キーボードやマウスのUSBコネクタ(タイプA)は接続できません。そのためスマートフォンなどで使われるUSB OTGアダプタが別途必要です。またA+と同じくUSBのポートは1つしかないため、2つ以上接続する場合はUSBハブも必要です。
<ネットワークの接続>
Pi ZeroにはLANのインターフェースがありません。Pi Zeroをネットワークに接続するには、USBのWi-Fiアダプタを使用するか、USBの有線LANアダプタを使用することになります。
このようにPi 2やB+と同じような使い方をするとなると、本体のほかにmini HDMI to HDMI変換アダプタ、USB OTGアダプタ、USBハブ、LANアダプタが必要になり、これらを新たに購入するくらいならB+を買った方が安く済むかもしれません。しかしシステムに組み込んだり、IoTデバイスとして活用するなど最小限のインターフェースだけを使用する目的であれば、とてもコストパフォーマンスが良い製品です。
GPIOのヘッダーピンがない
Pi 2やB+では40pinのヘッダーピンがありましたが、Pi Zeroにはありません。無くなったのではなく部品が取り付けられていないだけで、基板上には取り付け用の穴が開いています。ヘッダーピンを買って来て自分で半田付けすれば使用することができます。
ヘッダーピンが無くなったことで、逆に自分の好きな形状のものが取り付けられるメリットがあります。ピンではなくソケット型にすれば、ジャンパーワイヤーの接続も簡単です。また組み込み用の機器ならば、基板の裏側から挿す形にすればメンテナンス性も良くなります。とにかく薄さにこだわるのなら、基板に直接配線を半田付けするという手もありますね。
Raspberry Pi Zeroの消費電力はどのくらい?

本体のみ・周辺機器なしの状態で、約 0.41 Wでした。その後長時間そのままにしておいたところ、0.39 Wまで下がりました。

(1) HDMIの追加 → 0.73W
(2) +USBハブの追加 → 1.18 W
(3) +Keyboardアダプタ追加 → 1.34 W
(4) +有線LANの追加 → 2.17 W
Pi ZeroはUSBポートが1つしかありませんが、一点注意しなければいけないところがあります。B+やPi 2以外のRaspberry Piでは、システムが起動した状態でUSBの抜き差しをするとハングアップすることがありました。Pi Zeroでも同じようにハングアップします。起動した状態でUSBを抜き差しする場合は、先にUSBハブを接続してから電源を入れたり、使用電力が大きい場合はセルフパワー式のUSBハブを使用することをおすすめします。
現在Raspberry Pi Zeroはまだ日本では購入することはできませんが、他のRaspberry Piと互換性があり開発もしやすく、サイズが非常に小さく、消費電力もとても小さいので、機器に組み込んで使うには最適です。

Raspberry Pi 2では電源用のPWR LEDも、自由に制御することができます。
まずは前回のおさらいから。
続きを読む
Raspberry Pi 2が登場して1ヶ月が経ちました。Raspberry Pi 1を使用していて、Raspberry Pi 2を購入された方も多いと思いますが、Pi 1で使用していたSDカードをPi 2に挿しても起動しません。その前にPi 1の方で、SDカードにインストールされているシステムのアップデートをする必要があります。
念のためSDカードは事前にバックアップしておくことをおすすめします。
アップデートする方法
NOOBSを使用している場合はさらにもう一手間必要です。
メモリカードリーダーにSDカードを挿して、パソコンで開きます。BOOTとRECOVERYという2つ領域がマウントされます。このRECOVERYという領域にNOOBSの起動ファイルが入ってるので、この中のファイルを入れ替えます。
次に、http://www.raspberrypi.org/downloads/ から、NOOBS LITEをダウンロードします。NOOBSとNOOBS LITEの違いは、NOOBS LITEはインターネット経由でOSをインストールする仕組みのため、ファイルサイズが小さくて済みます。ダウンロードしたら解凍します。

※クリックで拡大
NOOBSの recovery.cmdline以外 のファイル(上記画像参照)を、SDカードに上書きコピーします。このときrecovery.cmdlineはコピーしないように注意してください。コピーが終わったらアンマウントしてメモリカードリーダーから抜き、Pi 2に挿せば起動するはずです。
新しいRaspbianでは1-wireやLIRCなどの設定方法が変わったため、それらを使う場合は別途設定が必要ですが、ひとまずこれで、Pi 1のSDカードもPi 1、Pi 2でもどちらでも起動できるようになりました。
念のためSDカードは事前にバックアップしておくことをおすすめします。
アップデートする方法
$ sudo apt-get update
$ sudo apt-get upgrade
NOOBSを使用している場合はさらにもう一手間必要です。
メモリカードリーダーにSDカードを挿して、パソコンで開きます。BOOTとRECOVERYという2つ領域がマウントされます。このRECOVERYという領域にNOOBSの起動ファイルが入ってるので、この中のファイルを入れ替えます。
次に、http://www.raspberrypi.org/downloads/ から、NOOBS LITEをダウンロードします。NOOBSとNOOBS LITEの違いは、NOOBS LITEはインターネット経由でOSをインストールする仕組みのため、ファイルサイズが小さくて済みます。ダウンロードしたら解凍します。

※クリックで拡大
NOOBSの recovery.cmdline以外 のファイル(上記画像参照)を、SDカードに上書きコピーします。このときrecovery.cmdlineはコピーしないように注意してください。コピーが終わったらアンマウントしてメモリカードリーダーから抜き、Pi 2に挿せば起動するはずです。
新しいRaspbianでは1-wireやLIRCなどの設定方法が変わったため、それらを使う場合は別途設定が必要ですが、ひとまずこれで、Pi 1のSDカードもPi 1、Pi 2でもどちらでも起動できるようになりました。
Raspberry Piには電源ボタンがありません。起動するにはMicro USBの電源コードを挿すだけでよいため、電源ボタンがなくても特に不自由することはありません。しかし電源を切る際、いきなりMicro USBの電源コードを抜くと、メモリカードのデータが壊れてしまう可能性があります。そのため電源を切る際は、シャットダウンコマンドを実行しなくてはなりません。
そこで今回は、電源を切るためのボタンを作ってみます。電源ボタンは写真のようにGPIOポートに接続しました。DOS/Vパソコン用のリセットボタンを使ってもかまいません。
ボタン入力はGPIO22を使用し、ボタンが押されたらGPIO22に3.3Vを加えるようにします。
【接続例】
[PIN15] GPIO22 ---- ボタン ---- [PIN17] +3.3V
続きを読む

ボタン入力はGPIO22を使用し、ボタンが押されたらGPIO22に3.3Vを加えるようにします。
【接続例】
[PIN15] GPIO22 ---- ボタン ---- [PIN17] +3.3V
続きを読む

今回はUSBポートの最大出力を1.2Aに増やす実験を行います。
【設定方法】その1
/boot/config.txt に以下の2行を追加してRaspberry Piを再起動する
max_usb_current=1
safe_mode_gpio=4
【設定方法】その2
GPIO 38にHIGHを出力する
echo 38 > /sys/class/gpio/export
#sleep 1 ←Permission deniedになる場合はコメントを外す
echo out > /sys/class/gpio/gpio38/direction
echo 1 > /sys/class/gpio/gpio38/value
echo 38 > /sys/class/gpio/unexport
どちらの方法でもかまいません。これにより600mAでかかっていたリミッターの値が、1.2Aまで上がります。2つめの方法ではGPIO 38にHIGHを出力していますが、GPIO 38がリミッターの制御に使われている特殊なポートようです。ちなみにGPIO 38にLOWを出力するとリミッターは元に戻ります。
【実験結果】設定前(max 600mA)
4.85V - 0.00A 未接続時
↓
4.51V - 0.28A
↓
4.20V - 0.64A
↓
これ以上出力不可(PWR点滅)
【実験結果】設定後(max 1.2A)
4.14V - 0.70A
↓
3.95V - 0.90A
↓
3.68V - 1.20A
↓
3.57V - 1.30A
↓
これ以上出力不可(PWR点滅)
このように、設定を変更しただけでUSBポートに出力できる電流値の上限を増やすことができました。もちろんRaspberry Piの電源には、本体+USBポートの分の電流が流れますので、より大きな出力ができるACアダプタが必要になります。今回の実験ではiPad用のACアダプタを使用しました。

もうすぐクリスマスですね。街のあちらこちらでイルミネーションが輝いていて、自宅でもクリスマスツリーの飾り付けをするという方も多いでしょう。Raspberry Piを持っているのでしたら、Raspberry Piもクリスマスの飾り付けに加えてしまうのはいかがでしょうか?
今回はRaspberry PiでLEDキャンドルを作ってみたいと思います。LEDを単に光らせるだけではなく、炎が揺らめいているように光らせます。

用意するものはおなじみのLチカセットと、ティッシュペーパーです。ティッシュペーパーは小さくちぎっておきます。

ちぎったティッシュペーパーをLEDに巻き付けます。こうすることで光がティッシュペーパーに反射して、指向性の強いLEDの光が柔らかくなります。

次にLEDをキャンドルホルダーで囲います。このキャンドルホルダーはメモ用紙を切って、テープで止めただけものです。

これでハードウェア部分は完成です。続いてソフトウェア部分を準備します。
GPIOポートの出力はデジタルですから、LEDをオンさせるかオフさせるしかできません。このままでは単にLEDが点灯しているだけで、キャンドルらしくありません。しかし目に見えない速さでオンとオフを繰り返すと、目の錯覚で明るくなったり暗くなったように見え、明るさに強弱をつけることができます。このように高速でオンとオフを繰り返す方法をPWMと言います。
今回はWiringPiのSoftware PWM Libraryを使って、LEDの明るさを調整します。コラムでは詳しい説明は割愛させていただきますが、書籍『Raspberry Piで遊ぼう!』では使用例などを解説していますので、興味がある方は見てみてください。まずはWiringPiをインストールします。
次にプログラムを用意します。(yuragi.c)
炎の揺らめきは「1/fゆらぎ」で表現しています。値を変えると揺らめき方も変わってきますので、キャンドルっぽく見えるように値を調整してみるとよいでしょう。このプログラムはC言語なので、実行する前にコンパイルします。
無事コンパイルが終わったら、部屋を暗くしてプログラムを実行してみましょう。
なんとなくキャンドルっぽくなりましたね。赤いLEDなのでちょっと違和感はありますが、オレンジ色のLEDにすればもっとキャンドルっぽくなるでしょう。
今回はRaspberry PiでLEDキャンドルを作ってみたいと思います。LEDを単に光らせるだけではなく、炎が揺らめいているように光らせます。

用意するものはおなじみのLチカセットと、ティッシュペーパーです。ティッシュペーパーは小さくちぎっておきます。

ちぎったティッシュペーパーをLEDに巻き付けます。こうすることで光がティッシュペーパーに反射して、指向性の強いLEDの光が柔らかくなります。

次にLEDをキャンドルホルダーで囲います。このキャンドルホルダーはメモ用紙を切って、テープで止めただけものです。

これでハードウェア部分は完成です。続いてソフトウェア部分を準備します。
GPIOポートの出力はデジタルですから、LEDをオンさせるかオフさせるしかできません。このままでは単にLEDが点灯しているだけで、キャンドルらしくありません。しかし目に見えない速さでオンとオフを繰り返すと、目の錯覚で明るくなったり暗くなったように見え、明るさに強弱をつけることができます。このように高速でオンとオフを繰り返す方法をPWMと言います。
今回はWiringPiのSoftware PWM Libraryを使って、LEDの明るさを調整します。コラムでは詳しい説明は割愛させていただきますが、書籍『Raspberry Piで遊ぼう!』では使用例などを解説していますので、興味がある方は見てみてください。まずはWiringPiをインストールします。
$ sudo apt-get install libi2c-dev
$ sudo apt-get install git-core
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build
次にプログラムを用意します。(yuragi.c)
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define LED_PORT 4 /* GPIO4 */
#define RANGE 100
int main (void) {
int i, pw;
float ff = 0.5;
//初期化
if(wiringPiSetupGpio() == -1) return 1;
softPwmCreate (LED_PORT, 0, RANGE);
while (1) {
if(ff < 0.5) {
ff = ff + 2 * ff * ff;
} else {
ff = ff - 2 * (1 - ff) * (1 - ff);
}
if(ff < 0.05) {
ff = (float) rand() / RAND_MAX / 2;
}
if(ff > 0.95) {
ff = (float) rand() / RAND_MAX / 2 + 0.5;
}
pw = ff * RANGE;
softPwmWrite (LED_PORT, pw);
delay(80);
}
return 0;
}
炎の揺らめきは「1/fゆらぎ」で表現しています。値を変えると揺らめき方も変わってきますので、キャンドルっぽく見えるように値を調整してみるとよいでしょう。このプログラムはC言語なので、実行する前にコンパイルします。
$ cc -o yuragi yuragi.c -lwiringPi
無事コンパイルが終わったら、部屋を暗くしてプログラムを実行してみましょう。
$ sudo ./yuragi
なんとなくキャンドルっぽくなりましたね。赤いLEDなのでちょっと違和感はありますが、オレンジ色のLEDにすればもっとキャンドルっぽくなるでしょう。
Raspberry PiのGPIOポートには、シリアルポートのほか、I2CやSPIといった電子デバイスと通信するための機能を持ったインターフェースがあります。そのインターフェースに対応したセンサーを取り付ければ、Raspberry Piからセンサーの値を読み取ることができます。
今回実験するのは1-wire接続のデジタル温度センサー DS18B20 です。1-wireとは1本の信号線だけで、低速なデータの送受信と電力供給ができる規格です。バス接続のため複数のデバイスを接続することもできます。
Raspbian OSでは1-wire用のモジュールをロードするだけで1-wireデバイスにも対応し、ファイルを読み書きする感覚で使用できるので、とても簡単です。今回はDS18B20を以下のようにRaspberry Piに接続します。DS18B20の2番ピンDQがデータ用のピンなので、これをGPIO4に接続します。
接続例

まずはじめにRaspberry Piを最新のバージョンにアップデートしておきましょう。
アップデートが終わったら、1-wireデバイス用のモジュールを起動時に読み込むように設定します。スーパーユーザーで /etc/modules に以下の2行を追加します。
続いて /boot/config.txt の最後に以下の行を追加します。gpiopin=4はGPIO 4という意味です。
/etc/modules と /boot/config.txt の編集が終わったら再起動します。
これで準備は完了です。温度センサーが認識されるかどうか確認します。まだGPIOポートに接続していない場合は接続してください。認識されると/sys/bus/w1/devices/の中に仮想のディレクトリが作成されます。lsコマンドでみると、28-000…ではじまるフォルダ(シンボリックリンク)が出てきました。
これが接続した温度センサーのデバイスIDです。複数接続している場合は、複数表示されます。デバイスIDは個々のデバイス毎に異なりますので、以下の説明は適宜ご自身の温度センサーのデバイスIDに読み替えてください。
温度センサーの値を取得するには、そのデバイスのフォルダの w1_slave というファイルを読み込みます。
色々な値が出てきますが、t=の値が温度です。1000倍された値のため、この例の場合は 24.750度 ということになります。このように全くプログラムを使用せず、ファイルを読むだけで簡単に温度センサーの値を読み取ることができました。
最後に簡単なスクリプトを作って、温度だけをわかりやすく表示させるようにしてみたいと思います。以下のサンプルスクリプトではPerlで t= の部分の値を抜き出して、1000で割った値を出力しています。(DEVID=の部分はご自身のデバイスIDにしてください)
サンプルプログラム ds18b20.sh
パーミッションを設定して実行すれば、温度だけが表示されて見やすくなりました。
Raspberry Piならこのように簡単にセンサーの値を読み取ることができますので、温度で制御する機械を作ったり、マシン室の温度監視用など、いろいろと便利な使い方ができそうです。測定日時と共にファイルに記録していけば温度ロガーにもなりますね。読み取った値をツイートしたり、Open JTalkを使ってRaspberry Piに喋らせても面白いでしょう。
【PR】
・1-wire温度センサー DS18B20キット【メール便可】
・1-wire温度センサー DS18B20×5キット【メール便可】
・1-wire温度センサー DS18B20防水仕様【メール便可】

Raspbian OSでは1-wire用のモジュールをロードするだけで1-wireデバイスにも対応し、ファイルを読み書きする感覚で使用できるので、とても簡単です。今回はDS18B20を以下のようにRaspberry Piに接続します。DS18B20の2番ピンDQがデータ用のピンなので、これをGPIO4に接続します。
接続例

まずはじめにRaspberry Piを最新のバージョンにアップデートしておきましょう。
$ sudo apt-get update
$ sudo apt-get upgrade
アップデートが終わったら、1-wireデバイス用のモジュールを起動時に読み込むように設定します。スーパーユーザーで /etc/modules に以下の2行を追加します。
w1-gpio
w1-therm
続いて /boot/config.txt の最後に以下の行を追加します。gpiopin=4はGPIO 4という意味です。
dtoverlay=w1-gpio-pullup,gpiopin=4
/etc/modules と /boot/config.txt の編集が終わったら再起動します。
$ sudo reboot
これで準備は完了です。温度センサーが認識されるかどうか確認します。まだGPIOポートに接続していない場合は接続してください。認識されると/sys/bus/w1/devices/の中に仮想のディレクトリが作成されます。lsコマンドでみると、28-000…ではじまるフォルダ(シンボリックリンク)が出てきました。
$ ls /sys/bus/w1/devices/
28-000003daaec3 w1_bus_master1
これが接続した温度センサーのデバイスIDです。複数接続している場合は、複数表示されます。デバイスIDは個々のデバイス毎に異なりますので、以下の説明は適宜ご自身の温度センサーのデバイスIDに読み替えてください。
温度センサーの値を取得するには、そのデバイスのフォルダの w1_slave というファイルを読み込みます。
$ cat /sys/bus/w1/devices/28-000003daaec3/w1_slave
8c 01 4b 46 7f ff 04 10 2e : crc=2e YES
8c 01 4b 46 7f ff 04 10 2e t=24750
色々な値が出てきますが、t=の値が温度です。1000倍された値のため、この例の場合は 24.750度 ということになります。このように全くプログラムを使用せず、ファイルを読むだけで簡単に温度センサーの値を読み取ることができました。
最後に簡単なスクリプトを作って、温度だけをわかりやすく表示させるようにしてみたいと思います。以下のサンプルスクリプトではPerlで t= の部分の値を抜き出して、1000で割った値を出力しています。(DEVID=の部分はご自身のデバイスIDにしてください)
サンプルプログラム ds18b20.sh
#!/bin/sh(2016.3.18 マイナス表示対応の修正をしました)
DEVID="28-000003daaec3"
cat /sys/bus/w1/devices/$DEVID/w1_slave \
| perl -e 'while(<stdin>){ if(/t=([-0-9]+)/){print $1/1000,"\n";} }'
パーミッションを設定して実行すれば、温度だけが表示されて見やすくなりました。
$ chmod 755 ds18b20.sh
$ ./ds18b20.sh
24.75
Raspberry Piならこのように簡単にセンサーの値を読み取ることができますので、温度で制御する機械を作ったり、マシン室の温度監視用など、いろいろと便利な使い方ができそうです。測定日時と共にファイルに記録していけば温度ロガーにもなりますね。読み取った値をツイートしたり、Open JTalkを使ってRaspberry Piに喋らせても面白いでしょう。
【PR】
・1-wire温度センサー DS18B20キット【メール便可】
・1-wire温度センサー DS18B20×5キット【メール便可】
・1-wire温度センサー DS18B20防水仕様【メール便可】

使用したハードウェアの構成や、ソフトウェア(LIRC)は前回と同じです。
/etc/lirc/lircrc に以下のように設定しておくと、LIRCの起動と同時にirexecというプログラムが起動し、赤外線の信号を受け付けるようになります。
begin
prog = irexec
button = POWER
config = sudo shutdown -h now
end
これは /etc/lirc/lircd.conf に設定した「POWER」という名前のボタンが押されたら、「sudo shutdown -h now」というコマンドを実行する例です。shutdown、つまりテレビのリモコンの電源ボタンを押すことで、Raspberry Piの電源も切れるということです。
さすがに電源ONはできませんが、ここに起動したいアプリケーションを設定したりすれば、いろいろな使い方が楽しめそうです。本コラムでは今後、より具体的な手順の紹介もしていきたいと思います。
[コラム] 第7回『Raspberry Piで家電をリモートコントロールしよう』へ戻る

Raspberry PiのGPIOポートに電子機器を接続すれば、ネットワーク経由で様々な機器をコントロールすることができます。ネットワーク経由でコーヒーメーカーのスイッチを入れたり、猫にエサをやる装置などは昔からありましたが、Raspberry Piならより手軽に、実用的なものを作ることができます。
家電製品を制御するにはいくつか方法があります。
- コンセントの100Vの電源をON/OFFする
- ボタンの配線を引っ張り出す
- リモコンの信号を送信する
(1)はソリッドステートリレーなどを使って100Vの電源を制御する方法がありますが、万が一配線がショートした場合は火災の危険もあり、無人の状態で使用することには不安が残ります。
(2)は機器のボタンから配線を引っ張り出してきて、ボタンを押したのと同じ状態を再現する方法ですが、その機器を改造する必要があり、保証が受けられなく恐れがあります。
(3)は赤外線の信号を送信するだけなので改造も必要なく、リモコンが1台増えたようなものです。
【注意】家電製品をリモートコントロールする際は安全面に注意が必要です。たとえば冬場にヒーターをつける場合、もしもカーテンや衣類がヒーターの上に落ちていても普通は気が付きます。しかしその場に居ない場合はその状況がわかりません。特にヒーターなどの電熱機器はリモートコントロールせず、目の届く場所だけで使用してください。
Raspberry Piでリモコンの赤外線の信号を送信するには、赤外線LEDが必要です。通常のLEDは赤や青、白などの目に見える色が光りますが、赤外線LEDは赤外線を出すLEDです。使い方も普通のLEDと変わりありません。今回は赤外線が遠くまで届くようにするため、出力の大きい赤外線LED(IF=100mA)を使用しました。GPIOポートの出力電流では足らないため、トランジスタでLEDを駆動させています。

このRaspberry Piのケースはアクリルケースのため、RCAプラグ用の穴を開ける加工も容易にできます。
赤外線LEDはコントロールしたい機器の方向に向けなくてはなりません。そこで今回はLANケーブルを接続せずに、WiFiアダプタでネットワークに接続するようにしました。邪魔なLANケーブルがなくなり、電源さえ取れればどこにでも設置することができます。

その学習リモコンを実現するのが、LIRC(Linux Infrared Remote Control)というソフトウェアです。インストール方法や使い方については本コラムでは割愛させていただきますが、「Raspberry Pi LIRC」「Raspberry Pi リモコン」などと検索すると、詳しく説明されたページが出てきますので、興味がある方は挑戦してみてください。
リモコンからの信号を読み取り、Raspberry Piに設定すれば、あとはコマンドを実行するだけでその機器のコントロールができるようになります。
テレビの電源を入れる例
$ irsend SEND_ONCE TV power
最後に、これをスマートフォンのブラウザから実行できるようにしましょう。

ブロードバンドルーターのNATの設定でサーバーを公開するようにすれば、インターネットからRaspberry Piにアクスセスすることもできます。これで猛暑の日も、家に帰る前にエアコンをONしておけば、帰ったときには冷え冷えですね。
いたずらで勝手に電源を入れられないように、パスワードをかけておくのをお忘れなく。
[コラム] 第7回(番外編)『テレビのリモコンでRaspberry Piをコントロールしよう』へ続く
前回のコラム『Raspberry Pi専用カメラモジュールで遊ぼう part 1』では、カメラモジュールで制止画を撮影する方法を説明しましたが、今回は動画について説明していきたいと思います。
カメラモジュールを使用するには、まずはじめにRaspberry Piのファームウェアを最新のものにアップデートする必要があります。セットアップ手順はpart 1(第5回)のコラムをご覧ください。
Raspberry Pi専用のカメラモジュールでは1080p(1920x1080ピクセル)で動画を撮影することができます。Raspberry Piの場合、USB接続のWebカメラでは320x240ピクセルでさえカクカクした動画になってしまうことがありますが、このカメラモジュールを使えば非常に滑らかな動画の撮影が可能になります。

動画の撮影にはraspividコマンドを使用します。-oオプションで保存したいファイル名を指定します。-tオプションは撮影する秒数の指定で、単位はミリ秒です(1000=1秒)。10秒撮影する場合は-t 10000と指定します。
撮影した動画をRaspberry Piに接続したディスプレイで再生するには、omxplayerコマンドで表示させることができます。omxplayerの引数にファイル名を指定するだけでRaspberry Piのディスプレイ上で再生され、1080pの動画であってもとても滑らかに再生できるのが特徴です。
omxplayerはとても便利です。デスクトップ環境を使用していなくても動画を画面に出力できるので、コマンドラインから容易に動画の再生ができます。特にshell scriptと組み合わせて、自動的に動画を再生するようなシステムを作るときに便利です。

raspividコマンドは標準では1080p(1920x1080ピクセル)で撮影されますが、高解像度なぶん、たった10秒間撮影しただけでも20MBものファイルサイズになってしまいます。解像度を下げればファイルサイズも小さくなりますので、保存する画面サイズを変更したい場合は-w(横)と-h(縦)オプションで変更してみるとよいでしょう。
-bオプションでビットレートを変更することができます。たとえば10MBits/sにしたい場合は-b 10000000とします。
raspividコマンドにはこのほかにも画質の調整オプションがあったり、エフェクト機能などもありますので、詳しくは引数を付けずにraspividコマンドを実行してHELPを見てみてください。
またffmpegをインストールすれば、カメラの映像を動画配信サービスにも配信することができます。動画の配信は配信サービスがやってくれますので、何百人が同時にアクセスしてきても視聴することができます。
以下はカメラのH.264形式の映像をFLV形式に変換してUstreamに送信する例です。(RTMP URLとストリームキーはご自身の番組のものに書き換えてください)
次回のコラムではGPIOポートにボタンを取り付けて”デジカメ”の作成に挑戦します。
カメラモジュールを使用するには、まずはじめにRaspberry Piのファームウェアを最新のものにアップデートする必要があります。セットアップ手順はpart 1(第5回)のコラムをご覧ください。
Raspberry Pi専用のカメラモジュールでは1080p(1920x1080ピクセル)で動画を撮影することができます。Raspberry Piの場合、USB接続のWebカメラでは320x240ピクセルでさえカクカクした動画になってしまうことがありますが、このカメラモジュールを使えば非常に滑らかな動画の撮影が可能になります。

動画の撮影にはraspividコマンドを使用します。-oオプションで保存したいファイル名を指定します。-tオプションは撮影する秒数の指定で、単位はミリ秒です(1000=1秒)。10秒撮影する場合は-t 10000と指定します。
$ raspivid -o video.h264 -t 10000
撮影した動画をRaspberry Piに接続したディスプレイで再生するには、omxplayerコマンドで表示させることができます。omxplayerの引数にファイル名を指定するだけでRaspberry Piのディスプレイ上で再生され、1080pの動画であってもとても滑らかに再生できるのが特徴です。
$ omxplayer video.h264
omxplayerはとても便利です。デスクトップ環境を使用していなくても動画を画面に出力できるので、コマンドラインから容易に動画の再生ができます。特にshell scriptと組み合わせて、自動的に動画を再生するようなシステムを作るときに便利です。

raspividコマンドは標準では1080p(1920x1080ピクセル)で撮影されますが、高解像度なぶん、たった10秒間撮影しただけでも20MBものファイルサイズになってしまいます。解像度を下げればファイルサイズも小さくなりますので、保存する画面サイズを変更したい場合は-w(横)と-h(縦)オプションで変更してみるとよいでしょう。
$ raspivid -o video.h264 -t 10000 -w 640 -h 480
-bオプションでビットレートを変更することができます。たとえば10MBits/sにしたい場合は-b 10000000とします。
$ raspivid -o video.h264 -t 10000 -b 10000000
raspividコマンドにはこのほかにも画質の調整オプションがあったり、エフェクト機能などもありますので、詳しくは引数を付けずにraspividコマンドを実行してHELPを見てみてください。
またffmpegをインストールすれば、カメラの映像を動画配信サービスにも配信することができます。動画の配信は配信サービスがやってくれますので、何百人が同時にアクセスしてきても視聴することができます。
以下はカメラのH.264形式の映像をFLV形式に変換してUstreamに送信する例です。(RTMP URLとストリームキーはご自身の番組のものに書き換えてください)
#!/bin/sh
RTMP_URL="rtmp://x.xxxxxxxx.fme.ustream.tv/ustreamVideo/xxxxxxxx"
STREAM_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
raspivid -o - -t 99999999 -w 352 -h 288 \
| avconv -f h264 -i - \
-b 800k \
-f flv "$RTMP_URL/$STREAM_KEY flashver=FME/3.0\20(compatible;\20FMSc/1.0)"
次回のコラムではGPIOポートにボタンを取り付けて”デジカメ”の作成に挑戦します。
Raspberry
Piの基板上にはCSIソケットという、カメラモジュール専用のインターフェースがあります。カメラモジュールが開発中であることは伝えられていましたが、2013年5月中旬にやっと販売が開始され、一般の人でも入手できるようになりました。価格は25ドル程度(約2500円)です。

Raspberry PiではUSB接続のWebカメラも使用することもできますが、Raspberry Pi専用のカメラモジュールは5Mピクセルの画素センサーを搭載しており、2592x1944ピクセルの画像の撮影や、1080p/H264形式で30フレーム/秒の動画を撮影することができます。しかもカメラモジュールの基板は25x24mmと非常に小型なので、ケースに組み込んで使うことも可能です。
発売を伝える記事raspberrypi.org
Camera board available for sale!
本コラムでは3回にわたり、カメラモジュールを使って基本的な制止画の撮影から、動画撮影、応用編として”デジカメ”の作成をしていきたいと思います。
まずはカメラモジュールに対応させるため、Raspberry Piのファームウェアを最新のものに更新します。以下の手順はDesignSparkの記事を参考にさせていただきました。
続いてRaspi-configを起動して、カメラを有効(Enable)に設定します。Raspi-configもバージョンアップされ、今までとは若干構成が変わっているようです。

設定が終わったらRaspberry Piを再起動します。これでカメラモジュールが使えるようになりました。まずは制止画を撮影してみましょう。制止画の撮影にはraspistillコマンドを使用します。
-oオプションで保存したいファイル名を指定します。このコマンドを実行するとディスプレイに5秒間映像が表示され、この5秒間の最後の時点の内容が保存されます。プレビューの時間を変更したい場合は-tオプションを使います。単位はミリ秒です。(1000=1秒)
逆にプレビュー不要ですぐに撮影したい場合は-nオプションを使います。ただしある程度プレビュー時間をとらないと、ホワイトバランスが自動調整されないようです。
保存したファイルはSFTPなどでPCに転送すれば、普通にPCでも見ることができます。WWWサーバー用のディレクトリに保存してライブカメラを作ったり、shell scriptなどを組み合わせて、画像をメールで送るシステムも簡単に作れそうですね。
Raspberry Piのカメラモジュールで撮影した画像(縮小しています)

もしRaspberry Piのコンソール上で画像を確認したい場合は、fbi(linux framebuffer imageviewer)で表示することができます。まずはfbiをインストールします。
たとえば先ほど撮影したimage.jpgを表示したい場合は、次のコマンドを実行します。fbiでは複数の画像ファイルを指定して、スライドショー表示をすることでもできます。終了するにはESCかqをタイプします。
もし画像を3秒間だけ表示させて終了したい場合は次のようにします。-tオプションは秒数、-1は1回だけ表示するという意味です。なお-aは自動ズームで、-aを付けないとズームした状態で表示されます。
raspistillコマンドにはこのほかにも画質の調整オプションがあったり、タイムラプス機能(一定間隔で撮影する機能)などもありますので、詳しくは引数を付けずにraspistillコマンドを実行して、HELPを見てみるとよいでしょう。
次回のコラムでは動画の撮影について、その次のコラムではGPIOポートにボタンを取り付けてデジカメの作成に挑戦します。

Raspberry PiではUSB接続のWebカメラも使用することもできますが、Raspberry Pi専用のカメラモジュールは5Mピクセルの画素センサーを搭載しており、2592x1944ピクセルの画像の撮影や、1080p/H264形式で30フレーム/秒の動画を撮影することができます。しかもカメラモジュールの基板は25x24mmと非常に小型なので、ケースに組み込んで使うことも可能です。
発売を伝える記事raspberrypi.org
Camera board available for sale!
本コラムでは3回にわたり、カメラモジュールを使って基本的な制止画の撮影から、動画撮影、応用編として”デジカメ”の作成をしていきたいと思います。
まずはカメラモジュールに対応させるため、Raspberry Piのファームウェアを最新のものに更新します。以下の手順はDesignSparkの記事を参考にさせていただきました。
$ sudo apt-get update
$ sudo apt-get upgrade
続いてRaspi-configを起動して、カメラを有効(Enable)に設定します。Raspi-configもバージョンアップされ、今までとは若干構成が変わっているようです。
$ sudo raspi-config

設定が終わったらRaspberry Piを再起動します。これでカメラモジュールが使えるようになりました。まずは制止画を撮影してみましょう。制止画の撮影にはraspistillコマンドを使用します。
$ raspistill -o image.jpg
-oオプションで保存したいファイル名を指定します。このコマンドを実行するとディスプレイに5秒間映像が表示され、この5秒間の最後の時点の内容が保存されます。プレビューの時間を変更したい場合は-tオプションを使います。単位はミリ秒です。(1000=1秒)
$ raspistill -o image.jpg -t 1000
逆にプレビュー不要ですぐに撮影したい場合は-nオプションを使います。ただしある程度プレビュー時間をとらないと、ホワイトバランスが自動調整されないようです。
$ raspistill -o image.jpg -n -t 0
保存したファイルはSFTPなどでPCに転送すれば、普通にPCでも見ることができます。WWWサーバー用のディレクトリに保存してライブカメラを作ったり、shell scriptなどを組み合わせて、画像をメールで送るシステムも簡単に作れそうですね。
Raspberry Piのカメラモジュールで撮影した画像(縮小しています)

もしRaspberry Piのコンソール上で画像を確認したい場合は、fbi(linux framebuffer imageviewer)で表示することができます。まずはfbiをインストールします。
$ sudo apt-get install fbi
たとえば先ほど撮影したimage.jpgを表示したい場合は、次のコマンドを実行します。fbiでは複数の画像ファイルを指定して、スライドショー表示をすることでもできます。終了するにはESCかqをタイプします。
$ fbi image.jpg -a
もし画像を3秒間だけ表示させて終了したい場合は次のようにします。-tオプションは秒数、-1は1回だけ表示するという意味です。なお-aは自動ズームで、-aを付けないとズームした状態で表示されます。
$ fbi image.jpg -a -t 3 -1
raspistillコマンドにはこのほかにも画質の調整オプションがあったり、タイムラプス機能(一定間隔で撮影する機能)などもありますので、詳しくは引数を付けずにraspistillコマンドを実行して、HELPを見てみるとよいでしょう。
次回のコラムでは動画の撮影について、その次のコラムではGPIOポートにボタンを取り付けてデジカメの作成に挑戦します。
Raspberry Piの基板上にはGPIOポートのピンヘッダがあります。GPIOポートはソフトウェアから簡単に制御することができるため、ネットワーク経由でRaspberry Piに接続された機器を制御するというのは、まさにRaspberry Piの得意とするところです。GPIOポートを制御する方法は数多くありますが、たとえばコマンドラインから行うには以下のようなコマンドで制御できます。
これはGPIO4をOUTモード(出力モード)にして、H(3.3V)とL(0V)を出力する場合の例です。C言語やPythonなどのプログラムを組まなくても、簡単なことならコマンドライン上で行えます。それではコマンドラインではなく、Webブラウザから制御するにはどうしたらいいでしょうか?
Webブラウザから制御するには通常Webサーバーと、GPIOポートの制御するCGIプログラムが必要です。プログラムも1から作らなければなりませんが、WebIOPiを使うととても簡単に、ブラウザからGPIOポートを制御するためのプログラムが作れます。WebIOPiはWebサーバーの機能を内蔵しており、インストールして起動するだけですぐに使えます。WebIOPiは単独でも使用できますが、REST APIに対応しているため、JavaScriptでGPIOポートの制御ができるのが大きな特徴です。AjaxでWebサイトを作ったりしている人にはおなじみの方法ですね。制御方法はとても簡単です。
例)GPIO4のOUTモードに設定
リクエスト先 /GPIO/4/function/out (※POSTで送信)
例)GPIO4にH(3.3V)を出力
リクエスト先 /GPIO/4/value/1 (※POSTで送信)
例)GPIO25の状態を読み込む
リクエスト先 /GPIO/25/value (※GETで送信)
例)GPIO18に接続されたサーボモーターの角度を45°に設定
リクエスト先 /GPIO/18/pulseAngle/45 (※POSTで送信)
以下はサーボモーターと2つのLEDをAjaxで制御する例です。jQueryを使ってWebIOPiのAPIにHTTPリクエストを送信しています。


スマートフォンのブラウザからアクセスすると、サーボモーターを動かすためのボタンとスライダーが現れます。スライダーというのはHTML5で新しく加わった左右/上下に動かせるインターフェースのことで、ここではスライダーの上下に連動してサーボモーターも上下に動くようにしています。
<デモ動画>
WebIOPiについては書籍『Raspberry Piで遊ぼう!』でも紹介していますので、C言語やPythonはわからないけどJavaScriptなら得意!という人は、是非チャレンジしてみるとよいでしょう。
# echo 4 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio4/direction
# echo 1 > /sys/class/gpio/gpio4/value
# echo 0 > /sys/class/gpio/gpio4/value
# echo 4 > /sys/class/gpio/unexport
これはGPIO4をOUTモード(出力モード)にして、H(3.3V)とL(0V)を出力する場合の例です。C言語やPythonなどのプログラムを組まなくても、簡単なことならコマンドライン上で行えます。それではコマンドラインではなく、Webブラウザから制御するにはどうしたらいいでしょうか?
Webブラウザから制御するには通常Webサーバーと、GPIOポートの制御するCGIプログラムが必要です。プログラムも1から作らなければなりませんが、WebIOPiを使うととても簡単に、ブラウザからGPIOポートを制御するためのプログラムが作れます。WebIOPiはWebサーバーの機能を内蔵しており、インストールして起動するだけですぐに使えます。WebIOPiは単独でも使用できますが、REST APIに対応しているため、JavaScriptでGPIOポートの制御ができるのが大きな特徴です。AjaxでWebサイトを作ったりしている人にはおなじみの方法ですね。制御方法はとても簡単です。
例)GPIO4のOUTモードに設定
リクエスト先 /GPIO/4/function/out (※POSTで送信)
例)GPIO4にH(3.3V)を出力
リクエスト先 /GPIO/4/value/1 (※POSTで送信)
例)GPIO25の状態を読み込む
リクエスト先 /GPIO/25/value (※GETで送信)
例)GPIO18に接続されたサーボモーターの角度を45°に設定
リクエスト先 /GPIO/18/pulseAngle/45 (※POSTで送信)
以下はサーボモーターと2つのLEDをAjaxで制御する例です。jQueryを使ってWebIOPiのAPIにHTTPリクエストを送信しています。


スマートフォンのブラウザからアクセスすると、サーボモーターを動かすためのボタンとスライダーが現れます。スライダーというのはHTML5で新しく加わった左右/上下に動かせるインターフェースのことで、ここではスライダーの上下に連動してサーボモーターも上下に動くようにしています。
<デモ動画>
WebIOPiについては書籍『Raspberry Piで遊ぼう!』でも紹介していますので、C言語やPythonはわからないけどJavaScriptなら得意!という人は、是非チャレンジしてみるとよいでしょう。
最新記事
アーカイブ
オンラインショップ
Raspberry Piリンク