2016年1月12日火曜日

Raspberry Pi カメラのリモート制御&画像転送-Adafruit IO編

 Adafruit IOのImageブロック(image block )を使うと、Base64エンコードされた画像を表示することができます。そこで、momentaryボタン(momentary button)のプッシュでシャッターを切り、撮影した写真をImageブロックに転送する方法を説明します。




■Raspberry Pi 開発環境の準備

①「MQTT.js」と「base64-img」((Node.jsのモジュール)のインストール
1.ターミナルを起動し、作業用フォルダに移動します。
2.「npm install mqtt」と入力します。
3.「npm install base64-img」と入力します。


②「jpegoptim」のインストール
 「Add/Remove Software」から、「jpegoptim」をインストールします。




■Adafruit IOのフィード、ダッシュボード、ブロックの作成

①フィード(Feed)の作成
 「SHUTTER」フィードと「PICAM」フィードを作成します。

②ダッシュボードの作成
 「camera」ダッシュボードを作成します。

③ブロックの作成
 Imageブロックとmomentaryボタンを作成します。Imageブロックは「PICAM」フィードに、momentaryボタンは「SHUTTER」フィードに紐づけします。



  フィード、ダッシュボード、ブロックの作成手順は、「Adafruit IO+Arduino+MQTTでIoT‐デバイスの制御」を参照してください。



■プログラムの作成と実行

①プログラムの作成
  次のJavaScriptコードを入力し、「picam_adafruit.js」と名前を付けて、作業用フォルダに保存します。

var base64Img = require('base64-img');
var filename = "picam.jpg";
var raspistillOption = [ "-w", "640", "-h", "480", "-o", filename];
var jpegoptimOption = ["--strip-all", "--max=30", filename];
var spawn = require('child_process').spawn;
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://io.adafruit.com', {
port: 1883,
username: '[USER NAME]',
password: '[YOUR AIO KEY]' });
// トピック名を「<user name>/feeds/<feed name>」の形式で指定する
var shutter = '<user name>/feeds/SHUTTER';
var picam ='<user name>/feeds/PICAM';
client.on('connect', function () {
client.subscribe(shutter);
});
client.on('message', function (topic, message) {
console.log(message.toString());
if(message.toString() === '1'){
var raspistill = spawn('raspistill', raspistillOption);
raspistill.on('close', function(code, signal){
var jpegoptim = spawn('jpegoptim', jpegoptimOption);
jpegoptim.on('close', function(code, signal){
base64Img.base64(filename,function(err, data){
if (!err){
var dat = data.split(',');
client.publish(picam, dat[1]);
}
});
});
});
}
});

 [USER NAME]には、Adafruit IOのユーザ名を、[YOUR AIO KEY]にはAIO KEYを入力します。[Topic name]には、トピック名を「<ユーザー名>/feeds/<フィード名>」の形式で指定します。


②プログラムの実行
1.ターミナルを起動し、作業用フォルダに移動します。
2.「sudo node 「picam_adafruit.js」と入力します。

③動作の確認
1.ブラウザで「camera」ダッシュボードを開き、momentaryボタン押します。
2.撮影が実行(カメラモジュールのLEDが点灯)され、写真がImageブロックび表示されることを確認します。

※Imageブロックは最新の写真だけでなく、過去に転送された写真も表示されます。

0 件のコメント:

コメントを投稿