はじめに

昨年の秋に日本での発売が開始されたスマートスピーカー。手を使わずに「声」の指示で調べものや、音楽の再生、天気やニュースの読み上げ、家電操作などができます。 最近はスマートスピーカーをシステム開発に利用できるクラウドサービスも充実してきています。ここではクラウドサービスのIFTTTとBeebotteを使って、スマートスピーカーから弊社製品のLEDN41を操作する方法をご紹介します。

 

開発環境

ハードウェア

  • Google Home Mini
  • ESP32-DevKitC
  • LEDN41

ソフトウェア

  • Arduino IDE 1.8.5
  • Arduino core for ESP32
  • PubSubClient 2.6.0
  • ArduinoJson 5.13.2

クラウドサービス

  • IFTTT
  • Beebotte

 

システム構成

Google Home MiniからIFTTT、Beebotteを経由してESPからLEDN41を表示させるシステム構成図

 

Beebotteの設定

Beebotteとは、IoT向けのクラウドサービスです。REST API、WebSockets、MQTTをサポート、接続された機器にリアルタイムでメッセージを通知することができます。今回はMQTTブローカーとして利用します。

① Beebotteにログイン、「Create New」ボタンをクリックします。 beebotteでchannelを作成する
② channel名 「control_ledn41」、リソース名 「display」 と入力します。「Create channel」ボタンをクリックします。 channel名、リソース名を入力する
③ 「control_ledn41」をクリックします。 control_ledn41をクリックする
④ 「Channel Token」の右側のtoken_から始まる文字列を次のIFTTTの設定で使います。channel tokenを確認する

 

IFTTTの設定

IFTTTとは、「If This Then That」の略でThisとThatにインターネット上のサービスを登録し、そのサービス同士を連携できるWebサービスです。 例えば、Thisは「Instagramに投稿」、Thatは「特定の相手にGmail送信」と登録した場合、Instagramに投稿すると、自動で特定の相手にGmailを送信してくれます。 今回は、Thisは「Google Assistant」、Thatは「Webhooks」を登録します。

① IFTTTにログイン、「My Applets」から「New Applet」ボタンをクリックします。
Appletを作成する
② 「+this」をクリックします
thisを登録する
③ 検索窓に「google assistant」と入力、「Google Assistant」をクリックします。
serviceを選択する
④ 「Say a simple phrase」をクリックします
triggerを選択する
⑤ 各項目に値を入力します。「Create trigger」ボタンをクリックします。

  • What do you want to say? : 1234
  • What do you want the Assistant to say in response? : LEDN41を表示します
  • Language : Japanese

 triggerの項目値を入力する

⑥ 「+that」をクリックします。
thatを登録する
⑦ 検索窓に「webhooks」と入力、「Webhooks」をクリックします。
Serviceを選択する
⑧ 「Make a web request」をクリックします。
actionを選択する
⑨ 各項目に値を入力します。「URL」の「token_xxxxxxxxxxxxxxxx」はBeebotteの設定④のtoken_から始まる文字列に置き換えます。「Create action」ボタンをクリックします 。

  • URL:https://api.beebotte.com/v1/data/publish/control_ledn41/display?token=token_xxxxxxxxxxxxxxxx
  • Method:POST
  • Content Type:application/json
  • Body:{“data”:”display_on”}

actionの項目値を入力する

⑩ 「Finish」ボタンをクリックします。

Finishボタンをクリックする

 

⑪ Google Home Miniを再起動して下さい。

 

サンプルプログラムをESP32に書き込む

① サンプルプログラムをこちらからダウンロード、解凍します。「beebotte_esp32_ledn41-master」というフォルダに以下のファイルができます。スケッチ「beebotte_esp32_ledn41.ino」をArduino IDEから開きます。

  • beebotte_esp32_ledn41.ino
  • config.h

 

② 以下の通り変更を行います。
config.hの「Channel Token」⇒ Beebotteの設定④のtoken_から始まる文字列に置換
「Wi-Fi SSID」「Wi-Fi Password」⇒ 利用するWi-Fiルーターの値に置換
「LEDN41のIPアドレス」「LEDN41のポート番号」⇒ お客様の環境に応じて変更
LEDN41はESP32と同じネットワーク内に置きます。

// LEDN41に1234と表示させるコマンド
const char ledn41_cmd[8] = {0x1B, 0x30, 0x44, 0x31, 0x32, 0x33, 0x34, 0x0D};

// LEDN41のIPアドレス
const uint8_t ip[4] = {192,168,1,199};

// LEDN41のポート番号
const uint16_t port = 10001;

// MQTTホスト名
const char* host = "mqtt.beebotte.com";

