2016年2月19日金曜日

Arduino + ThingSpeakでIoT - センサーデータの収集

 今回は、IoTプラットフォームのThingSpeakを使って、Arduinoで計測した温度データを収集、可視化する方法を説明します。
 回路は、「Arduino 温度測定」を使用します。



■ThingSpeakの準備
①アカウントの作成
 ThingSpeakのアカウントを作成します。
②チェンネルの作成
1.[New Channel]をクリックします。

2.[Name]にチャンネルの名前を入力します。

3.[Field1]~[Field8]に送信するデータの名前を入力します。最大8つまで設定できます。今回はField1とField2の2つを使用します。

※他の項目は、必要に応じて入力します。

4.[Save Channel]をクリックし、チェンネルを保存します。

5.作成したチャンネルのID(Channel ID)を確認します。


6.[API Keys]をクリックし、Write API KeyとRead API Keyを確認します。



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

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

var ThingSpeakClient = require('thingspeakclient');
var client = new ThingSpeakClient();
var channelId = '<Channel ID>';
var writekey = '<your Write API Key>';
var readkey = '<your Read API Key>';
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
client.attachChannel(
channelId,
{writeKey : writekey, readKey : readkey}
);
temperature.on("data", function() {
console.log(this.celsius + "°C", this.fahrenheit + "°F");
var fields = {field1 : this.celsius, field2 : this.fahrenheit}
client.updateChannel(channelId, fields, function(err, resp) {
if (!err && resp > 0) {
console.log('update successfully. Entry number was: ' + resp);
}
});
});
});
<Channel ID>にチェンネルIDを、<your Write API Key>にWrite API Keyを、<your Read API Key>にRead API Keyを入力します。

③プログラムの実行
1.コマンドプロンプトを起動し、作業用フォルダに移動します。
2.「node 「temp_thingspeak.js」と入力します。

2016年2月9日火曜日

Raspberry Pi + Dweet.IOでIoT

 Arduinoの場合と大差ありませんが、Raspberry Pi の場合の手順について、簡単に解説します。

○開発環境の構築
1.「Raspberry Pi 2のGPIOをJavaScriptで制御する」の手順で、開発環境を構築します。
2. ターミナルから「npm install node-dweetio」と入力し、node.jsのdweetioモジュールをインストールします。

○デバイスの制御
  Dweet.IOを経由して、Raspberry PiのGPIOに接続されたLEDをオン/オフします。回路は「Raspberry Pi  LED点灯(Lチカ)」を使います。

①プログラムの作成

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

var dweetClient = require("node-dweetio");
var dweetio = new dweetClient();
var thingName = "raspi-led-onoff"; //thing nameの設定
var raspi = require('raspi-io');
var five = require("johnny-five");
var board = new five.Board({
io: new raspi()
});
board.on("ready", function() {
var led = new five.Led('P1-7');
// データ受信(購読)
dweetio.listen_for(thingName, function(dweet){
console.log(dweet.content)
if(dweet.content.action === 'on') {
led.on()
} else {
led.off();
}
});
});
view raw led_dweet-pi.js hosted with ❤ by GitHub
2.次のHTMLコードを入力し、「led_dweet-pi.html」と名前を付けて、任意の場所(Webサーバー、インターネット接続された他のPCなども可)に保存します。

 
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>dweet test</title>
<script src="http://dweet.io/client/dweet.io.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function(){
var thingName = "raspi-led-onoff"; //thing nameの設定
// データの送信
function publish(action) {
dweetio.dweet_for(
thingName,
{'action' : action},
function(err, dweet){
console.log(dweet.content);
}
);
}
// [ON]ボタンのクリックで文字列「on」を送信
$('#on-button').click(function(){
publish('on');
});
// [OFF]ボタンのクリックで文字列「off」を送信
$('#off-button').click(function(){
publish('off');
});
});
</script>
</head>
</head>
<body>
<button id="on-button">ON</button>
<button id="off-button">OFF</button>
</body>
</html>
 1、2のコード中のthingNameは一致させます。また、thingNameには、ユニークな名前を指定する必要があります。

②動作の確認
1.ターミナルを起動し、作業用フォルダに移動します。
2.「sudo node led_dweet-pi.js」と入力します。
3.ブラウザで「led_dweet-pi.html」を開き、[ON]ボタンのクリックでLEDが点灯し、[OFF]ボタンのクリックでLEDが消灯することを確認します。

○データの可視化
  Dweet.IOとfreeboardを使って、Raspberry Pi で計測したアナログデータを可視化(グラフか)します。回路は、「Raspberry Pi アナログデータ計測」を使用します。

①プログラムの作成 1.次のJavaScriptコードを入力し、「analog_dweet-pi.js」と名前を付けて、作業用フォルダに保存します。
var dweetClient = require("node-dweetio");
var dweetio = new dweetClient();
//thing nameの設定
var thingName = "raspi-analog-data";
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() {
console.log(this.value);
dweetio.dweet_for(
thingName,
{'data' : this.value},
function(err, dweet){
console.log(dweet);
}
);
});
});
②freeboardの準備  「Arduino+dweet.io+freeboardでIoT - データの可視化」の「freeboardの準備」の手順で、スパークラインのウィジェットを作成します。



2016年2月5日金曜日

Arduino+dweet.io+freeboardでIoT - データの可視化

 freeboardは、IoTのデータを可視化するクラウドサービスです。dweet.ioやPubNubと連携することがきます。

