2016年1月23日土曜日

EONでPubNubのリアルタイムデータを可視化する

 EONは、PubNubのデータをリアルタイムに可視化するためのJavaScriptフレームワークです。このEONを使って、Arduinoで計測した温度データを可視化してみます。




 Arduinoのセットアップや回路については、「PubNub+Google Chart(Gauge)でセンサー・データを可視化する」を参照してください。


①パブリッシャー側のコード
 Arudinoで計測した温度データをパブリッシュ(発行)するJavaScriptコードを記述します。

var publishKey = '<your Publish Key>';
var subscribeKey = '<your Subscribe Key>';
var channel = "temperature"; // channel名の設定
var five = require("johnny-five");
var board = new five.Board({port: "COM3"});
board.on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
// PubNub初期化
var pubnub = require("pubnub")({
ssl : true,
publish_key : publishKey,
subscribe_key : subscribeKey
});
temperature.on("data", function() {
console.log(this.celsius)
var data = {eon:{'temperature' : this.celsius}};
// データの送信
pubnub.publish({
channel : channel,
message : data,
callback : function(message) {
console.log(message);
}
});
});
});
view raw publish_temp.js hosted with ❤ by GitHub
  パブリッシュするデータは、次の書式で指定します。

{ eon : {  key1 : value,, key2 : value,・・・・keyN : value}}


②サブスクライバー(ブラウザ)側のコード
 温度データをサブスクライブ(購読)し、グラフ化して表示するるJavaScriptコードを記述します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<title>Line Chart</title>
<script src="http://pubnub.github.io/eon/v/eon/0.0.10/eon.js"></script>
<link type="text/css" rel="stylesheet" href="http://pubnub.github.io/eon/v/eon/0.0.10/eon.css"/>
</head>
<body>
<div id="chart"></div>
<script>
var pubnub = PUBNUB.init({
publish_key : '<your Publish Key>',
subscribe_key: '<your Subscribe Key>'
});
var channel = "temperature"; // channel名の設定
eon.chart({
channel: channel,
pubnub: pubnub,
generate: {
bindto: '#chart',
data: {
labels: true
}
}
});
</script>
</body>
</html>
view raw LineChart.html hosted with ❤ by GitHub

2016年1月21日木曜日

Arudino+carriotsでIoT-データのプッシュ(転送)

 carriotsには、HTTP通信を使用して、データを外部にプッシュ(転送)する「Trigger」という仕組みが用意されいます。そこで、「Trigger」を使って、データをIFTTTのMakerに転送する方法を説明します。

 IFTTTのMaker、およびレシピの作成方法については、次の記事を参照してください。
 ・IFTTTを使ってセンサー・データをGoogleドライブ(スプレッドシート)に記録する(Arduino編)

1.CONTROL PANELの左サイドメニューの「Push(Trigger)」をクリックします。
2.[+New]をクリックします。
3.各項目に次のように入力します。

Name : 任意の名前
Max retries : 最大リトライ回数
Url : https://maker.ifttt.com/trigger/<Event Name>/with/key/<your key>
Vervb : POST
Payload : value1=%%%<データ名>%%%

<Event_Name>には、レシピのEvent Nameを、<Your Key>には、IFTTTのKeyを入力します。
<データ名>には、プッシュするデータの名前(例:temperature)を入力します。




4.[Add another header]をクリックし、次の2つのHTTPヘッダー情報を追加します。

key : Accept
Value : application/json

key : Content-Type
Value : application/x-www-form-urlencoded




5.[Save]をクリックして保存します。


2016年1月20日水曜日

Arudino+carriotsでIoT-センサー・データの監視と通知

 carriotsでセンサー・データやデバイスを監視するには、「Listener」(リスナ)を使います。たとえば、温度データ(temperature)が30より大きくなったら、メールで通知するListenerを作成するには、次のように操作します。

1.CONTROL PANELの左サイドメニューのの「Listener」をクリックします。
2.[+New]をクリックします。



3.「If expression」に「context.data.temperature > 30」と入力します。
4.「Then expression」に次のコードを入力し、[Save]をクリックします。

import com.carriots.sdk.utils.Email;
def email = new Email ();
email.to="<mail addres>";
email.message="<message text>";
email.send();

 <mail addres>には送信先のメールアドレスを、<message text>には、メールメッセージを入力します。





