みんなのラズパイコンテスト2017に応募しました!

ラズパイを触り始めてはや数ヶ月(夜中や週末にコツコツと。。。)、今回初めて「みんなのラズパイコンテスト2017」に作品を応募しました!

日経Linuxと日経ソフトウエア、ラズパイマガジンが主催するコンテストで、今年で4回目。

例年100件を超える応募があるとか。

みなさんどんな作品を作って応募されているのか興味津々です♪

それでは、応募した作品を紹介していきたいと思います。

 

はじめに

作品名とシステムの全体像

今回応募した作品名は、

「Re: ゼロから始めるMQTT生活」

にすれば良かったかなと。今さら思ってみたりするのですが、

さすがにアレなので、もっと真面目につけました(笑)

 

本当のタイトルはコチラ!

「MQTTによるPUSH通知で“しゃべるラズパイ”が館内放送システムに変身!
〜 Internet of Kannai-hoso 〜」

 

そうです、IoK
インターネット・オブ・館内放送

まさに、このサイトの趣旨、日常生活にIoTをプラスする!です。

 

自宅hackとか、IoTガジェットに触れられている方はタイトルからお察しかと思いますが、本作品は軽量なメッセージキュープロトコルであるMQTTを使って、ラズパイベースの館内放送システムを作ってみたと言う物です。

システムの全体像はコチラ。

 

仕組みをザックリ言うと、

放送したい人がその内容を日本語テキストで入力

テキストをMQTTの中継サーバーに送る

中継サーバーを介して、メッセージがラズパイに送られる

ラズパイは受け取ったメッセージが自分宛なら音声に変換する

スピーカーから放送する

という流れです。

作ろうと思ったきっかけ

そういえば、うちの会社って館内放送が無いよなー

ある時、ふと思いました。

ICT機器に囲まれ、スマートフォンにもたくさんの通知が来るような環境ですが、スマートフォンやパソコンの通知では気付かないことも多く、固定電話ではその場にいないと出られません。

小中高生の時代は全館でチャイムがなっていたし、何かあれば全体に呼び出しがかかっていた
自分が気付かなくても周りの人が気付いて教えてくれたりするので意外と良かったなと。

AmazonのAlexaや、AppleのSiri、MicrosoftのCortana、GoogleのGoogle Assistant、はたまたソフトバンクのPepperなどなど、語りかけてくるインターフェースがどんどん出てきているし、音声って凄く日常への親和性も高い

いっそのことラズパイで作ってみるか!と思ったのがきっかけでした。

 

システムの簡単な説明

主な機能・特徴

(1)ほぼリアルタイムで一斉放送
MQTT を用いたPUSH通知を行い、全端末がほぼ時間遅れなく放送を開始します。
送信データは軽量なテキストメッセージだけなので通信遅れも最小限です。

(2)日本語に対応したしゃべるラズパイ(Open JTalk)
届いたメッセージを日本語で読み上げてくれます。テキストメッセージが届いてから音声データを作成・再生し、スピーカーから音を出すことで放送設備になります。

(3)専用回線の敷設が不要で設置が容易、高い拡張性
インターネットにアクセス可能な有線/無線LANに接続し電源を供給することができれば、同じ館内でも、遠く離れた場所でも、簡単に館内放送システムを設置することができます。また、放送端末の数を増やしたり配置を換えたりなど構成を自由に変更できる高い拡張性を持っています。

(4)放送エリアを選択可能
全端末、特定グループ、特定端末を指定して放送することができます。

(5)放送事故の発生率を低減!
予めテキストメッセージを入力し、送信前に一呼吸置くことができるので、読み間違いや意図しない雑音の混入(ブフッとか、ガツンとか)など、放送事故の発生率を低減できると期待されます。

 

システム構成

システムは大きく分けて3つの要素から成り立っています。

 

(1)放送端末
ラズパイに外付けスピーカーを接続しています。今回は、RSコンポーネンツ社から販売されているタッチパネル付きディスプレイと筐体セットを入手して放送端末としました。また、スピーカーはUSBから電源を取って動作し、オーディオ端子に接続できるタイプのものを接続しています。

放送端末一式の外観はこんな感じです。

使っている機材の詳細はこちらです。

  • ラズパイ Raspberry Pi 3B(RS品番: 125-4093)、Raspbian Jessie
  • 7インチタッチパネル付きディスプレイ(RS品番: 899-7466)
  • 筐体セット(RS品番: 100-3894)
  • 外付けスピーカー(LOGICOOL ステレオスピーカー Z120BW)

放送データを受け取って再生するプログラムはPython+paho-mqttで作成しました。

 

(2)コントロールパネル
WEBブラウザでアクセスする設定用インターフェースで、対象となる端末、端末に送信するテキストメッセージなどの設定と、音声データの確認ができます。主にPHPを使用しており、バックグラウンドでPythonのプログラムなどが走っています。

コントロールパネルは放送端末であるラズパイやパブリッククラウド上に設置して使用します。後者の場合はスマートフォンなどから操作して遠隔で放送することもできます。

(3)中継サーバー(MQTTブローカー)
MQTTのメッセージ配信を担うプログラムで、ローカルネットワーク又はパブリッククラウド上に設置します。放送用データの授受を行うために専用のアカウントとトピックを設定しておきます。本システムでは、IDCFクラウドのMeshblu IoT Platformと、HEROKUのCloudMQTTで動作を確認しました。

 

要素技術について

MQTT」「Open JTalk」「パブリッククラウド」がキーポイントです。

(1)MQTT
Message Queue Telemetry Transport の略で、HTMLより簡単にメッセージをやりとりできる仕組みだそうです。

館内放送のように「今すぐみんなに伝えたい」という場合に、webとcronでポーリングして実現するシステムとか、メールを使う方法ではリアルタイム性にかけるため、LINEのようなPUSH通知が必要です。それを簡単に実現できるのがMQTTです。

 

MQTTを使うには、

  • MQTTクライアント(Publisher, Subscriber)
    Publisher が送信して、Subscriber が受信します。mosquittoが有名。mosquitto_pub や、mosquitto_sub コマンドを使えば簡単にメッセージをやりとりできます。Pythonならpaho-mqttで簡単に実装できます。
  • MQTTブローカー
    メッセージの交換をやってくれます。これまたmosquittoが有名。他にもMeshbluなど色々あります。

が必要で、それぞれラズパイやパブリッククラウド上で構築しています。

(2)Open JTalk
国産の日本語音声合成システムです。初音ミクとかゆっくろいどとかが有名ですね。Open JTalkはテキストを与えるだけで抑揚をつけてしゃべってくれるので、扱い方がとても楽です(漢字仮名交じり文でもOK)。詳細はこのブログの下記ページをご覧ください。

 

(3)パブリッククラウド
インターネット経由で提供されたクラウドコンピューティング環境です。

館内放送システムをローカルネットワーク環境だけでなく、離れた施設とも繋ぎたい場合には、インターネット上のアクセスできる場所にMQTTのブローカーを設置する必要があります。

VPSを借りてゼロから作っても良いのですが、お金もかかりますしセキュリティ対策など色々大変です。

今回改めて調べた所、様々なサービスが無料で提供されていることがわかりました。

今回の開発過程では、IDCFクラウドMeshblu環境(Docker composeで簡単に設置できる)を使い、最終的にHEROKUのアドオン「CloudMQTT」を使用しています。

※その他詳しい実装方法などは長くなるので別ページにまとめて順次公開していく予定です。

 

 

今後の日程

受賞作品の発表予定など最新情報は、公式サイトで発表があるそうです!