Arduino UNOで電話着信を実現 - Twilio & Yalerを活用した「Call My Arduino」プロジェクト
必要なパーツと用品
| パーツ | 数量 |
|---|---|
| Arduino UNO | 1 |
| Arduino Ethernet Shield | 1 |
| アナログ温度センサー | 1 |
プロジェクト概要

(出典: Instructables - Call my Arduino)
Arduinoへの電話着信を可能にする仕組み
TwilioとYaler.netを使用して、Arduinoへの電話着信を実現します。
- Twilio: クラウドホスト型のテレフォニーREST API。あらゆるものを電話に変えます。ここでは、誰かがArduinoに割り当てられた電話番号にかけると、TwilioがArduinoにvoice.xmlファイルを要求し、その内容をTwilioのテキスト読み上げエンジン「Alice」の声で発信者に読み上げます。
- Yaler.net: ファイアウォール、NAT、モバイルネットワークルーターの背後にある組み込みデバイスへのWebアクセスを可能にします。ここではTwilioがローカルネットワーク内のArduino上のvoice.xmlファイルにアクセスできるようにします(開示: 私はYalerの創業者の一人です)。
このデモでは温度センサーを使用していますが、他のセンサーでも構いません。実用的な製品例としては、Canary(現Birdi)煙探知機のように、外出先から電話でバッテリー残量を確認できるデバイスなどが考えられます。
より抽象的なレベルでは、このInstructableは、オープンなIoTにおいて、モジュール化されたクラウドサービスを自由に組み合わせて、斬新でシンプルかつ信頼性の高いソリューションを構築できることを示しています。HTTPとWebhooks万歳!
(IoTLiveによるプロジェクト解説動画 - IoTDay 2014の一部)
必要な材料
- Arduino Uno (例: Adafruit)
- USBケーブル Type A-B (例: Adafruit)
- Arduino Ethernet Shield (例: Adafruit)
- Ethernetケーブル (例: Adafruit)
- アナログ温度センサー (例: Adafruit TMP36)
- ブレッドボード用ワイヤー (例: Adafruit)
- ブレッドボード (例: Adafruit)
ステップ1: センサーの配線

Ethernet ShieldをArduinoに装着し、図のように温度センサーを接続します。TMP36センサーでの温度測定詳細は Adafruit学習ガイド を参照。他の(デジタル)センサーを追加する場合、Ethernet Shieldが使用するピンに注意してください。
ステップ2: Yalerライブラリのインストール

https://yaler.net/arduino の「Installing the library」の3ステップに従ってください。まだの場合は https://yaler.net/ で無料トライアルアカウントを登録し、リレイドメインをメモしておきます(シークレットキーは不要)。
ステップ3: Arduinoのプログラミング

TwilioYalerWebService Arduinoソースコードをダウンロード
Arduinoコードを開く
このプログラムは、着信HTTPリクエストを待ち受けるシンプルなWebサーバーを実装しています。リクエストが来ると、XMLドキュメントで応答します。URLパスが / でも /voice.xml でも気にしません。
MACアドレスを変更
Arduinoコード内のMACアドレスが一意になるようにしてください。同じローカルネットワークに複数のArduinoがある場合特に重要です。コンピューターのMACアドレスを調べて最後の桁に1を足すのが簡単な方法です。
リレイドメインを入力
EthernetServer server(80); でローカルサーバーを作る代わりに、Yalerリレイ経由でアクセス可能なサーバーを作ります:
YalerEthernetServer server("try.yaler.net", 80, "RELAY_DOMAIN");
RELAY_DOMAIN を自分のリレイドメインに置き換えます。例: gsiot-ffmq-ttd5 の場合:
YalerEthernetServer server("try.yaler.net", 80, "gsiot-ffmq-ttd5");
ポートフォワーディングでファイアウォールに穴を開けられるならローカルサーバーでも構いません。重要なのはTwilioがクラウドからArduinoにアクセスできることです。
保存してアップロード
全ての変更を保存し、Arduinoにアップロード。USBケーブルを繋いだままシリアルコンソールを開いてデバッグ出力を確認してください。
ステップ4: Arduinoへのアクセス

任意のブラウザからArduinoにアクセス
Yalerライブラリにより、Arduino(とXMLドキュメント)がパブリックインターネットから https://RELAY_DOMAIN.try.yaler.net/ でアクセス可能になります。例: リレイドメイン gsiot-ffmq-ttd5 なら https://gsiot-ffmq-ttd5.try.yaler.net/ 。Twilio用に見栄えを良くするなら https://gsiot-ffmq-ttd5.try.yaler.net/voice.xml 。
XMLドキュメントを確認
XMLドキュメントの内容が、着信電話へのTwilioの応答内容を指定します。テキスト読み上げの声も選べます(ここではAlice)。TwilioのXMLフォーマットはTwiMLと呼ばれます。詳細は Twilio公式ドキュメント を参照。応答テキストには実際の温度が含まれます。センサーを温めてブラウザでF5更新すると値が変わるのが確認できます。
トラブルシューティング
空白ページやエラーが出る場合、Ethernetケーブルが繋がっているか確認し、https://yaler.net/browser でブラウザ別デバッグを確認してください。
ステップ5: Twilio番号のセットアップ



サインアップ
まず Twilio でアカウント登録。
電話番号を購入
着信を受けるには番号が必要(少額の費用発生)。ログイン後、Numbers → Twilio Numbers サブメニュー → Manage Numbers タブへ。Buy a number ボタンをクリック、Voice チェックボックスをオンにして Search、番号を選んで Buy 。
voice.xml Webhook URLを設定
Manage Numbers タブで購入した番号をクリック。Response URL を https://RELAY_DOMAIN.try.yaler.net/voice.xml に設定し、POST が選択されていることを確認。例: リレイドメイン gsiot-ffmq-ttd5 なら https://gsiot-ffmq-ttd5.try.yaler.net/voice.xml 。
ステップ6: テスト通話

Arduinoのセットアップが完了したら、どの電話からでも呼び出せます。おじいちゃんの電話からでも。
以上です。お読みいただきありがとうございました。 @tamberg
コード
Bitbucket
回路図
製造プロセス
- CMMS導入のビジネスケース構築:メンテナンス効率とROIを最大化
- 制汗剤/デオドラントスティック:科学、歴史、製造の洞察
- Raspberry Piガレージドアオープナーにライブビデオストリーミングを追加 - ステップバイステップガイド
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- Arduino UNOで電話着信を実現 - Twilio & Yalerを活用した「Call My Arduino」プロジェクト
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- 鉛筆形状GaN/(In,Ga)Nコア-シェルナノワイヤの高分解能3Dイメージング:電子トモグラフィーによる解析