Arudino+carriotsでIoT-グラフの作成

 carriotsで収集したデータをグラフ化する方法を説明します。

1.「CARRIOTS CONTROL PANEL」の左サイドメニューの「Wizard Widget Graphs」をクリックします。
2.グラフの種類を選択し、[Next Step]をクリックします。


3.対象のデバイスを選択し、[Next Step]をクリックします。


4.「From」(開始日)、「To」(終了日)を設定し、[Next Step]をクリックします。
 ※設定なしでも可


5.最大レコード数を設定し、[Next Step]をクリックします。


6.グラフにプロットするデータを選択し、[Next Step]をクリックします。


7.Y軸の項目を選択し、[Next Step]をクリックします。
 ※グラフの種類が「line」「bar」の場合


8.グラフのオーダー(順序)を設定し、[Next Step]をクリックします。




 生成されたJavaScriptコードを、HTMLに張り付けることで、サイト上でグラフを公開することができます。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<title>carriots graph</title>
</head>
<body>
<div id="carriots-graph" style="max-width: 900px;margin:auto;"></div>
<!-- 以下に、生成されたグラフのコードを貼り付けてください。 -->
</body>
</html>


2016年1月19日火曜日

Arudino+carriotsでIoT-センサー・データの収集

 IoTプラットフォーム(クラウドサービス)のcarriotsを使って、Arudinoで計測したセンサー・データ(温度)を取集してみます。

carriotsの準備
①アカウント作成
 carriotsのアカウントを作成します。

②デバイスの設定
1.「CARRIOTS CONTROL PANEL」の左サイドメニューの「Device」をクリックします。


2.「defaultDevice」の「Action」列の[Action]→[edit]をクリックします。
 ※「defaultDevice」は規定で用意されるデバイスです。新しくデバイスを作成することもできますが、今回はこの「defaultDevice」を使用します。


3.「Time zone」を「Tokyo」に設定し、[Save]をクリックします。その他の項目は、必要に応じて設定してください。


③Apikeyの確認
1.上部メニューの[MY SETTING]→[MY ACCOUNT]をクリックします。


2,表示されたFull Privileges Apikeyを確認します。


③Id developer(device Id)の確認
1.左サイドメニューの「Device」をクリックします。
2.「Name」列のデバイス名(ここでは「defaultDevice」)をクリックします。


3.表示された情報の「Id developer」の内容を確認します。
 ※Id developerは、「<デバイス名@ユーザ名.ユーザー名>」の形式になります。これは、ページ上部にも表示されています。




■回路とプログラム

①Arudino開発環境の構築
1.「ArduinoをJavaScriptで制御する」の手順で開発環境を構築します。
2.コマンドプロンプトから「npm install request」と入力し、node.jsのrequestモジュールをインストールします。


②回路の配線
 次のように回路を配線します。

















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

var request = require('request');
var key = '<your Full Privileges Apikey>';
var deviceId = '<your Id developer>';
var url = 'http://api.carriots.com/streams/';
var options = {
uri: url,
body: {
"protocol": "v1",
"checksum": "",
"device" : deviceId,
"at" : "now",
"data" : { "temperature":0 }
},
json: true,
headers: {
"carriots.apikey": key
}
};
var five = require("johnny-five");
five.Board().on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
temperature.on("data", function() {
options.body.data.temperature = this.celsius;
console.log(this.celsius + "°C");
// データをPOSTメソッドで送信
request.post(options, function(error, response, body){
if (!error && response.statusCode == 200) {
console.log(body);
} else {
console.log('error: '+ response.statusCode);
}
});
});
});
<your Full Privileges Apikey>には、「Full Privileges Apikey」を、<your Id developer>には「Id developer」を入力します

2.コマンドプロンプトを起動し、作業用フォルダに移動し、「node rest_carriots.js」と入力します。

④データの確認
 「CARRIOTS CONTROL PANEL」の左サイドメニューの「Data streams」をクリックします。



2016年1月17日日曜日

Arudino+theThings.IOでIoT-センサー・データの収集

 theThings.IOを使って、Arudinoで計測したセンサー・データの収集する方法を説明します。