// MQTTポート番号
const uint16_t mqttPort = 1883;

// クライアントID
const char *clientID = "TVC_ESP32";

// トピック名
const char* topic = "control_ledn41/display";

// Channel Token
const char* channelToken = "token_xxxxxxxxxxxxxxxx";

// Wi-Fi SSID
const char *ssid = "YOUR SSID";

// Wi-Fi Password
const char *password = "YOUR PASSWORD";

 

③ Arduino IDEのメニュー「スケッチ」-「ライブラリをインクルード」-「ライブラリを管理」を選択、ライブラリマネージャーから以下2つのライブラリをインストールします。

  • PubSubClient
  • ArduinoJson

 

④ Arduino IDEのメニュー「スケッチ」-「マイコンボードに書き込む」を選択、ESP32にスケッチを書き込みます。

 

動作確認

Google Home Mini から LEDN41表示まで、流れは以下の通りです。

Google Home Mini ⇒ IFTTT(GoogleAssistant) ⇒ IFTTT(Webhooks) ⇒ Beebotte ⇒ ESP32 ⇒ LEDN41

少し複雑なので、流れを【 確認1 】から【 確認3 】の3つに分けて確認します。

【 確認1 】Beebotte ⇒ ESP32 ⇒ LEDN41

Beebotteのコンソールからパブリッシュ、Arduino IDEのシリアルモニタでデータ受信およびLEDN41への接続を確認します。

Beebotteの「Account Settings」-「Access Management」をクリック、「Secret Key」をコピーします。
BeebotteのAccess ManagementからSecret Keyをコピーする 次に「Console」をクリックします。「Secret Key」にコピーしたキーを貼り付けます。「Publish」の各項目に以下の値を入力、「Publish data」ボタンをクリックします。

  • Channel : control_ledn41
  • Resource : display
  • Data : display_on

Beebotteのコンソールからデータをパブリッシュする

Arduino IDEのシリアルモニタに以下のメッセージが表示されます。

  • 「got display_on from beebotte」・・・ Beebotteからデータ「display_on」を受信
  • 「connected to ledn41」・・・ LEDN41に接続成功

Arduino IDEのシリアルモニタでメッセージを確認する



【 確認2 】IFTTT (Webhooks) ⇒ Beebotte

Beebotteのコンソールからサブスクライブ、curlコマンドでBeebotteにHTTP POST送信、Beebotteのコンソールでデータを受信できているか確認します。

「Console」をクリックします。「Secret Key」に【 確認1 】でコピーしたキーを貼り付けます。「Subscribe」の各項目に以下の値を入力、「Subscribe」ボタンをクリックします。

  • Channel : control_ledn41
  • Resource : display

Beebotteのコンソールからサブスクライブする
curlコマンドが使えるWindowsやLinux系OSのコマンドプロンプトから以下のcurlコマンドを実行します。tokenはBeebotteの設定④のtoken_から始まる文字列に置き換えて下さい。

curl -d '{"data":"display_on"}' -H "Content-Type: application/json" -X POST 'https://api.beebotte.com/v1/data/publish/control_ledn41/display?token=token_xxxxxxxxxxxxxxxx'

curlコマンド実行後、BeebotteのコンソールのMessagesに受信したデータが表示されることを確認します。



【 確認3 】Google Home Mini ⇒ IFTTT (GoogleAssistant)

Google Home Miniに 「OK, Google 1234」 と話しかけると 「LEDN41を表示します」 と返答することを確認します。 話しかけても認識しない場合は、IFTTTの設定⑤の「What do you want to say?」で「1234」を別の言葉に変更して試して下さい。 また、IFTTTを設定後にGoogle Home Miniを再起動しないと設定が反映されないことがあるのでご注意下さい。

【 確認1 】から【 確認3 】まで正しく実行できれば、Google Home Mini からLEDN41を操作できます。 Google Home Miniに 「OK, Google 1234」 と話しかけると LEDN41に「1234」と表示されます。

 

最後に

今回、私は自宅のGoogle Home Miniに「OK, Google 1234」と話しかけて、会社に設置した LEDN41 に「1234」と表示させてみました。他の数字や、表示クリアも IFTTT のAppletを追加し、ESP32のプログラムにLEDN41のコマンドを追加すれば実行することができます。クラウドサービス経由なので、スマートスピーカーと LEDN41 が別の建物に置いてあっても遠隔操作できます。 これからはPCでもスマートフォンでもなく、スマートスピーカーから様々な機器を操作する時代になってくると思います。スマートフォンに代わってスマートスピーカーが生活の中心になってくる日も近いのではないでしょうか?