Skip to content

Instantly share code, notes, and snippets.

@watanabe-tsubasa
Last active November 7, 2021 10:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save watanabe-tsubasa/48c640d61dbdd1a4d5aaea1892dc9e7b to your computer and use it in GitHub Desktop.
Save watanabe-tsubasa/48c640d61dbdd1a4d5aaea1892dc9e7b to your computer and use it in GitHub Desktop.
IoTLT

段階

  • 10秒ごとに温度をとる。30秒間計3回。1回ずつコメント変えて、30秒時点での温度でコメントをLINEBotに(変わっていない:禰󠄀豆子、低い:しのぶ、中:冨岡、高:煉獄)
  • 温度変化の度合いによってフルカラー LEDの色が変わる。(+5度以下:青、+5〜+10:緑、+10以上:赤)
  • 最後のコメントは画像にしたいな
  • 最後、煉獄からのコメント判定の場合は炎が流れる
//全体で使う部分
let count = 0;
let pillar = 0;
// ########################################
// obniz処理部分
// Obniz_ID:自分のobniz ID(XXXX-XXXX)
// ########################################
const Obniz = require('obniz');
const obniz = new Obniz('');
let rgbled;
// obnizと接続確立したとき
// obnizと接続確立したとき
obniz.onconnect = async () => {
obniz.display.clear();
obniz.display.print('obniz Ready');
rgbled = obniz.wired("WS2811", {gnd: 0, vcc: 1, din: 2});
rgbled.rgb(255, 255, 255);
// rgbled.rgb(255, 0, 0)//赤: 煉獄 1
// rgbled.rgb(0, 255, 0)//緑:
// rgbled.rgb(0, 0, 255)//青: 冨岡 2
// rgbled.rgb(148, 0, 211)//紫:しのぶ 3
// rgbled.rgb(255, 192, 203)//ピンク: 禰󠄀豆子 4
if(pillar === 1) {
rgbled.rgb(255, 0, 0)//赤: 煉獄 1
} else if(pillar === 2) {
rgbled.rgb(0, 0, 255)//青: 冨岡 2
} else if(pillar === 3){
rgbled.rgb(148, 0, 211)//紫:しのぶ 3
} else if(pillar === 4){
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4
} else {
rgbled.rgb(255, 255, 255);
}
}
// 温度センサから値を取得して返す
const getObnizTemp = async () => {
// 温度センサの利用
const tempsens = obniz.wired('LM60', { gnd: 9, output: 10, vcc: 11 });
// 非同期で取得
const temp = await tempsens.getWait();
// ターミナル表示
console.log('obniz temp:', temp);
// obnizディスプレイ表示
obniz.display.clear();
obniz.display.print(temp + ' C');
// 温度値を返す
return temp;
}
// 炎
//const sindibaad = async () => {
// const speaker = obniz.wired('Speaker', { signal: 5, gnd: 6 });
// speaker.play(scData.E5);await obniz.wait(300);speaker.stop();await obniz.wait(50);
//}
// ########################################
// LINEBot イベント処理部分
// channelSecret:LINE Developers → チャネル基本設定 → チャネルシークレット
// channelAccessToken:LINE Developers → Messaging API設定 → チャネルアクセストークン(長期)
// ターミナルで `ngrok http 3000` 実行後、発行されたURLをWebhook URLとして設定するのを忘れずに
// 「検証」ボタンをクリックするとターミナルにエラーが出ますがここでは問題ありません(検証イベントのハンドリングをしていないため)
// ########################################
const config = {
channelSecret: '',
channelAccessToken: ''
};
const line = require('@line/bot-sdk');
const client = new line.Client(config);
// ExpressからMessaging APIイベントを渡されて処理するところ
const handleEvent = async (event) => {
// テキストメッセージ以外を受信したときは何も行わずresolveを返す
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
} else if (event.message.text === '全集中') {
// 待ってねというメッセージを「リプライ」で先に返す
await client.replyMessage(event.replyToken, {
type: 'text',
text: '心を燃やせ'
});
let temp = 0;
let startTemp =await getObnizTemp();
const intervalid = setInterval(async () =>{
temp = await getObnizTemp();
if(count === 0){
if(temp > startTemp + 3){//煉獄1
client.pushMessage(event.source.userId, {
type: 'text',
text: 'うむ!いい心掛けだ!',
});
pillar = 1;
}else if(temp > startTemp + 2){//冨岡1
client.pushMessage(event.source.userId, {
type: 'text',
text: 'こいつは何か違うかもしれない',
});
pillar = 2;
}else if(temp > startTemp){//しのぶ1
client.pushMessage(event.source.userId, {
type: 'text',
text: 'もしもし 大丈夫ですか?',
});
pillar = 3;
}else{//禰󠄀豆子1
client.pushMessage(event.source.userId, {
type: 'text',
text: 'ムー',
});
pillar = 4;
}
if(pillar === 1) {
console.log('pillar = 1');
rgbled.rgb(255, 0, 0)//赤: 煉獄 1
} else if(pillar === 2) {
console.log('pillar = 2');
rgbled.rgb(0, 0, 255)//青: 冨岡 2
} else if(pillar === 3){
console.log('pillar = 3');
rgbled.rgb(148, 0, 211)//紫:しのぶ 3
} else if(pillar === 4){
console.log('pillar = 4');
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4
} else {
console.log('pillar = 5');
rgbled.rgb(255, 255, 255);
}
}
else if(count === 1){
if(temp > startTemp + 5){//煉獄2
client.pushMessage(event.source.userId, {
type: 'text',
text: '昨日の自分より確実に強い自分になれるぞ',
});
pillar = 1;
}else if(temp > startTemp + 3){//冨岡2
client.pushMessage(event.source.userId, {
type: 'text',
text: 'つらいだろう、叫びだしたいだろう、わかるよ',
});
pillar = 2;
}else if(temp > startTemp + 1){//しのぶ2
client.pushMessage(event.source.userId, {
type: 'text',
text: 'そんなだからみんなに嫌われるんですよ',
});
pillar = 3;
}else{//禰󠄀豆子2
client.pushMessage(event.source.userId, {
type: 'text',
text: 'ムムー',
});
pillar = 4;
}
if(pillar === 1) {
rgbled.rgb(255, 0, 0)//赤: 煉獄 1
} else if(pillar === 2) {
rgbled.rgb(0, 0, 255)//青: 冨岡 2
} else if(pillar === 3){
rgbled.rgb(148, 0, 211)//紫:しのぶ 3
} else if(pillar === 4){
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4
} else {
rgbled.rgb(255, 255, 255);
}
} else if(count === 2){
if(temp > startTemp + 12){//煉獄3
client.pushMessage(event.source.userId, {
type: 'text',
text: '胸を張って生きろ',
});
pillar = 1;
}else if(temp > startTemp + 6){//冨岡3
client.pushMessage(event.source.userId, {
type: 'text',
text: 'お前のその実力は柱に届くと言っても過言ではない',
});
pillar = 2;
}else if(temp > startTemp + 2){//しのぶ3
client.pushMessage(event.source.userId, {
type: 'text',
text: 'とっととくたばれ糞野郎',
});
pillar = 3;
}else{//禰󠄀豆子3
client.pushMessage(event.source.userId, {
type: 'text',
text: 'これは爆血やな',
});
pillar = 4;
}
if(pillar === 1) {
rgbled.rgb(255, 0, 0)//赤: 煉獄 1
} else if(pillar === 2) {
rgbled.rgb(0, 0, 255)//青: 冨岡 2
} else if(pillar === 3){
rgbled.rgb(148, 0, 211)//紫:しのぶ 3
} else if(pillar === 4){
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4
} else {
rgbled.rgb(255, 255, 255);
}
}
console.log(temp);
console.log(count++);
if(count > 2) {
clearInterval(intervalid);
count = 0;
}
}, 5000);// obnizの温度センサから値をとってくる(ブロッキング・時間のかかる処理で一旦ここで止まる)
} else {
// メッセージの中身が「全集中」以外だったとき
client.replyMessage(event.replyToken, {
type: 'text',
text: '集中が足りていない'
});
}
// resolveを返す
return Promise.resolve(null);
}

まさかconstとletの間違いでエラーが出ていたとは。 TypeError: Assignment to constant variable. これが目印 禰󠄀豆子:ムー、ムムー、これは爆血やな しのぶ:もしもし 大丈夫ですか?、そんなだからみんなに嫌われるんですよ、とっととくたばれ糞野郎 冨岡:こいつは何か違うかもしれない、つらいだろう、叫びだしたいだろう、わかるよ、お前のその実力は柱に届くと言っても過言ではない 煉獄:うむ!いい心掛けだ!、昨日の自分より確実に強い自分になれるぞ、胸を張って生きろ

全力で息を吹きかけたデータは以下の通り obniz temp: 15 obniz temp: 25.3 25.3 0 obniz temp: 29.9 29.9 1 obniz temp: 29.1 29.1 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment