「ものづくり:make」を楽しみながら学ぶ人へ向けた独習サポートサイト。

micro:bit Lab.【マイクロビット】

micro:bit Lab.では、micro:bit【マイクロビット】に関する情報を紹介しています。

Node-RED・IBM Watson・micro:bitでIoT体験
12-12

定期的に室温を英語で話す装置を作る

2020-07-092020-07-09

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プラットフォームとして注目されているフローベースのビジュアルプログラミングツールです。

図12-12-1-1.定期的に室温を英語で話す装置を作る
図12-12-1-1.定期的に室温を英語で話す装置を作る

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(マイクロビット)とは」をご覧下さい。

図12-12-1-2.micro:bit
図12-12-1-2.micro:bit

micro:bitのプログラミングは、マイクロソフトが提供する「MakeCode for micro:bit」という、ブロックベースのビジュアルプログラミングツールで行います。

図12-12-1-3.MakeCode for micro:bit
図12-12-1-3.MakeCode for micro:bit

本記事では、micro:bitに搭載されている温度センサーを使って、室温を測定します。ただし、micro:bitの温度センサーは、プロセッサー周辺の温度となるため、室温より高くなる傾向があります。

micro:bitに関する詳しい情報は「第1章 micro:bit入門」をご覧下さい。

Node-RED

Node-RED(ノードレッド)は、さまざまな機能を持つ「ノード」を「ワイヤー」でつないで、一連の処理を作ることができるフローベースのビジュアルプログラミングツールです。

図12-12-1-4.Node-RED
図12-12-1-4.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」を選択します。

図12-12-2-1.Language Translatorサービスの選択
図12-12-2-1.Language Translatorサービスの選択

ライト(無料)プランをクリックした後、サマリーで無料であることを確認します。「作成」ボタンをクリックします。

図12-12-2-2.Language Translatorサービスの作成
図12-12-2-2.Language Translatorサービスの作成

Language Translatorサービスが作成され、アクティブになることを確認します。

図12-12-2-3.Language Translatorサービスの確認
図12-12-2-3.Language Translatorサービスの確認

同じ手順で、Text to Speechサービスを作成して、アクティブになることを確認します。

図12-12-2-4.Text to Speechサービスの確認
図12-12-2-4.Text to Speechサービスの確認

「ナビゲーション・メニュー」>「リソース・リスト」の順にクリックします。

図12-12-2-5.リソース・リストの表示
図12-12-2-5.リソースリストの表示

作成した2つのサービスがアクティブであることを確認します。

図12-12-2-6.2つのサービスがアクティブであることを確認
図12-12-2-6.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-3-1.Node-REDとmicro:bitを接続してシリアル通信の動作を確認する
図12-12-3-1.Node-REDとmicro:bitを接続してシリアル通信の動作を確認する

12-12-4.micro:bitのプログラミング

MakeCode for micro:bitへアクセスしてプログラミングします。プログラムの内容は次のようなものです。

  • シリアル通信に関する初期設定を行う
  • シリアル通信で文字列「getTemperature」を受信したとき、温度を送信する。また、LED画面に温度を表示する。

プログラミング

図12-12-4-1のプログラムを作成します。プログラムが完成したら、micro:bitへダウンロードしてください。

図12-12-4-1.micro:bitのプログラミング
図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サービスへアクセスするために必要なノードを追加します。上部にある「メインメニュー」をクリックして「パレットの管理」を選択します。

図12-12-5-1.パレットの管理
図12-12-5-1.パレットの管理

「ノードを追加」タブをクリックして、検索欄に「watson」と入力します。表示されたノードの中から「node-red-node-watson」を探して、右側の「ノードを追加」をクリックします。追加を確認するメッセージが表示されるので「追加」をクリックします。右側の表示が「追加しました」になったことを確認して「閉じる」をクリックします。

図12-12-5-2.ノード「node-red-node-watson」の追加
図12-12-5-2.ノード「node-red-node-watson」の追加

パレットに新しいカテゴリー「IBM Watson」が追加されていることを確認します。IBM Watsonカテゴリーには、22個のノードが登録されています。本記事では、この中から「language translator」ノードと「text to speech」ノードを使います。

図12-12-5-3.IBM Watsonカテゴリー
図12-12-5-3.IBM Watsonカテゴリー

ノードを配置する

12-11.Node-REDとmicro:bitを接続する(1)」で作成したフローにノードを追加して、図12-12-5-4のように配置します。

図12-12-5-4.ノードの配置
図12-12-5-4.ノードの配置

ノードのプロパティを設定する

「inject」ノードのプロパティです。msg.payloadに、文字列「getTemperature」を代入します。

