2016年1月5日火曜日

Adafruit IO+Raspberry Pi+MQTTでIoT

 Adafruit IOとRaspberry Piを使用して、センサー・データの収集、およびデバイスを制御する方法を説明します。通信には、MQTTを使用します。

■開発環境の準備
①Raspberry Piのセットアップ
 「Raspberry Pi 2のGPIOをJavaScriptで制御する」の手順で開発環境をセットアップします。

②Adafruit IOの準備
1.Adafruit IOのアカウントを作成します。
2.アカウントを作成すると、「Welcome Dashboard」が表示されるので、右上の鍵アイコン(Your secret AIO KEY)をクリックし、AIO KEYを確認します。












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

■センサー・データの収集
①回路の配線
 「Raspberry Pi+Johnny-Fiveでアナログデータを計測する」の回路を配線します。

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

var raspi = require('raspi-io');
var five = require('johnny-five');
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://io.adafruit.com', {
port: 1883,
username: '[USER NAME]',
password: 'YOUR AIO KEY'
});
client.on('connect', function () {
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 / 10);
// Topic name(トピック名)を「<user name>/feeds/<feed name>」の形式で指定
client.publish('[Topic name]',String(this.value / 10));
});
})()
});)
view raw publisher-pi.js hosted with ❤ by GitHub
 [USER NAME]には、Adafruit IOのユーザ名を、[YOUR AIO KEY]には③-2で確認したAIO KEYを入力します。
 [Topic name]には、トピック名を「<ユーザー名>/feeds/<フィード名>」の形式で指定します。「Welcome Dashboard」の各ブロックは、「Welcome Feed」フィードに紐づけされているので、ユーザー名が「taro」なら、「taro/feeds/Welcome Feed」になります。
 Adafruit IOのFeed(フィード)は、いわゆるデータを管理するオブジェクトです。このFeedを使用して、データの送受信を行います。

2.ターミナルから「sudo node publisher-pi.js」と入力します。
3.Adafruit IOの「Welcome Dashboard」ダッシュボードを開きます。

 センサーデータを監視する方法は、「Adafruit IO+IFTTTでセンサー・データを監視・通知する」を参照してください。

■デバイスの制御
①回路の配線
 次のように回路を配線します。















②Adafruit の準備
 「Adafruit IO+Arduino+MQTTでIoT‐デバイスの制御」の③の手順で、フィード、ダッシュボード、ブロックを作成します。

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

var raspi = require('raspi-io');
var five = require('johnny-five');
var board = new five.Board({
io: new raspi()
});
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://io.adafruit.com', {
port: 1883,
username: '[USER NAME]',
password: '[YOUR AIO KEY]' });
client.on('connect', function () {
// Topic name(トピック名)を「<user name>/feeds/<feed name>」の形式で指定する
var feed = '[Topic name]';
client.subscribe(feed);
client.publish(feed,'OFF');
});
board.on("ready", function() {
var led = new five.Led('P1-7');
// メッセージの受信
client.on('message', function (topic, message) {
console.log(message.toString());
if(message.toString() === 'ON'){
led.on();
} else {
led.off();
}
});
});
 [USER NAME]には、Adafruit IOのユーザ名を、[YOUR AIO KEY]にはAIO KEYを入力します。
 [Topic name]には、トピック名を「<ユーザー名>/feeds/<フィード名>」の形式で指定します。今回は、「LED」フィードを使用するので、ユーザー名が「taro」なら、「taro/feeds/LED」となります。

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

④動作の確認
 Adafruit IOのダッシュボードのスイッチを操作し、LEDがオン/オフすることを確認ます。

0 件のコメント:

コメントを投稿