Open21

obniz×LINEbotでファミリー向けIoT制作

okinaka masayoshiokinaka masayoshi

今回の目標

①obnizとLINEbotの技術を組み合わせる
②obnizはセンサまたはアクチュエータのいずれかを1つ以上使用
マトリックスLEDに文字描画させてみる
子育てママに刺さる企画・見せ方を狙う(Qiita記事 LGTM 30以上)

okinaka masayoshiokinaka masayoshi

企画アイデア

センサーを使って子どもの身長を計る
結果はLINEとマトリックスLEDで帰ってくる
身長プラス子供の興味を引く何か 〇〇と一緒の身長だよ などで一工夫
最後に「お母さんに〇〇と言おう」の一言をつける
➡ひとことは固定しない 子供自身の気持ちを言わせる 母は本当に嬉しい

企画としては「身長計る」ではなく「お母さんに感謝」方向でいく

時事ネタも織り交ぜる

okinaka masayoshiokinaka masayoshi

メモ

奥さんかが「ヒカキンの動画が面白い」というので見てみた
~スーパーカップで蒸しパン作ってみた~
なるほど~非線形だな~と思いつつよく考えるとヒカキンって
こんなとがったアイデアずっと出し続けてるんだなぁすごいと感嘆

ヒカキンの頭の中のアート思考 紐解いてみたい

多分「毎日更新」をやり続けて
どうやったらリスナーに刺さるのか をとんでもない回数試行錯誤してるのだろうな
それができるのも「好きだから」なんだろうな ヒカキンはすごい

okinaka masayoshiokinaka masayoshi

文字が流れるようになった!

const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
 
    const matrix = obniz.wired("MatrixLED_MAX7219", {
        vcc: 4,
        gnd: 3,
        din: 2,
        cs: 1,
        clk: 0
      });
      matrix.init(8 * 4, 8);
      matrix.brightness(7);
    
      const ctx = obniz.util.createCanvasContext(matrix.width, matrix.height);
    
      x = matrix.width;
      obniz.repeat(async function() {
        ctx.fillStyle = "black";
        ctx.fillRect(0, 0, matrix.width, matrix.height);
        ctx.fillStyle = "white";
        ctx.font = "9px sans-serif";
        ctx.fillText("おきなかうたちゃん きょうはラーメンたべようね たのしみだね", x, 7);
        x--;
    
        matrix.draw(ctx);
      }, 1000 / 80);
    };

okinaka masayoshiokinaka masayoshi

トラブル 距離センサーの結果をマトリクスに表示させられない

console.logではでるのになぜ。。

もしかしたら電力不足かも

いやきっと違う console.log は出ているし LEDもついているので 原因は別

先にラインボットとの連携を試す

https://forum.obniz.com/topic/26/サーボモーター接続時の不安定現象

okinaka masayoshiokinaka masayoshi

距離センサー

const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    hcsr04.measure(function( distance ){
      console.log("distance " + distance + " mm")
    })
}
okinaka masayoshiokinaka masayoshi

ターミナルには結果が返るがLINEで結果返らず

  // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    hcsr04.measure(function( distance ){{
    var height=2220-distance
    }
      console.log("距離は" + height + " mm")
      })

    await client.pushMessage(userId, {
     type: 'text',
     text: "距離は" + height + " mm",
   })
  }

https://qiita.com/okinakamasayoshi/questions/71d3611aa7e6e1515cca

ターミナルで返ってくるエラー

text: "距離は" + height + " mm",
^
ReferenceError: height is not defined

okinaka masayoshiokinaka masayoshi

LINEで結果が返ってきた!!

    // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    const distance = await hcsr04.measureWait();{{
    var height=2220-distance
    }
      console.log("距離は" + height + " mm")
      }

    await client.pushMessage(userId, {
     type: 'text',
     text: "距離は" + height + " mm",

【自分なりの解釈】

okinaka masayoshiokinaka masayoshi

LINEでobniz起動 結果を返信 完成

'use strict';
const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
    obniz.display.clear();
    obniz.display.print("obniz meets LINE Bot!");
  }

const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');

const PORT = process.env.PORT || 3000;

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


const sampleFunction = async (event) => {
    if (event.type !== 'message' || event.message.type !== 'text') {
      return Promise.resolve(null);
    }
  
    let mes = ''
    if(event.message.text === 'わたしおおきくなったかな・・・'){
      mes = 'はかってみるね!☻'; //処理するまでこちらを表示
      getkyori(event.source.userId);
    }else{
      mes = event.message.text;
    }
  
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: mes
    });
  }
  const getkyori = async (userId) => {
    // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    const distance = await hcsr04.measureWait();{{
    var height=((2242-distance)/10)
    //天井の高さから距離を引いて身長を割り出す
    }
      console.log("身長は" + height + " cm")
      }

    await client.pushMessage(userId, {
     type: 'text',
     text: "身長は" + height + " cm",
   })
  }
okinaka masayoshiokinaka masayoshi

LINEで結果がかえってきたその②

  // 距離センサーを呼び出す
var hcsr04 = obniz.wired("HC-SR04", { gnd: 8, echo: 9, trigger: 10, vcc: 11 });

hcsr04.measure(
  function(distance){
    var height = 2220 - distance;
    console.log("距離は" + height + " mm");

    client.pushMessage(
      userId,
      {
        type: 'text',
        text: "距離は" + height + " mm",
      }
    );
  }
)}

この方法でも返ってきました!!助けてもらって感謝( ;∀;)

https://qiita.com/okinakamasayoshi/questions/71d3611aa7e6e1515cca