Edited at

わずか300円でIoTボタンを作る方法

More than 1 year has passed since last update.


こんなの見つけたよ

100円ショップで物色していたら、こんなものを見つけたよ。100円ショップなのに300円※だったけど、いろいろ遊べそうなので思わず衝動買いしてしまったよ。 (※あとでAmazonをみてみたら1円から売ってました:cry:

Bluetoothでスマホにコマンドを送れるってことは、スマホではなくラズパイとBluetoothでつなげられれば、物理ボタンとWebを連携させるIoTっぽいことができそうだね。例えばボタンを押すとAmazonで注文できるなんちゃってDashボタンとか。今回は、LINEにメッセージをPush通知するLINEボタンをつくってみるよ。


準備するもの


  • Raspberry-Pi3 (BluetoothがついてればOK)

  • リモートシャッター (AB Shutter 3)


つくりかた


ラズパイとリモートシャッターとの接続

まずはラズパイとリモートシャッターをBluetoothでペアリングするよ。Bluetoothを使うために必要なパッケージをラズパイにインストールだ。

sudo apt-get install bluez bluetooth libbluetooth-dev build-essential

次はbluetoothのペアリングだ。リモートシャッターは側面のスイッチをオンにするとしばらくペアリング待ち状態になるよ。ラズパイにてbluetoothctlコマンドでペアリングしよう。名前がAB Shutter3となっているデバイスがリモートシャッターだ。

$ bluetoothctl

[bluetooth]# power on
[bluetooth]# scan on ←リモートシャッターをペアリング待ちにしておく
...
Device FF:FF:7F:F1:XX:XX AB Shutter3 ←これがリモートシャッター
...
[bluetooth]# info FF:FF:7F:F1:XX:XX
Device FF:FF:7F:F1:XX:XX
Name: AB Shutter3
Alias: AB Shutter3
Appearance: 0x03c1
Icon: input-keyboard
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb)
Modalias: usb:v248Ap8266d0001
[bluetooh]# pair F:FF:7F:F1:XX:XX


ボタン操作の検知

ペアリングが完了したら、今度はリモートシャッターのボタンの操作を検知するプログラムを開発するぞ!:muscle_tone2:、、と思ったら、すでに完成しているものをGitHubで見つけてしまった。。「bluebutton」というソフトウェアだ。長押しと通常押しも見分けられるようだ。Ruby2以上が必要なのでさっそくインストールしよう。

sudo apt-get install ruby

sudo gem install bluebutton

設定ファイルにてボタンを押されたときの動作を自分で決めることができるようだ。~/config/bluebuttonというファイル名で下記のファイルをつくったよ。

keyup=curl -XPOST 'https://my-app.now.sh/postLineMessage'

keydown=echo DOWN
longup=echo LONG UP
longdown=echo LONG DOWN

ボタンが押されて離された時に、LINEへの投稿をトリガするAPI(https://my-app.now.sh)を叩く設定だよ。このAPIは次回以降で作っていくよ。それ以外の動作(ボタン長押しなど)は画面にログを出力するだけだよ。

$ bluebutton -d="Shutter3" -c ~/config/bluebutton

これで、リモートシャッターのボタンを押すとAPIにリクエストを投げるようになったよ。ボタン操作が認識されているか動作確認をしてみよう。

Graphics Interchange Format(GIF)-2C5CA608C17A-1.gif

上の画像では、ラズパイにMacからログインしてbluebuttonの実行画面を表示させてるよ。10mくらい離れてもボタン操作を検知してくれたよ。

次回は、Node.jsをつかってLINEボットに投稿するAPIを開発、Now.shにデプロイし、IoTボタンを完成させるよ。


追記


  • LINE Botに通知するための続きの記事を書いたよ。でも、あまりIoTボタンとは関係ないよ。。


  • ボタン操作が検知されたかどうかわかりづらいとのご指摘があるし、実際そのとおりだ。僕はラズパイにスピーカーを繋いで、ボタン操作検知時にラズパイに喋らせているよ。


$ npm install openjtalk


speak.js

const OpenJTalk = require('openjtalk');

const mei = new OpenJTalk();
mei.talk('ボタンが押されたよ', 250);


config/bluebutton

keyup=node ~/speak.js && curl -XPOST https://xxx.now.sh -d '{msg: "xx"}'