①アクティベート(Thing Tokenの取得)
1.theThings.IOのアカウントを作成します。
2.左サイドのメニューの[Things Manager]を選択し、「ユーザー名 product」の[DETAILS]をクリックします。


3.[Get activaton codes]をクリックします。


4.[+]をクリックします。


5.表示されたウィンドウでThing Tokenを確認し、[OK]ボタンをクリックします。

 以降、Thing Tokenは、「2」までの手順で確認できるようになります。


②開発環境の構築
1.「ArduinoをJavaScriptで制御する」の手順で開発環境を構築します。
2.コマンドプロンプトから「npm install thethingsio-api」と入力し、theThings.IO APIライブラリ(Node.jsモジュール)をインストールします。

③回路の配線
 次のように回路を配線します。

















④プログラムの作成と実行
1.次のJsonを入力し、「config.json」と名前を付けて、作業用フォルダに保存します。

<your Thing Token>には、①で取得したThing Tokenを入力します。

2.次のJavaScriptコードを入力し、「temp_thethings.js」と名前を付けて、作業用フォルダに保存します。

var five = require("johnny-five");
var board = new five.Board({port: "COM3"});
var theThingsAPI = require('thethingsio-api')
board.on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
//create Client
var client = theThingsAPI.createClient()
var object = {
"values": [
{
"key": 'temperature',
"value": 0
}
]
}
client.on('ready', function () {
temperature.on("data", function() {
console.log(this.celsius);
object.values[0].value = this.celsius;
client.thingWrite(object, function (error, data) {
console.log(error ? error : data);
});
});
});
});
3.コマンドプロンプトを起動し、作業用フォルダに移動して「node temp_thethings.js」と入力します。

⑤データの確認
1.theThings. IOにサインインし、Panel(パネル)を表示します。
2.左サイドのメニューの[Things Manager]を選択し、「ユーザー名 product」の[DETAILS]をクリックします。


3.「Option」欄の[Details]をクリックします。





2016年1月15日金曜日

PubNub+Google Chart(Gauge)でセンサー・データを可視化する

  PubNubを使って、Arduinoで計測したセンサー・データ(温度)をブラウザで受信し、Google ChartのGauge(ゲージ)で可視化する方法を説明します。


①開発環境の構築
 「PubNubを使ってArudinoを制御する」の①~③の手順で開発環境を構築します。

②回路の配線
 次のように回路を配線します。



















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