図12-12-5-5.「inject」ノードのプロパティ
図12-12-5-5.「inject」ノードのプロパティ

「function」ノードのプロパティです。JavaScriptコードを入力します。受信した温度データを日本語の文章「室温は○○度です。」にします。

図12-12-5-6.「function」ノードのプロパティ
図12-12-5-6.「function」ノードのプロパティ

「language translator」ノードのプロパティです。「API Key」と「Service Endpoint」を入力します。「Source」を「Japanese」、「Target」を「English」に変更します。

図12-12-5-7.「language translator」ノードのプロパティ
図12-12-5-7.「language translator」ノードのプロパティ

「API Key」と「Service Endpoint」の値は、IBM Cloudのソース・リストから「language translator」を選択して、表示された管理画面から「API鍵」と「URL」の値をコピーします。これらは、APIでアクセスするための資格情報です。

図12-12-5-8.「API鍵」と「URL」の値
図12-12-5-8.「API鍵」と「URL」の値

「text to Speech」ノードのプロパティです。「API Key」と「Service Endpoint」を入力します。「Language」を「US English」に変更します。「Voice」は、音声合成の声の種類です。図12-12-5-9では「Lisa」を選択していますが、他のものでもかまいません。「Format」は「WAV」です。

図12-12-5-9.「text to Speech」ノードのプロパティ
図12-12-5-9.「text to Speech」ノードのプロパティ

「API Key」と「Service Endpoint」の値は、IBM Cloudのソース・リストから「text to Speech」を選択して、表示された管理画面から「API鍵」と「URL」の値をコピーします。これらは、APIでアクセスするための資格情報です。

図12-12-5-10.「API鍵」と「URL」の値
図12-12-5-10.「API鍵」と「URL」の値

「change」ノードのプロパティです。msg.speechの値(音声合成されたデーター)をmsg.payloadへ代入します。これは、後続の「file」ノードで書き出したり、「play audio」ノードで発声するために必要な処理です。

図12-12-5-11.「change」ノードのプロパティ
図12-12-5-11.「change」ノードのプロパティ

「file」ノードのプロパティです。「ファイル名」に「/home/pi/node-red/audio.wav」を入力します。「動作」を「ファイルを上書き」に変更して、「ディレクトリが存在しない場合は作成」にチェックを付けます。この処理は、piユーザーのホームディレクトリ配下に「node-red」ディレクトリーを作成して、msg.payloadの内容を音声ファイル「audio.wav」として上書き保存します。

図12-12-5-12.「file」ノードのプロパティ
図12-12-5-12.「file」ノードのプロパティ

「exec」ノードのプロパティです。「コマンド」に「aplay /home/pi/node-red/audio.wav」と入力します。これは、音声ファイル「audio.wav」を再生する処理です。これによって、Raspberry Pi本体のオーディオジャックに接続されたスピーカーやイヤフォンなどから音声が再生されます。

図12-12-5-13.「exec」ノードのプロパティ
図12-12-5-13.「exec」ノードのプロパティ

図12-12-5-14が、完成したフローです。

図12-12-5-14.完成したフロー
図12-12-5-14.完成したフロー

では「inject」ノードのボタンをクリックして実行しましょう。正しく動作するとRaspberry Pi本体に接続されたスピーカーやイヤフォンなどから音声が再生されます。「language translator」ノードや「text to speech」ノードの実行中は、ノードの下にメッセージが表示されます。また、micro:bitのLED画面には、温度が表示されます。

図12-12-5-15.完成したフローの実行
図12-12-5-15.完成したフローの実行
音声が二重に聞こえる

「play audio」ノードは、ブラウザーのWeb Audio API機能を使って、音声を再生するものです。Raspberry Pi上でブラウザーを使用している(Node-REDのエディターへアクセスしている)場合は、音声が二重に再生されます。このノードのプロパティを変更して、無効化して下さい。

フローを定期的に実行する

完成したフローを変更して、定期的に実行するようにします。変更するのは「inject」ノードのプロパティです。「Node-RED起動の○○秒後、以下を行う」にチェックを付けて「60」秒を指定します。「指定した時間間隔」を選択して「1分」を選択します。

図12-12-5-16.繰り返しの設定
図12-12-5-16.繰り返しの設定

デプロイすると、1分間隔で室温を音声で伝えるようになります。これで「定期的に室温を英語で話す装置」の完成です。

図12-12-5-17.定期的に室温を英語で話す装置
図12-12-5-17.定期的に室温を英語で話す装置

おすすめ品

初めての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ユーザーグループ」有志が多彩で具体的な活用事例を解説!

この記事を読んだ人は、こんな記事にも興味があります。
スポンサーリンク
TOPへ移動
目次へ移動