2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【初心者チャレンジ】obnizと繋げてひかる LINE BOT

Last updated at Posted at 2019-10-22

身の程をわきまえずobnizとLINE BOTを繋げる

今週も懲りずに初心者チャレンジです。とにかく使ってみる。
先日の教訓を活かしひとまず形にする事を最優先に。。。

参考資料

【資料1】1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest
【資料2】老眼と加齢性難聴のチェックができるLINE Bot×Iotの作成

概要

①【資料1】を参考に LINEBOTを作る
②【資料2】を参考に node.jsでobnizと繋げるコードを書いて開発
③【資料1】を参考に ngrokで繋ぐ
④LINEBOTに指示→obnizを起動して光らせる

目標

前回作ったおみくじLINEBOTの結果に合わせて、大吉なら赤、凶なら青など、連動してLEDを光らせたい

環境

Node.js v10.16.3
Windows 10 pro
Visual Studio Code v1.39.1

使用したコード

'use strict';

const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: '',
    channelAccessToken: ''
};

// Obnizの準備
const Obniz = require("obniz");
const obniz = new Obniz("");


const app = express();

app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); // ブラウザ確認用(無くても問題ない)
app.post('/webhook', line.middleware(config), (req, res) => {
  console.log(req.body.events);

  // ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです
  if (req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff') {
    res.send('Hello LINE BOT!(POST)');
    console.log('疎通確認用');
    return;
  }

  Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});

const client = new line.Client(config);

async function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    return Promise.resolve(null);
  }

  let ans = '';
  const question = event.message.text;
  console.log({question});
  // const distance = parseInt(question);

  let color; // LEDの色

  if (question === '赤') {
    ans = '赤色';
    color = [255, 0, 0];
  } else if (question === '青') {
    ans = '青色';
    color = [0, 0, 255];
  }

 
  await obniz.connectWait();
  const leds = obniz.wired('WS2811', {gnd: 0, vcc: 1, din: 2});
  leds.rgbs([color]);

  return client.replyMessage(event.replyToken, {
    type: 'text',
    text: ans, // 実際に返信の言葉を入れる箇所
  });
}

app.listen(PORT);
console.log(`Server running at ${PORT}`);

余談

途中試行錯誤しながらコードをさわるも

55518.jpg

フル無視。
あまりに無視されるのでつい暴言が。

ついに

55521.jpg
やったぞ!!
赤にチェンジだ!!

55522.jpg

よし!!
もう一度青!!
55523.jpg

色は変わったもののまた無視される…なぜだろう、、、
そしてこれ以降赤の指示をしても変わる事はありませんでした。
一度node.jsの実行をやめるとまた色は変わるのですが、各色1回が限度でした。

結果

おみくじと連携させる前段階のラインからの指示ごとに色を変える
-終-

残念な結果に終わりましたがとりあえず一区切りを記事にして、
今回使ったコードを掘り下げたいと思います。
うまく動かなかったものの、自分で少し考えてオリジナルの部分を一部作れたのは今回の嬉しかったポイントです。
はじめは英語の長文羅列のように見えていたコードですが、簡単な数式と束は見つけられるようになりました。
まぁ…動かないんですけどね。
多分階層の組み合わせ方が分かっていないのかな、、、
などと、少しわかっていない所の姿がぼんやりと見えてきたような気がします。
早く眼鏡を手に入れ姿をしっかりつかめるように頑張ります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?