var publishKey = '<your Publish Key>';
var subscribeKey = '<your Subscribe Key>';
var channel = "temperature"; // channel名の設定
var five = require("johnny-five");
var board = new five.Board({port: "COM3"});
board.on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
// PubNub初期化
var pubnub = require("pubnub")({
ssl : true,
publish_key : publishKey,
subscribe_key : subscribeKey
});
temperature.on("data", function() {
console.log(this.celsius)
var data = {'value' : this.celsius};
// データの送信
pubnub.publish({
channel : channel,
message : data,
callback : function(message) {
console.log(message);
}
});
});
});
view raw temp_pubnub.js hosted with ❤ by GitHub
2.次のHTMLコードを入力し、「temp_pubnub.jhtml」と名前を付けて、任意の場所に保存します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>温度</title>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script type="text/javascript">
var publishKey = 'pub-c-d1172091-ff3a-4e21-ba44-8ccff8959af3';
var subscribeKey = 'sub-c-c8f6cb7e-a505-11e5-a586-0619f8945a4f';
var channel2 = "temperature" // channel名の設定
// PubNub初期化
var pubnub = PUBNUB.init({
publish_key : publishKey,
subscribe_key : subscribeKey
});
// Google Chart
google.load("visualization", "1", {packages:["gauge", "line","corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
// Data for temperature Gauge
Data = google.visualization.arrayToDataTable([
['Label', 'Value'],
['Temperature', 0],
]);
// Option for temperature Gauge
Options = {
width: 200, height: 200,
min: 0, max: 60,
redFrom: 50, redTo: 60,
yellowFrom:40, yellowTo: 50,
minorTicks: 5
};
Gauge = new google.visualization.Gauge(document.getElementById('temperatureGauge'));
Gauge.draw(Data, Options);
};
function subscribe() {
pubnub.subscribe({
channel : channel2
callback : function(data) {
console.log(data);
// Update temperature data
Data.setValue(0, 1, data.value);
Gauge.draw(Data, Options);
}
});
}
function unsubscribe(){
pubnub.unsubscribe({
channel : channel2
});
Data.setValue(0, 1, 0);
Gauge.draw(Data, Options);
}
</script>
</head>
<body>
<div>
<button onclick="subscribe()">接続</button>
<button onclick="unsubscribe()">切断</button>
</div>
<div id="temperatureGauge"></div>
</body>
</html>
<your Publish key>にはPublish Keyを、<your Subscribe key>にはSubscribe Keyを入力します。













④プログラムの実行と動作確認
1.コマンドプロンプトを起動し、作業用フォルダに移動します。
2.「node temp_pubnub.js」と入力します。
3.ブラウザで「ltemp_pubnub.html」を開いて、[接続]ボタンをクリックし、ゲージに温度が表示されることを確認します。
4.[切断]ボタンのクリックで、ゲージが0になることを確認します。


2016年1月14日木曜日

PubNub+Raspberry Pi カメラで簡易ライブカメラシステムを構築する

 PubNubとRaspberry Pi カメラ(カメラモジュール)を使って、簡易ライブカメラシステムを構築する方法を説明します。




①Raspberry Pi  開発環境の準備
 「Raspberry Pi カメラのリモート制御&画像転送-PubNub編」の「Raspberry Pi  開発環境の準備」の手順で、 開発環境を準備します。

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

var publishKey = '<your Publish Key >';
var subscribeKey = '<your Subscribe Key>';
var channel1 = "shutter";
var channel2 = "pic";
var base64Img = require('base64-img');
var filename = "picam.jpg";
var raspistillOption = [ "-w", "320", "-h", "240", "-o", filename, "-t", "999999999", "-tl", "1000"];
var jpegoptimOption = ["--strip-all", "--max=30", filename];
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;
var fs = require('fs');
var pid;
var pubnub = require("pubnub")({
ssl : true,
publish_key : publishKey,
subscribe_key : subscribeKey
});
pubnub.subscribe({
channel : channel1,
callback : function(message){
console.log('>', message);
var raspistill = spawn('raspistill', raspistillOption);
getpid();
if(message.action === 'start'){
fs.watchFile(filename, function(current, previous) {
var jpegoptim = spawn('jpegoptim', jpegoptimOption);
jpegoptim.on('close', function(code, signal){
base64Img.base64(filename,function(err, data){
if (!err){
publish(data);
}
});
});
});
} else {
exec('kill -9 '+ pid);
}
}
});
function publish(data){
pubnub.publish({
channel : channel2,
message : data,
callback: function(m){
console.log(m);
},
error: function(m){
console.log(m);
}
});
}
function getpid(){
exec('ps aux | grep [r]aspistill', function(err, stdout, stderr) {
if (stdout) {
try {
pid = stdout.match(/\s+(\d{4,6})+\s+/gi)[0].trim();
if (pid) {
console.log('Raspistill running. PID:' + pid);
}
} catch (e) {
console.log('Raspistill PID not found');
}
} else {
console.log('Raspistill PID not found');
}
});
}
view raw live.js hosted with ❤ by GitHub
2.次のHTMLコードを入力し、「live.html」と名前を付けて、任意場所に保存します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function(){
var publishKey = '<your Publish Key>';
var subscribeKey = 'your Subscribe Key';
var channel1 = "shutter" // channel名の設定
var channel2 = "pic"
// PubNub初期化
var pubnub = PUBNUB.init({
publish_key : publishKey,
subscribe_key : subscribeKey
});
pubnub.subscribe({
channel : channel2,
callback : function(data) {
console.log(data);
var img = new Image();
img.src = data;
img.onload = function(){
$('#main').html(img);
}
}
});
// データの送信
function publish(action) {
var value = {'action': action};
pubnub.publish({
channel : channel1,
message : value,
callback: function(message){console.log(message);}
});
}
// [START]ボタンのクリックで文字列「start」を送信
$('#start-button').click(function(){
publish('start');
});
// [STOP]ボタンのクリックで文字列「stop」を送信
$('#stop-button').click(function(){
publish('stop');
});
});
</script>
</head>
<body>
<button id="start-button">START</button>
<button id="stop-button">STOP</button>
<div id="main"></div>
</body>
</html>
view raw live.html hosted with ❤ by GitHub
<your Publish key>にはPublish Keyを、<your Subscribe key>にはSubscribe Keyを入力します。













③プログラムの実行と動作確認
1.ターミナルを起動し、作業用フォルダに移動します。
2.「sudo node live.js」と入力します。
3.ブラウザで「live.html」を開いて、[START]ボタンをクリックします。
4.撮影が実行(カメラモジュールのLEDが点灯)され、写真がブラウザ上にライブで表示されることを確認します。
5.[STOP]ボタンのクリックで、ライブ表示が停止することを確認します。

2016年1月13日水曜日

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

 PubNubを使ったRaspberry Pi カメラのリモート制御は、「Raspberry PiのカメラモジュールをJavaScript(Node.js)で制御する」で説明しましたが、今回は、撮った写真をブラウザにフィードバックして表示してみます。



①Raspberry Pi  開発環境の準備
1.「Raspberry Pi カメラのリモート制御&画像転送-Adafruit IO編」の「Raspberry Pi  開発環境の準備」の手順で、 開発環境を準備します。
2.ターミナルを起動し、作業用フォルダに移動して「npm install pubnub」と入力し、「pubnub」モジュールをインストールします。


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

var publishKey = '<your Publish Key>';
var subscribeKey = '<your Subscribe Key>';
var channel1 = "shutter";
var channel2 = "pic";
var base64Img = require('base64-img');
var filename = "picam.jpg";
var raspistillOption = [ "-w", "320", "-h", "240", "-o", filename];
var jpegoptimOption = ["--strip-all", "--max=30", filename];
var spawn = require('child_process').spawn;
var pubnub = require("pubnub")({
ssl : true,
publish_key : publishKey,
subscribe_key : subscribeKey
});
pubnub.subscribe({
channel : channel1,
callback : function(message){
console.log('>', message);
if(message.action === 'on'){
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){
publish(data);
}
});
});
});
}
}
});
function publish(data){
pubnub.publish({
channel : channel2,
message : data,
callback: function(m){console.log(m);},
error: function(m){console.log(m);}
});
}
view raw picam.js hosted with ❤ by GitHub
2.次のHTMLコードを入力し、「camera.html」と名前を付けて、任意場所に保存します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function(){
var publishKey = '<your Publish Key>';
var subscribeKey = '<your Subscribe Key>';
// channel名の設定
var channel1 = "shutter"
var channel2 = "pic"
// PubNub初期化
var pubnub = PUBNUB.init({
publish_key : publishKey,
subscribe_key : subscribeKey
});
pubnub.subscribe({
channel : channel2,
callback : function(data) {
var img = new Image();
img.src = data;
img.onload = function(){
$('#main').append(img);
}
}
});
// データの送信
function publish(action) {
var value = {'action': action};
pubnub.publish({
channel : channel1,
message : value,
callback: function(message){console.log(message);}
});
}
// [ON]ボタンのクリックで文字列「on」を送信
$('#on-button').click(function(){
publish('on');
});
});
</script>
</head>
<body>
<button id="on-button">Shutter</button>
<div id="main"></div>
</body>
</html>
view raw camera.html hosted with ❤ by GitHub
<your Publish key>にはPublish Keyを、<your Subscribe key>にはSubscribe Keyを入力します。













