littleBitsのボタンを押すとIFTTT経由でLINEにメッセージが飛ぶ仕組みを作ってみよう

田中正吾


littleBitsのボタンを押すとIFTTT経由でLINEにメッセージが飛ぶ仕組みを作ってみよう

こんにちは、dotstudioライターの田中正吾です。電子回路のパーツを磁石でパチパチとつなげるだけで電子工作ができる「littleBits」の連載第6回目となりました。

今回は、前回おこなったlittleBitsへの入出力を発展させて、Node.jsを使いlittleBitsのボタンを押すとLINEに通知が行く仕組みを作りたいと思います。使うのは、前回に続きlittleBits Arduinoモジュールです。では、さっそく始めていきましょう!

URLを叩くとlittleBitsが反応するようにする

image

前回までの仕組みはこちらです。入力すると、出力がすぐに反応します。

 
image

そして、こちらが今回の仕組みです。/output/2というURLをNode.jsローカルサーバーで叩くと、littleBitsが動きます

これらやり取りには以下の追加ライブラリが必要なので、インストールしておきます。

npm install body-parser request

ソースコードは以下のとおりです。

// Serial Port ///////////////////////////////

var serialport = require('serialport');
var portName = 'COM3'; // Win環境
var sp = new serialport.SerialPort(portName, {
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
    parser: serialport.parsers.readline(\"\
\")
});

// シリアルポートからの入力
// littleBitsのポート2でONの反応がある
sp.on('data', function(input) {
    var buffer = new Buffer(input, 'utf8');
    try {
        console.log('serialport buffer: ' + buffer);
        if( buffer == 2 ){
            // /input/2
            console.log('/input/2');
        }
    } catch(e) {
        return;
    }
});

// Server /////////////////////////////////

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.listen(app.get('port'), function() {
    console.log(\"Node app is running at localhost:\" + app.get('port'));
});

// 出力2を反応させる
app.get('/output/2', function(req, res){
    res.send(\"/output/2\");
    console.log(\"/output/2\");
    sp.write('2',function(err,results){
        console.log('sp.write');
        console.log(err);
        console.log(results);
    })
});


// root
app.get('/', function(req, res){
    res.send(\"Hello littleBits Arduino!!\");
    console.log(\"/\");
});

サーバーを立ち上げます。

node index.js

これで準備完了です。

 
b87a488e-fb69-04f3-6915-3ecb8778c791

Node.jsローカルサーバーにURLを叩くと、littleBitsが反応します。ノートPCだと実感が湧きづらいですが、例えばRaspberryPiにlittleBits Arduinoモジュールを繋げれば、ローカルネットワークから制御できるものになります。

IFTTTを使い、littleBitsとLINEを連携する

image

URLを叩くとlittleBitsが反応する仕組みを無事作れたので、今度はボタンが押されるとIFTTT経由でLINEメッセージが飛ばされるというのをやってみます。

今回ウェブサービス同士を連携できる「IFTTT」というものを使います。こちらの記事を参考にしながら進めましょう。

1. LINE Channelのアクティベート

image

まず、LINE Channelのアクティベートをします。ChannelsからLINEを検索して、選択してください。

 
image

Connectをクリックします。

 
image

LINE側のアクティベートページに飛ぶので、「同意して連携する」をクリックします。

 
image

自分のアカウント情報を入力してアクティベートします。

 
image

これでLINE Channelの登録ができました。

2. IFTTTでレシピを作る

image

続いて、Maker ChannelとLINE Channelのレシピを作ります。
「Create a Recipe」を選択し、まずは「this」をクリックしましょう。

 
image

「Maker Channel」を検索してクリックします。

 
image

「Receive a web request」をクリックします。

 
image

Event Name(イベントの名前)は「LINEMessage」にしてみました。

 
image

thisが選択できたので、thatをクリックします。

 
image

LINE Channelを検索してクリックします。

 
image

Send Messageをクリック。

 
image

Actionを決める画面に遷移します。

 
image

Recipientは「1:1でLINE Notifyから通知を受け取る」を選びます。

 
image

Messageはこのようにしておきます。

 
image

Create Actionボタンを押して作成完了です。

3. プログラムの改修

続いて、先ほどのLEDを光らせたソースコードに、IFTTTとのやり取りができる機能を載せます。ソースコードを以下のように改変します。

// Serial Port ///////////////////////////////

var serialport = require('serialport');
var portName = 'COM3'; // Win環境
var sp = new serialport.SerialPort(portName, {
    baudRate: 9600,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
    flowControl: false,
    parser: serialport.parsers.readline(\"\
\")
});

// IFTTT用の設定
var IFTTT_EVENT_NAME = 'LINEMessage';
var IFTTT_SECURITY_KEY = '------------MakerChannelのセキュリティキーを入力------------';

// シリアルポートからの入力
// littleBitsのポート2でONの反応がある
sp.on('data', function(input) {
    var buffer = new Buffer(input, 'utf8');
    try {
        console.log('serialport buffer: ' + buffer);
        if( buffer == 2 ){
            // /input/2
            console.log('/input/2');

            var _request = require('request');

            var options = {
                uri: 'http://maker.ifttt.com/trigger/' + IFTTT_EVENT_NAME + '/with/key/' + IFTTT_SECURITY_KEY,
                form: {
                    value1:'littleBits ボタンモジュール',
                    value2:'いまボタンが押されました!!!!!!!',
                    value3:3
                },
                json: true
            };

            console.log('---------- [output]');
            console.log(options);

            _request.post(options, function(error, response, body){
                if (!error && response.statusCode == 200) {
                    console.log(body);
                } else {
                    console.log('error: '+ response.statusCode);
                }
            });

        }
    } catch(e) {
        return;
    }
});

// Server /////////////////////////////////

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.listen(app.get('port'), function() {
    console.log(\"Node app is running at localhost:\" + app.get('port'));
});

// 出力2を反応させる
app.get('/output/2', function(req, res){
    res.send(\"/output/2\");
    console.log(\"/output/2\");
    sp.write('2',function(err,results){
        console.log('sp.write');
        console.log(err);
        console.log(results);
    })
});


// root
app.get('/', function(req, res){
    res.send(\"Hello littleBits Arduino!!\");
    console.log(\"/\");
});

以上です。

// IFTTT用の設定
var IFTTT_EVENT_NAME = 'LINEMessage';
var IFTTT_SECURITY_KEY = '------------MakerChannelのセキュリティキーを入力------------';
form: {
   value1:'littleBits ボタンモジュール',
   value2:'いまボタンが押されました!!!!!!!',
   value3:3
},

こちらでIFTTT用の設定をおこなっています。
IFTTT用のURLを作るときに使用します。

 
image

------------MakerChannelのセキュリティキーを入力------------の部分は、Maker Channelの設定のYour key is以下のキーを使いましょう。

起動

サーバーを立ち上げます。

node index.js

これで準備完了です。

 
image_20160929_213205_50.jpg

littleBitsのボタンを押すと……

 

image

先ほど設定していたIFTTTからLINEにメッセージが来ます。
LINE Notifyという新しい友だちが登録されてます。

 

image_20160929_213001_44.png

見てみると、無事メッセージが届いていました!

 
image_20160929_213205_50.jpg

たくさん押すと、

 

image_20160929_213013_45.png

もういいよってくらいメッセージで埋め尽くされます。

おわりに

今回はNode.jsでlittleBitsへ簡単に入出力する方法を発展させて、ネットワークと連携してLINEに投稿するところをお伝えしました。

ここまでできるようになると、IFTTT経由でTwitterで何か反応があればlittleBitsのLEDを光るといったような、WEBとlittleBitsのハードを結びつけて、さまざまなことが試せるようになります! 

みなさんも、ぜひいろいろなことを試してみてはいかがでしょうか。

田中正吾
この記事を書いた人
田中正吾

外部ライター 東京

関連記事