【obnizで格闘中】LINEBotとobniz連携について教えて下さいませ!
Q&A
Closed
目標(ゴール)
LINEBotに通知がきたら、obnizと連携したLEDが光る。
また、スピーカーから好きな曲が流れる仕組みを制作したいと考えております。
解決したいこと
現在悩んでいるところが、obnizを活用し、音とLEDを連携させるところまで実施出来ているのですがLINEBotと連携させる所で悩んでおります。
(好きな曲は、後回しにしております。音階周波数で制作します)
— YE0905 (@EgashiraYosuke) October 20, 2021
開発環境
・obniz公式ドキュメント(起動とWi-Fi設定)
・obniz公式ドキュメント(Speaker)
・Visual Studio Code
・LINEBot参考ページ
該当するソースコード
LINEとobnizを連携させるところで躓いております。
サンプルコード (クリックで表示)
const Obniz = require('obniz');
const { exit } = require('process');
const obniz = new Obniz('obniz_ID'); // Obniz_IDに自分のIDを入れます
const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;
// Messaging APIで利用するクレデンシャル(秘匿情報)です。
const config = {
channelSecret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
channelAccessToken: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
};
const app = express();
const app = express();
// HTTP POSTによって '/webhook' のパスにアクセスがあったら、POSTされた内容に応じて様々な処理をします
app.post('/webhook', line.middleware(config), (req, res) => {
// 検証ボタンをクリックしたときに飛んできたWebhookを受信したときのみ以下のif文内を実行
if (req.body.events.length === 0) {
res.send('Hello LINE BOT! (HTTP POST)'); // LINEサーバーに返答します(なくてもよい)
console.log('検証イベントを受信しました!'); // ターミナルに表示します
return; // これより下は実行されません
} else {
// 通常のメッセージなど … Webhookの中身を確認用にターミナルに表示します
console.log('受信しました:', req.body.events);
}
// あらかじめ宣言しておいた "handleEvent" 関数にWebhookの中身を渡して処理してもらい、
// 関数から戻ってきたデータをそのままLINEサーバーに「レスポンス」として返します
Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});
const client = new line.Client(config);
// obniz接続
obniz.onconnect = async function () {
obniz.display.clear();
obniz.display.print("obniz meets LINE Bot!");
}
function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}
let mes = ''
if(event.message.text === '帰るね!'){
mes = 'すこしまってね'; //メッセージだけ先に処理
getAskObnizSpeaker(event.source.userId); //スクレイピング処理が終わったらプッシュメッセージ
}else{
mes = event.message.text;
}
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}
const getAskObnizSpeaker = async (userId) => {
// スピーカーを呼び出す
const speaker = obniz.wired("Speaker", {signal:0, gnd:1});
console.log("Speaker")
await client.pushMessage(userId, {
type: 'text',
text: "了解!気を付けて!",
});
// 任意の秒数待つことができる関数
// 参考: https://qiita.com/suin/items/99aa8641d06b5f819656
const sleep = (msec) => new Promise(res => setTimeout(res, msec));
// obnizが接続済み
obniz.onconnect = async function () {
var led = obniz.wired("LED", {anode:0, cathode:1});
led.blink(); // 100msec
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(); // 200msec
var led = obniz.wired("LED", {anode:4, cathode:5});
led.on();
// スピーカーを利用
const speaker = obniz.wired('Speaker', { signal: 10, gnd: 11 });
// ポッ↓
speaker.play(500); await sleep(300); speaker.stop(); await sleep(700);
// ポッ↓
speaker.play(500); await sleep(300); speaker.stop(); await sleep(700);
// ポッ↓
speaker.play(500); await sleep(300); speaker.stop(); await sleep(700);
// ポ~~~ン↑
speaker.play(1000); await sleep(1000); speaker.stop();
// Ctrl+C を打たなくても自動で終了します
exit();
}
自分で試したこと
機材を準備
・LEDは、obniz0~5番繋ぐ。
・スピーカーを10番~11番に繋ぐ。
・Visual Studio Codeで、LINEBotとobnizを連携させる。
・LINEBot準備
Botアカウントの準備は、前回と同様に、こちらの記事
ご教授頂きたいこと
・LINEBotとobnizの連携方法
・LINE通知が来て、一定の時間を経過するとLED光が変化する方法。
今後取り組みたい課題
チャレンジしたいこと
今後赤外線距離センサー赤外線距離センサーを活用し、自宅のポストに投函されたら、LINEの通知が来るようなシステムも制作していきたい思っております。