③プログラムの実行と動作確認
1.ターミナルを起動し、作業用フォルダに移動します。
2.「sudo node picam.js」と入力します。
3.ブラウザで「camera.html」を開いて、[Shutter]ボタンをクリックします。
4.撮影が実行(カメラモジュールのLEDが点灯)され、写真がブラウザ上に表示されることを確認します。

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ブロックは最新の写真だけでなく、過去に転送された写真も表示されます。

2016年1月9日土曜日

Node-RED+M2X+ArduinoでIoT

 Node-REDとM2Xを使用して、Arduinoで計測したセンサ・データの収集する方法を説明します。

 M2Xのアカウントの作成、センサーデータを計測するためのArduinoのセットアップ、および回路については、「Arduino+M2XでIoT」を参照してください。
 また、Node-REDのインストール手順については、「WindowsにNode-RED」をインストールする」を参照してください。

①M2Xノードのインストール
1.コマンドプロンプトを起動し、「cd .node-red」と入力します。
2.「npm install node-red-m2x」と入力します。

②フローの作成
 次のように「arduino in」「delay」「fuinction」「m2x」「debug」ノードを接続してフローを作成し、デプロイします。



 各ノードのプロパティは、次のように設定します。

・arduino in

 「Arudino」にArudinoの接続先のポートを指定します。自動的に認識されている場合、「Arudino」と設定されています。
 「Pin」にはピン番号を、「Type」には、ピンの種類(アナログまたはデジタル)を指定します。アナログの「0」を指定した場合、「A0」が入力ピンになります。

