小型ディスプレイを付けてスマートウォッチをつくる!
第1回:ラズパイZeroとラズパイHatで電子工作を簡単に!
第2回:Groveセンサを使った環境チェックデバイスをつくる
第3回:声で操作するマルチリモコンをつくる!
こんにちは、ヨシケンです!ラズパイZeroを使った第4回記事です。ここでは、これまでに使ったセンサやリモコンの機能に加えて、小型ディスプレイを付けて、音声で操作ができるスマートウォッチをつくりたいと思います。腕時計に話しかけて、センサチェックやリモコン操作できるので、なかなか未来感のあるデバイスになりますよ!
今回の記事で必要な物一覧
・Grove OLEDディスプレイ(画面の大きさ違いでどちらか選択してください)
GROVE OLED 128×64 | GROVE OLED 96×96 |
![]() |
![]() |
・Groveセンサ、赤外線など(測りたいもの、使い方に応じて選択してください)
Grove発信用赤外線LED | Grove 温湿度センサ | Grove 遠赤外線反射センサ |
![]() |
![]() |
![]() |
・スマートウォッチ外装(シリコンケースなど)
・小型リチウムポリマーバッテリー
(※注意:取り扱いに十分気をつけて自己責任でお使いください)
今回の記事の流れ
1. ラズパイZeroに有機ELディスプレイを付ける
2. ディスプレイをセンサー、赤外線などと連動させて使う
3. 音声対応スマートウォッチにする
4. まとめ
1.ラズパイZeroに有機ELディスプレイを付ける
ラズパイZeroに画面を付ける為に、ここでは手軽なGroveの有機ELディスプレイを使っていきます。Groveケーブルが付いたものとしては、128 x 64の横長OLEDディスプレイや、96 x 96の正方形ディスプレイがあります。Seeed社のWikiにその詳細な使い方が記述されています。
このディスプレイを使うためには、これまで使ってきたReSpeakerのうち、端側にあるI2C接続が使えるコネクタを使用します。
端側のコネクタに、ディスプレイからのGroveケーブルを差し込み、電源を入れます。
このディスプレイをラズパイで使うためには、まずraspi-configでI2Cという接続方式を有効化させます。
また、第2回のGroveセンサーを使った記事でも使用しましたが、Groveをラズパイで使うためのライブラリgrove.pyをインストールします。以下のGithubからgrove.pyをダウンロードし、Python3系でプログラム群をインストールします。
$ git clone https://github.com/Seeed-Studio/grove.py
$ cd grove.py
$ sudo pip3 install .
$ cd grove
インストールが完了すると、groveというフォルダの中に以下のようにさまざまなプログラムが入っています。その中から今回はOLEDディスプレイを使うためのgrove_oled_display_128x64.pyを使います。
それでは早速、python3コマンドでこのプログラムを流してみます。
これで、手軽にHello Worldのサンプル表示ができたのではないでしょうか?
2.ディスプレイをセンサ、赤外線などと連動させて、便利に使う
それではセットされたディスプレイに色々な情報を出してみましょう。まずは時計風に現在時刻などを表示します。先ほどのサンプルプログラムをコピーして、grove_oled_time.pyなどとして自フォルダ内(ここではPrograms/watch)に置いておきます。その中で、以下のmainプログラム中に現在時刻を表示する記述を追加します。
$ sudo vi ~/Programs/watch/grove_oled_time.py
[grove_oled_time.py (時間表示として以下赤枠部分を追加)]
このgrove_oled_time.pyを実行すると、写真のように現在日時を表示してくれたのではないかと思います。
次に、第2回で使った温湿度センサを真ん中のGroveソケットに差して、ディスプレイに温度、湿度を表示してみましょう。grove_oledプログラムからの変更部分は、以下の黄色の部分です。
$ sudo cp grove_oled_display_time.py grove_oled_temp.py
$ sudo vi grove_oled_temp.py
# ライブラリのインポート | |
from grove.grove_temperature_humidity_sensor import DHT | |
# DHT11 type | |
dht11 = DHT("11", 12) | |
… | |
# メインプログラム中 | |
def main(): | |
display = GroveOledDisplay128x64() | |
while True: | |
… | |
humi, temp = dht11.read() | |
print('DHT{0}, humidity {1:.1f}%, temperature {2:.1f}*'.format(dht11.dht_type, humi, temp)) | |
display.set_cursor(4, 1) | |
display.puts('Humid: ' + str(humi) + ' %') | |
display.set_cursor(5, 1) | |
display.puts('Temp: ' + str(temp) + ' C') |
上記のgrove_oled_temp.pyを流してみると、部屋の湿度、温度をこのように表示し始めました。
また第3回で使用した赤外線発信LEDをセットして、その結果も表示させてみます。赤外線の登録、実行は前回記事を見て、済ませておいてください。
$ sudo vi grove_oled_ir.py
# ライブラリのインポート | |
import RPi.GPIO as GPIO | |
import subprocess | |
BUTTON = 17 | |
GPIO.setmode(GPIO.BCM) | |
GPIO.setup(BUTTON, GPIO.IN) | |
… | |
# メインプログラム中 | |
def main(): | |
display = GroveOledDisplay128x64() | |
while True: | |
… | |
state = GPIO.input(BUTTON) | |
display.set_cursor(4, 1) | |
display.puts('Irsend: ') | |
display.set_cursor(5, 1) | |
if state: | |
print(‘No IR’) | |
display.puts('No IR') | |
else: | |
subprosess.Popen(”irsend SEND_ONCE remotetv on”) | |
print(‘RemoteTV On’) | |
display.puts('remotetv on') |
これでプログラムを流して、ReSpeaker上のボタンを押すと、赤外線が送信されて(テレビのリモコンがオンされて)、画面上にRemoteTV ONの表示が出ます。
3.音声操作できるウォッチ型デバイスにする
最後に、音声認識機能と連動させて、時計型のスマートウォッチにします。
前回記事を見て、Google Cloud Speechを使えるようにしておいてください。Google Cloud Consoleから、Cloud Speechの有効化とSDKのインストールをすることができます。
Cloud Speechのインストールが済んだら、このデバイスのボタンが押されると、音声指示を聴き始めるようなbutton_watch.pyプログラムをつくります。ここは前回のリモコンづくりとほとんど同じ仕組みです。
ここではラズパイ上のボタンを1回プッシュすると、Cloud Speechが指示を聞き始め、「リモコンオン」「温度を測って」などの言葉で、先ほどのプログラムを動かすようにします。
実際に音声を聞き始めるstream_jp_watch.jpなどのプログラム群は、サンプルとして以下に一覧していますので、ご自分のラズパイにコピーして使ってみてください。
https://github.com/ktrips/RasAi/tree/master/Programs/watch
– button_watch.py: ボタンを押すと音声聞き始め
– stream_jp_watch.py: Cloud Speechで特定の言葉に反応して、センサ、リモコン操作
– grove_oled_ir.py: 実際のリモコン操作プログラム
– grove_oled_temp.py: 温湿度センサ操作プログラム
– assistant_once.py: Google Assistantの実行プログラム
プログラムができたところで、時計風な外装もつくっていきます。ラズパイZeroを覆う外装として、ここではラバーのケースを使っています。ディスプレイがちょうど出るような窓を、カッターで切っておきました。また電源スイッチやGroveの端子が使えるような穴も開けておきます。
そこに腕時計のバンドを付けて、スマートウォッチ風にしてみました。Groveケーブルを少し外に出して、好きなセンサを付け替えできるようにしています。ここでは先ほどセットした、温湿度センサまたは赤外線発信LEDを付けています。
最後に、一連の動作を実行するスクリプトをつくって、それをラズパイ起動時に自動実行させます。
#!/bin/bash --rcfile | |
source /etc/bash.bashrc | |
source ~/.bashrc | |
source ~/env/bin/activate | |
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/credentials.json | |
echo $GOOGLE_APPLICATION_CREDENTIALS | |
cd /home/pi/Programs/watch | |
echo "Running button_watch.py!" | |
python button_watch.py | |
echo "Watch Program is done!" |
Description=Smart Watch Auto Run Program | |
[Service] | |
ExecStart=/bin/bash /home/pi/Programs/watch/watchd.sh | |
WorkingDirectory=/home/pi/Programs/watch | |
Restart=always | |
User=pi | |
[Install] | |
WantedBy=multi-user.target |
ラズパイ起動時に自動起動させる為に、以下のようにサービス登録をおこないます。
$ sudo systemctl enable watchd
$ sudo systemctl start watchd
$ sudo systemctl status watchd
それでは、ラズパイZeroを再起動して使ってみます。ボタンを一度押すと、音声を聞き始めます。「テレビオン!」や「加湿器オン!」などと話しかけてください。機器の赤外線受光部近くでおこなうと、リモコンとして動作してくれます。また、ボタン2度押しでご自分の好きなプログラムを直接起動します。長押しすると、Google Assistantが起動して、天気や道順なども教えてくれるようになっています。
この他にもGroveのセンサを変えて、色々使ってみてください。腕時計に話しかけて、リモコンやAssistant機能が使えて、なかなか未来的なスマートウォッチができたのではないかと思います!
4.まとめ
ラズパイZeroに画面を付けて、スマートウォッチにしてみました。これまでのセンサやリモコン機能、そして音声認識も合わせて、まさにスマートな時計になったのではないかと思います。
特にGroveのさまざまなセンサを付け替えるだけで、他の情報を取得したりすることができるようになります。例えば空気清浄度センサを使えば、空気清浄機チェックにも使えます。またGPSや心拍センサなどを付けて、健康管理デバイスのように使うこともできます。
全4回に渡ってお贈りしてきました「小型ラズパイZeroでモバイル・ガジェットをつくろう!」は今回が最終回となります。ラズパイZeroを使うと、小型で音声などにも対応したさまざまなスマートデバイスがつくれるのが分かっていただけたのではないかと思います。これからもぜひラズパイを使って、スマートな電子工作を進めていってください!ご愛読、ありがとうございました!
今回の連載の流れ
第1回:ラズパイZeroとラズパイHatで電子工作を簡単に!
第2回:Groveセンサを使った環境チェックデバイスをつくる
第3回:声で操作するマルチリモコンをつくる!
第4回:小型ディスプレイを付けてスマートウォッチをつくる!(今回)