はじめに
ずっと前にやりかけだった(記事には投稿してない)LINE Clovaの「抵抗値換算」のスキルをちゃんと作ってみました。サーバは別記事と同様に「Firebase」を使いました。
「抵抗値換算」について
電子工作に使う抵抗素子には「カラーコード」と呼ばれるものが表示されています。このカラーコードの並びから抵抗値を読み取ることができますが、電子工作に慣れていない人には「カラーコード -> 抵抗値」への変換がすぐには難しいです。そこでこのスキルを使ってClovaの前でカラーコードの色の並びを読み上げて、それを抵抗値に変換したものをClovaに読んでもらうものを作りました。
このスキルでは精密抵抗器を無視した4つのカラーコードの並びで、このサイトの「よく使われる抵抗の一覧表」の抵抗素子に対応します(ArduinoでLEDやセンサを使う場合は1kか10kの数値のものしか基本は使わないかと)。
Firebaseの初期設定
手順についてはこの記事を参考にしてます。
まずはFirebase CLIをインストールします。
npm install -g firebase-tools
-g
を使ってグローバルにインストールします。場合によってはpermissionではじかれる可能性もあるのでsudo
が必要かも?
次にログインします。
firebase login
ここら辺はターミナルに言われるまま操作すれば問題ないかと。次にプロジェクトを作成します。
firebase init functions
既存のプロジェクトを選択・新しくプロジェクトを作成する、の2択が選べます。
次にFirebaseにデプロイします。
firebase deploy --only functions,hosting
その他の設定
環境変数は以下のコマンドで設定可能です。
firebase functions:config:set clova.extension.id="your extension id"
環境変数の確認は以下のコマンドを用います。
firebase functions:config:get
コード上で用いたい場合は、以下のようにして呼び出します。
const extensionId = encodeURIComponent(functions.config().clova.extension.id);
また、firebase.json
は以下のように設定しました。
{
"hosting": {
"public": "./",
"rewrites": [{
"source": "/clova",
"function": "clova"
}],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Clovaの開発について
expressを用いたスキルの開発はこのサイトを参照して行いました。
functions/
上で以下のコマンドを用いて必要なpackageをインストールします。
npm install --save https://github.com/TanakaMidnight/clova-cek-sdk-nodejs express body-parser
Clovaの公式SDKを用いない理由はこの記事を参照してください。
カラーコードから抵抗値への変換
まず連想配列を用意しました。色をkey
に対応する数値をvalue
に設定してます。
const colorcodes = { 黒:0, 茶:1, 赤:2, 橙:3, 黄:4, 緑:5, 青:6, 紫:7, 灰:8, 白:9 };
抵抗値の計算は以下の式で求めます
RegistorValue = (FirstColor\times 10 + SecondColore) \times 10^{ThirdColor}
FirstColor ~ ThirdColor
は「金」を最終端としたときの各色です。
進捗
このスキル開発の記事は何回かに分けて投稿します。とりあえず今回はスキル起動時のメッセージのレスポンスと、「カラーコード -> 抵抗値」まで実装しました。こんだけの内容に今日の一日のほとんどを費やしましたw(カラーコードからの変換をCloud Firebaseを使ってやろうとしたけど非同期処理をうまく操れなかったとか、Clovaの公式のSDKとexpressの相性の悪さで悩むとか)また、Clovaのテストは今日はClova Developer Centerのテスト機能を用いました。
起動時の挨拶
カラーコードから抵抗値への変換
今後やりたいこと
- 「抵抗値 -> カラーコード」への変換
- 1000以上の抵抗値をキロ読みにする
- 「カラーコードの覚え方」のインテントを作る
さいごに
レポジトリ公開してます。GWまでには完成させたいです。そしてTシャツ欲しいです。