米アマゾンが 2015年3月31日に発表した「
Amazon Dash Button」はボタンを押すだけで所定の日用品のオーダーを可能とする小さなデバイスです。電池交換は不可。アイテムごとに専用のデバイスが用意されています。
当初 Dash Button の利用は招待制でデバイスは無料で配布されていました。その後$4.99 での販売に変更され、2015年9月に米アマゾンは Dash Button ビジネスの拡大方針を決定しています。好調のようです。
なお、今のところこのサービスの日本での開始はスケジュールされておらず、米アマゾンから Dash Button 単体を購入することもできません。
2016-12-22 追記:
Amazon.co.jp は 2016年12月5日に日本国内で Dash Button サービスを開始しました。これに伴い関連する以下の記事を当ブログに追加しています。
ワンボタンデバイスのメリットと応用例
Amazon Dash Button は事業形態としても面白そうですがこの記事ではデバイス本体に注目します。Dash Button の実体はマイコンと無線 LAN モジュールを主要素とする乾電池駆動の IoT デバイスです。
http://mpetroff.net/
Dash Button は独立した装置なので必要な折にスマートフォンアプリ等よりも素早く使用することが可能。ボタンひとつの単機能であることが手軽さと即応性をさらに高めています。
この迷いようのないユーザインターフェイスは、その素朴さとは裏腹に、関係者が消費者への効果的なアプローチを模索する過程において綿密に戦略を練った結果と想像されます。一見「誰でも思いつきそうなこと」はそれが本当に実現されればしばしば斬新です。手軽さといえばスマホばかりに目が向けられる現状においてあえて専用ハードの形態を選んだ発想には学ぶべき要素があるように思います。
このデバイスのアイディアはビジネス用途以外の IoT においても広く活用することが可能でしょう。「物理ボタンの押下」という手間がかからず誰にでもできる簡単な操作をトリガーにどのような処理を行うかはアイディア次第であり、その便宜と魅力に気づいた向きがこの安価な Dash Button を本来の目的以外のことに利用し始めています。以下にいくつか例を挙げます。
- How I Hacked Amazon’s $5 WiFi Button to track Baby Data (2015ー08ー10) - medium.com
おそらくこれが最初の Dash Button 転用例。Edward Benson 氏は自宅で乳児の排泄日時を手早く記録・管理する手段を探す中で、夜中にスマホを操作する煩わしさもなくボタン押下のみで完結する Dash Button の長所に着目した。
"using your smart phone at night disrupts sleep. I want a simple button I can stick to the wall and push to record"
Amazon へのオーダーを行う上で本来必要な初期設定を意図的に保留。デバイス本体をハックするのではなく、ボタン押下〜デバイス起床時に LAN 上に流れる ARP パケットに注目し、当該デバイスの MAC アドレスを検出すればそれをトリガーに PC で処理を実行する手法によって要件を実現した。
https://medium.com/
「The Internet of Things is already here.」という結語が印象に残る。デバイスのコストを事実上度外視して Button を供給しているアマゾンにとってはあまり歓迎できない試みと思われるが、本体を改変しているわけではなく意味的には単に「未登録」の状態に過ぎない。この手の転用が拡がれば何らかの対抗措置を敷かれる可能性が皆無ではないものの、現時点ではこうした行為に対し直接クレームをつけることは難しいだろう。
-
Amazon Dash — It’s Dinner Time! (2015ー08ー27) - theappslab.com
Raymond Xie 氏は Dash Button のコストパフォーマンスの高さに大喜び。稼働中に熱を持つ PiTFT をコードを抜かず簡単に ON/OFF する目的にさっそく利用していたところ奥方からもっと実用的なことはできないの?と聞かれ、ヘッドホン装着率の高い二階の子供たちを夕食時にいちいち呼びに行く代わりに Dash Button で子供部屋の フィリップス ヒュー を点滅させることを思いつく。Button は台所の奥方の手に。
-
PizzaDash (2015ー09ー12) - github.com/bhberson
前出の Benson 氏の記事に触発された、と Brody Berson 氏は Dash Button をドミノピザの宅配オーダーに利用(無論アマゾンとは無関係)。ボタン押下をトリガーに Raspberry Pi が ドミノピザ公式 API を叩いて注文成立。
2015-11-25 追記:
英国ドミノピザが公式にワンボタンのオーダーサービスを開始する旨の情報あり (2015-11-23)
"PizzaDash" からの影響の有無は不明だが、dominos 社はこれまでに独自の様々なオンラインオーダーシステムを確立しており IT 活用にきわめて積極的
-
Amazon dash button automation silliness. (2015ー09ー26) - www.youtube.com
Michael Donnelly 氏による Youtube への投稿動画。玄関の照明を点灯/消灯したり、ガレージの車の内部が一定の温度になったらクラクションを鳴らしたり。
-
Dash Hacking: Bare-Metal STM32 Programming - learn.adafruit.com
Adafruit 社 の TONY DICOLA 氏による正面からの Dash Button ハックの試み。ファームウェアを書き換え本体の LED を自作のコードで制御。"this guide didn't touch on the Dash's WiFi module yet" とのこと。
また、米アマゾンウェブサービス(AWS)は 2015年10月の AWS IoT ベータ公開にあわせ、Amazon Dash Button と同一のハードを使った AWS IoT Button (beta)を発表しました。10月6〜9日にラスベガスで開催された「AWS re:Invent 2015」の会場では参加者へ AWS IoT 体験用に配布されています。ボタンを押すと AWS IoT サービスへ通知され利用者の記述した処理を実行できるしくみです。
さらに、クラウドファンディング発の次のようなオリジナルのボタン製品も登場しています。またこれからも新しいものが出てくることでしょう。
このように「ボタンひとつ」の IoT デバイスの有用性がいま注目されています。
工作と実験
こういった事情を背景にワンボタンデバイスを自作する向きもあり(例 1・例 2)、試みに手元でも手近な材料を使って作ってみることにしました。装置が形になればそこにどのような処理を絡めるかは自由ですが、まずもっとも身近な題材のひとつとして自分あてのメール送信機能を組み込みました。
- 今回の「ワンボタンメーラ」は試作上の題材ではありますが、実用を想定すると以前手がけた高齢者世帯安否確認のしくみと併せ、遠隔世帯からの手間いらずの ping 的定刻連絡やナースコール的な使い方ができそうです
試作の動作の様子 (動画:30秒)
装置について
試作した装置の材料と構成は以下の通りです。Arduino IDE for ESP8266 プロジェクトのリソースを使用し ESP8266 Wi-Fi モジュールをスタンドアロンのマイコンとして制御しています。
(価格は 2015年10月時点)
- ESP8266 モジュール CDP-ESP8266 - Cerevo ¥842(税別)
- バッテリー RW-111(電話機用:3.6V 800mAh) - ロワジャパン ¥780(税込) amazon
※説明欄の「単三電池三本の形状」の記述は「単四電池三本」が正しい
- ブレッドボード EIC-15010 - スイッチサイエンス ¥216(税込)
- ジャンプワイヤ・抵抗・タクトスイッチ・赤 LED
- タッパ・ペーパータオル
メモ
- タクトスイッチはペーパータオルをクッションにタッパ蓋のたわみを利用して操作。チープながらこの中敷きは装置を保護し外観を和らげ LED のシェードの役割も
- ロワのバッテリーは手元の固定電話機 (ユニデン社製 UCT-002) 用にストックしていたもの。定格もサイズもぴったりだが充電には電話機への装着が必要。充電器の有無を同社へ問い合わせるとやはり「本体充電のみ」とのこと
- バッテリー消費抑制のため ESP8266 モジュールは平時はディープスリープ状態で待機させる。ボタン押下でリセットをかけると起床して必要な処理を行いふたたびスリープへ
- ブレッドボードを使わなければ配線部分をもっと小さくできるが全体のサイズは実験用としては手頃か
プログラムについて
メールの送信には「SendGrid」を利用しています。その方面ではメジャーなサービスであり、国内に正規代理店(株式会社 構造計画研究所)があり日本版の公式サイトも運営されています。濫用防止のためサインアップの際には使用目的等の詳細説明が求められアカウント発行可否は人間によって審査されます。
フリープランで 400通/日の送信が可能であり手元での利用にはまず十分そうです。ドキュメント・API も充実しています。
今回は単純明快でくみしやすい初版のほうの Web API を利用することにしました。
ところで、多くのクラウドサービスがそうであるように SendGrid Web API の利用にも HTTPS が必須です。
Arduino IDE for ESP8266 プロジェクトは 2015-08-31 より TLS 1.0/1.1 への対応を始めており利用者の一人として大いに期待しているのですが、この記事を書いている 2015年11月初旬の時点ではなお活発に開発が進行中で、stable になるまでにはまだ多少時間がかかりそうです。
そうした事情もあり、先だって「ESP8266 モジュールの AT コマンドに SSL クライアント機能を追加する」の試みで Espressif 社によるサンプルプログラムをもとに構成した HTTPS クライアントコードに手を加え、当面 Arduino IDE でライブラリとして使うことにしました。もちろんメールサービス以外の用途にも利用できるでしょう。
※手元の Arduino IDE for ESP8266 のバージョンは現時点で stable な
2015-07-23 リリースの「1.6.5-947-g39819f0」なのですが、この版に
同梱されている Espressif ライブラリを使ってスケッチをビルドすると
SendGrid の API サーバ である https://api.sendgrid.com/ への接続
要求時に異常終了の発生を確認しました。同ライブラリ群の配置された
packages/esp8266/hardware/esp8266/1.6.5-947-g39819f0/tools/sdk/lib/
配下の *.a を現時点で最新の esp_iot_sdk_v1.4.0_15_09_18 に
含まれる一式に差し替えたところ問題の解消が見られました。
以下にソースコードを掲載します。ライブラリ「EspHttpsClient」はファイル一式をローカルのライブラリフォルダ下の EspHttpsClient/ 下へコピーして使います。
ライブラリ:EspHttpClient
EspHttpClient.h - GitHub
EspHttpClient.cpp - GitHub
スケッチ:OneButtonMailer
OneButtonMailer.h - GitHub
OneButtonMailer.ino
また、多少遅延が発生する可能性はあるものの、専用のサービスの代わりに手近に IFTTT の Maker Channel を利用する選択肢もあるでしょう。目的がメール送信であれば下図の例の要領でレシピを作成しておきます。 (クリックで可読大表示)
このレシピを呼び出すスケッチです。
OneButtonMailer_IFTTT.h - GitHub
OneButtonMailer_IFTTT.ino
付録
Espressif 社のドキュメントより ESP8266 のスリープモードに関する記述箇所を以下に抜粋します。
(クリックで可読大表示)
「ESP8266EX Datasheet Version 4.4 (2015-08-01) 」より
「ESP8266 SDK API Guide Version 1.4 (2015-09-18)」中の system_deep_sleep() および system_deep_sleep_set_option() のリファレンス
(tanabe)