今回は、dweet.ioとfreeboardを使って、Arduinoで計測した温度データをグラフ化する方法を説明します。回路は、「Arduino 温度測定」を使用します。



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

②プログラムの作成
1.次のJavaScriptコードを入力し、「temp_dweet.js」と名前を付けて、作業用フォルダに保存します。
var dweetClient = require("node-dweetio");
var dweetio = new dweetClient();
//thing nameの設定
var thingName = "arduino-temperature";
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var temperature = new five.Thermometer({
controller: "LM35",
pin: "A0",
freq: 10000 // サンプリング間隔(ms)
});
temperature.on("data", function() {
console.log(this.celsius + "°C");
dweetio.dweet_for(
thingName,
{'temperature' : this.celsius},
function(err, dweet){
console.log(dweet);
}
);
});
});
dweet.ioでは、「thing-name」を使ってデータ(メッセージ)の送受信を行います。「thing-name」には、ユニークな名前を指定します。
データは、{ Key : Value}の形式で、Keyにはデータ名、Valueに値を設定します。

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

②データソースの作成
1.右上の入力ボックスに新しいfreeboardの名前を入力し、[Create Now]をクリックします。

2.[ADD]をクリックします。


3.「TYPE」から「Dweet.io」を選択し、「NAME」にデータソースの名前(任意)を、「THING-NAME」に「thing-name」を入力し、[SAVE]をクリックします。


 データソースを作成したら、②で作成したプログラムを実行します。データが正しく取得されると、作成したデータソースのLast Updatedが日付に代わります。

③パネルの作成
1.[ADD PANEL]をクリックします。


2.作成されたパネルのレンチアイコンをクリックします。


3.「TITLE」と「COLUMNS」を入力し、[SAVE]をクリックします。「COLUMNS」はパネルの横幅の設定です。


4.パネルの[+]アイコンをクリックします。


5.「TYPE」から「Sparkline」を選択し、「TITLE」を入力して、[DATASOURCE]をクリックします。


6.データソース名(②-3)で指定した名前を選択します。


7.データ名(プログラム中のKeyに指定したデータ名)を選択します。


8.[SAVE]をクリックします。

2016年2月4日木曜日

Arduino+dweet.ioでIoT - デバイスの制御

 dweet.ioは、アカウントを登録することなく利用できるIoTプラットフォーム(クラウドサービス)です。ユニークな「thing-name」(モノの名前、PubNuBのチャンネル名と同等)を使って、データの送受信を行うことができます。有料で「thing-name」を固定(Locked)し、データを監視・通知する「Alerts」機能を利用することもできます。 

 今回は、dweet.ioを使用して、ArduinoのGPIOに接続されたLEDをオン/オフしてみます。 回路は、「Arduino LED点灯(Lチカ)」を使用します。

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

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

var dweetClient = require("node-dweetio");
var dweetio = new dweetClient();
var thingName = "arduino-led-onoff"; //thing nameの設定
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(5);
// データ受信(購読)
dweetio.listen_for(thingName, function(dweet){
console.log(dweet.content)
if(dweet.content.action === 'on') {
led.on()
} else {
led.off();
}
});
});
view raw led_dweet.js hosted with ❤ by GitHub
2.次のHTMLコードを入力し、「led_dweet.html」と名前を付けて、任意の場所(Webサーバー、インターネット接続された他のPCなども可)に保存します。

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>dweet test</title>
<script src="http://dweet.io/client/dweet.io.min.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(function(){
var thingName = "arduino-led-onoff"; //thing nameの設定
// データの送信
function publish(action) {
dweetio.dweet_for(
thingName,
{'action' : action},
function(err, dweet){
console.log(dweet.content);
}
);
}
// [ON]ボタンのクリックで文字列「on」を送信
$('#on-button').click(function(){
publish('on');
});
// [OFF]ボタンのクリックで文字列「off」を送信
$('#off-button').click(function(){
publish('off');
});
});
</script>
</head>
<body>
<button id="on-button">ON</button>
<button id="off-button">OFF</button>
</body>
</html>
view raw led_dweet.html hosted with ❤ by GitHub
③動作の確認
1.コマンドプロンプトを起動し、作業用フォルダに移動します。
2.「node led_dweet.js」と入力します。
3.ブラウザで「led_dweet.html」を開き、[ON]ボタンのクリックでLEDが点灯し、[OFF]ボタンのクリックでLEDが消灯することを確認します。

Raspberry Pi アナログデータ計測

・使用部品
 PCF8591AD/ DAコンバータモジュール(YL-40)

Raspberry Pi LED点灯(Lチカ)


・使用部品
 LED
 抵抗(220~330Ω)

Arduino 温度測定


・使用部品
 LM35(LM35DZ)

Arduino LED点灯(Lチカ)

・使用部品
 LED
 抵抗(220~330Ω)

2016年2月3日水曜日

ArduinoとRaspberry PiのKindle本の出版

ArduinoとJavaScriptではじめるIoTプログラミング

Raspberry PiとJavaScriptではじめる IoTプログラミング

 上記タイトルのKindle本を出版してみました。 このブログで公開している記事をブラッシュアップ、および加筆した内容となっています。 Raspberry Piのほうは、OSのインストール、日本語化、sambaやxrdpのセットアップなどについても解説しています。