・delay


・fuinction

 次のコードを入力します。
var temp = msg.payload * 5 /1024 * 100;
msg.topic = "devices";
msg.action = "setStreamValue";
msg.topic_id = "&lt;DEVICE ID&gt;";
msg.sub_topic_id = "&lt;STREAM NAME&gt;";
msg.payload = {value: temp};
return msg;

<DEVICE ID>には、デバイスの「DEVICE ID」を、<STREAM NAME>には、ストリームの名前(「STREAM ID」ではないことに注意、この例では、「Temperature」)を入力します。


・m2x

  「鉛筆」アイコンのボタンをクリックし、「API Key」にデバイスの「PRIMARY API KEY」を入力します。

2016年1月8日金曜日

Raspberry Pi +M2XでIoT

 AT&T M2Xを使用して、Raspberry Piで計測したセンサ・データを収集する方法を説明します。



①Raspberry Piのセットアップ
1.「Raspberry Pi 2のGPIOをJavaScriptで制御する」の手順でRaspberry Piの開発環境をセットアップします。
2.次のように回路を配線します。


















②M2Xの準備
 「Arduino+M2XでIoT」の②の手順でM2Xのアカウントを作成し、デバイス(Device)とストリーム(Stream)を登録します。

※補足
・登録済みのデバイスにストリームを追加するには、デバイスの管理画面の[Add Stream]をクリック、「Stream ID」「Display Name」を入力し、[Save]をクリックします。
・新しいデバイスとストリームを対話形式で登録するには、 「Setup your Device」にアクセスします。
・デバイスの管理画面からデバイスを追加するには、[Device]をクリックしてデバイスの一覧画面を表示し、[Create New]→[Device]を選択し、「Device Name」にデバイス名を入力し、[Create]をクリックします。その後、デバイスの管理画面が表示されるので、[Add Stream]をクリックし、ストリームを追加します。

③「request」モジュールのインストール
 M2XのRESTful APIを使用するため、Node.jsの「「request」モジュールをインストールします。
1.ターミナルを起動し、作業用フォルダに移動します。
2.「npm install request」と入力します。

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

var request = require('request');
var key = '[PRIMARY API KEY]';
var deviceId = '[DEVICE ID]';
var streamId = '[STREAM ID]'
var url = 'http://api-m2x.att.com/v2/devices/' + deviceId + '/streams/' + streamId +'/value';
var options = {
uri: url,
form: {},
json: true,
headers: {
'X-M2X-KEY': key
}
};
var raspi = require('raspi-io');
var five = require('johnny-five');
var board = new five.Board({
io: new raspi()
});
board.on("ready", function() {
var virtual = new five.Board.Virtual(
new five.Expander("PCF8591")
);
var a = new five.Sensor({
// PCF8591 module YL-40
// A0:LDR(Light Dependent Resistor)
// A1:NC
// A2 Thermistor
// A3:Potentiometer
pin:"A0",
board:virtual,
freq: 10000
});
a.on("data", function() {
options.form.value = this.value;
console.log(this.value);
// データをPUTメソッドで送信
request.put(options, function(error, response, body){
if (!error && response.statusCode == 202) {
console.log(body.status);
} else {
console.log('error: '+ response.statusCode);
}
});
});
});
view raw bright_m2x.js hosted with ❤ by GitHub
 [PRIMARY API KEY][DEVICE ID][STREAM ID]には、デバイスの管理画面に表示される「PRIMARY API KEY「[DEVICE ID」「STREAM ID」を入力します。


2.ターミナルから「sudo node bright_m2x.js」と入力します。