定期的に室温を英語で話す装置を作る
IBM Watsonサービスの中から「Language Translator」と「Text to Speech」を使って、定期的に室温を英語で話す装置を作ります。実行(開発)環境は、Raspberry Pi OSにインストールしたNode-REDです。micro:bitに搭載している温度センサーで室温を測定します。
12-12-1.装置の概要
定期的に室温を英語で話す装置の概要
IBM Cloudプラットフォームで利用できるIBM Watsonサービスの中から、テキストを別の言語に翻訳する「Language Translator(言語変換)」と、テキストから自然な音声を合成する「Text to Speech(音声合成)」を使って、部屋の温度を英語で発声します。温度の測定には、micro:bitに搭載されている温度センサーを使用します。また、実行(開発)環境は、Raspberry Pi OSにインストールしたNode-REDです。Node-REDは、IoTプラットフォームとして注目されているフローベースのビジュアルプログラミングツールです。
IBM CloudプラットフォームとIBM Watsonサービス
IBM Cloud(旧IBM Bluemix)プラットフォームは、IBMが提供するビジネスのためのクラウドサービスです。AI・データベース・コンテナー・IoTなど幅広いサービスが提供されています。本記事では、AIであるIBM Watsonサービスの中から、テキストを別の言語に翻訳する「Language Translator(言語変換)」と、テキストから自然な音声を合成する「Text to Speech(音声合成)」を使います。
IBM Watsonサービスの利用には、IBM Cloudのアカウント登録が必要です。本記事の内容は、クレジットカードの登録が不要のライト(無料)アカウントで試すことができます。
micro:bit
micro:bitは、イギリスの公共放送局であるBBCが中心となって開発した教育用の小型コンピューターボードです。およそ4cm×5cmのプリント基板上に、5列×5列(合計25個)の赤色LED・2つのボタン・温度センサー・3軸加速度センサー・地磁気センサー・明るさセンサーなどを搭載しています。micro:bitに関する詳しい情報は「1-1.micro:bit(マイクロビット)とは」をご覧下さい。
micro:bitのプログラミングは、マイクロソフトが提供する「MakeCode for micro:bit」という、ブロックベースのビジュアルプログラミングツールで行います。
本記事では、micro:bitに搭載されている温度センサーを使って、室温を測定します。ただし、micro:bitの温度センサーは、プロセッサー周辺の温度となるため、室温より高くなる傾向があります。
micro:bitに関する詳しい情報は「第1章 micro:bit入門」をご覧下さい。
Node-RED
Node-RED(ノードレッド)は、さまざまな機能を持つ「ノード」を「ワイヤー」でつないで、一連の処理を作ることができるフローベースのビジュアルプログラミングツールです。
本記事では、Raspberry Pi OSにインストールしたNode-REDを利用して、micro:bitから温度の取得・IBM Watsonサービスへのアクセス・音声データーの再生などを行う一連のフローを作成します。
Raspberry Pi OSにNode-REDをインストールする方法については「12-7.Node-REDのインストール」をご覧下さい。
12-12-2.IBM CloudでIBM Watsonサービスを作成する
事前準備として、IBM Cloudにログインして、IBM Watsonサービスの中から「Language Translator」と「Text to Speech」を作成します。いずれも、無料のライトプランを選択します。
IBM Watsonサービスを作成する
IBM Cloudに、自身のアカウントでログインします。「カタログ」>「サービス」>「AI / Machine Learning」の順にクリックして、表示された一覧から「Language Translator」を選択します。
ライト(無料)プランをクリックした後、サマリーで無料であることを確認します。「作成」ボタンをクリックします。
Language Translatorサービスが作成され、アクティブになることを確認します。
同じ手順で、Text to Speechサービスを作成して、アクティブになることを確認します。
「ナビゲーション・メニュー」>「リソース・リスト」の順にクリックします。
作成した2つのサービスがアクティブであることを確認します。
以上で、2つのIBM Watsonサービスが作成されました。
12-12-3.シリアル通信の動作を確認する
Node-REDとmicro:bitを接続する
Raspberry Pi本体とmicro:bitをUSBケーブルで接続した後、Node-REDとmicro:bit間でシリアル通信を行い、データーが送受信できることを確認します。「12-11.Node-REDとmicro:bitを接続する(1)」の手順によりフローを作成して、動作を確認して下さい。
図12-12-3-1は「12-11.Node-REDとmicro:bitを接続する(1)」の手順により完成したフローです。micro:bitのボタンAを押すとサイドバーの表示ウィンドウ(デバッグ)に温度が表示されます。また、フロー上の「inject」ノードのボタンを押すことで、micro:bitのLED画面にタイムスタンプが表示されます。本手順では、このフローに手を加えて、新しいフローを作ります。
12-12-4.micro:bitのプログラミング
MakeCode for micro:bitへアクセスしてプログラミングします。プログラムの内容は次のようなものです。
- シリアル通信に関する初期設定を行う
- シリアル通信で文字列「getTemperature」を受信したとき、温度を送信する。また、LED画面に温度を表示する。
プログラミング
図12-12-4-1のプログラムを作成します。プログラムが完成したら、micro:bitへダウンロードしてください。
以上で、micro:bitのプログラミングは完了です。
12-12-5.Node-REDのフロー作成
Node-REDのエディターへアクセスしてフローを作成します。フローの内容は次のようなものです。
- シリアル通信で文字列「getTemperature」を定期的に送信する
- シリアル通信で受信した温度を日本語の文章「室温は○○度です。」にする
- IBM Watsonサービス「Language Translator」で英語に変換する
- IBM Watsonサービス「Text to Speech」で音声合成する
- 音声ファイルを書き出す
- 音声ファイルを再生する
ノードを追加する
まず、Node-REDからIBM Watsonサービスへアクセスするために必要なノードを追加します。上部にある「メインメニュー」をクリックして「パレットの管理」を選択します。
「ノードを追加」タブをクリックして、検索欄に「watson」と入力します。表示されたノードの中から「node-red-node-watson」を探して、右側の「ノードを追加」をクリックします。追加を確認するメッセージが表示されるので「追加」をクリックします。右側の表示が「追加しました」になったことを確認して「閉じる」をクリックします。
パレットに新しいカテゴリー「IBM Watson」が追加されていることを確認します。IBM Watsonカテゴリーには、22個のノードが登録されています。本記事では、この中から「language translator」ノードと「text to speech」ノードを使います。
ノードを配置する
「12-11.Node-REDとmicro:bitを接続する(1)」で作成したフローにノードを追加して、図12-12-5-4のように配置します。
ノードのプロパティを設定する
「inject」ノードのプロパティです。msg.payloadに、文字列「getTemperature」を代入します。
「function」ノードのプロパティです。JavaScriptコードを入力します。受信した温度データを日本語の文章「室温は○○度です。」にします。
「language translator」ノードのプロパティです。「API Key」と「Service Endpoint」を入力します。「Source」を「Japanese」、「Target」を「English」に変更します。
「API Key」と「Service Endpoint」の値は、IBM Cloudのソース・リストから「language translator」を選択して、表示された管理画面から「API鍵」と「URL」の値をコピーします。これらは、APIでアクセスするための資格情報です。
「text to Speech」ノードのプロパティです。「API Key」と「Service Endpoint」を入力します。「Language」を「US English」に変更します。「Voice」は、音声合成の声の種類です。図12-12-5-9では「Lisa」を選択していますが、他のものでもかまいません。「Format」は「WAV」です。
「API Key」と「Service Endpoint」の値は、IBM Cloudのソース・リストから「text to Speech」を選択して、表示された管理画面から「API鍵」と「URL」の値をコピーします。これらは、APIでアクセスするための資格情報です。
「change」ノードのプロパティです。msg.speechの値(音声合成されたデーター)をmsg.payloadへ代入します。これは、後続の「file」ノードで書き出したり、「play audio」ノードで発声するために必要な処理です。
「file」ノードのプロパティです。「ファイル名」に「/home/pi/node-red/audio.wav」を入力します。「動作」を「ファイルを上書き」に変更して、「ディレクトリが存在しない場合は作成」にチェックを付けます。この処理は、piユーザーのホームディレクトリ配下に「node-red」ディレクトリーを作成して、msg.payloadの内容を音声ファイル「audio.wav」として上書き保存します。
「exec」ノードのプロパティです。「コマンド」に「aplay /home/pi/node-red/audio.wav」と入力します。これは、音声ファイル「audio.wav」を再生する処理です。これによって、Raspberry Pi本体のオーディオジャックに接続されたスピーカーやイヤフォンなどから音声が再生されます。
図12-12-5-14が、完成したフローです。
では「inject」ノードのボタンをクリックして実行しましょう。正しく動作するとRaspberry Pi本体に接続されたスピーカーやイヤフォンなどから音声が再生されます。「language translator」ノードや「text to speech」ノードの実行中は、ノードの下にメッセージが表示されます。また、micro:bitのLED画面には、温度が表示されます。
「play audio」ノードは、ブラウザーのWeb Audio API機能を使って、音声を再生するものです。Raspberry Pi上でブラウザーを使用している(Node-REDのエディターへアクセスしている)場合は、音声が二重に再生されます。このノードのプロパティを変更して、無効化して下さい。
フローを定期的に実行する
完成したフローを変更して、定期的に実行するようにします。変更するのは「inject」ノードのプロパティです。「Node-RED起動の○○秒後、以下を行う」にチェックを付けて「60」秒を指定します。「指定した時間間隔」を選択して「1分」を選択します。
デプロイすると、1分間隔で室温を音声で伝えるようになります。これで「定期的に室温を英語で話す装置」の完成です。
おすすめ品
初めてのWatson 改訂版(APIの用例と実践プログラミング)
本書は2016年11月に刊行された「初めてのWatson」の改訂版です。「Watsonとは何か?」からスタートし、IBM Cloudの無料枠を使って動かしたり、簡単なボットアプリや画像認識アプリを作ります。
はじめてのNode‐RED 改訂版
「Node‐RED」は、IBMが2013年に開発した、オープンソースの「IoTアプリ/Webアプリ」向けの開発環境。「PC上」のデータも、「センサ」で取得したデータも、「Web上」のデータも、「クラウド上」のデータも、データーを加工してやり取りするのに必要なのは、「ノード」と呼ばれる「ブロック」をつなぐだけ。本書では、この「Node‐RED」の基本的な操作からはじめ、実例による活用方法まで、具体的に学べるように解説しています。
実践Node-RED活用マニュアル
ビジュアルプログラミング用開発ツール「Node‐RED」6年間の開発と88回の更新を経て、ついに正式版「ver.1.0」リリース(2019年9月30日)。「Node‐REDユーザーグループ」有志が多彩で具体的な活用事例を解説!