1時間の時報を作る

時報を作る: アプリで1時間ごとにブザーを鳴らす

前回のレッスンで、obnizのアプリ機能について確認し、アプリを作るための準備を行いました。ここからはアプリの開発をしていきます!

今回のレッスンでは、ブザーのパーツを使って1時間ごとに音を鳴らし、時報を作っていきます。

ブザー

ブザーは、音を鳴らすことができるパーツです。

ブザーにはアクティブブザーとパッシブブザーの2種類があります。
Starter Kitに入っているブザーはパッシブブザーです。

iotblock_07_01

アクティブブザーは振動源が内蔵されているので、電源に繋ぐだけで音が鳴ります。
それに対し、パッシブブザーはそのような発振回路を持たず、外部からの音声信号によって音が鳴ります。

パッシブブザーは外部信号の周波数を変えることで、鳴らす音の高さを変えることができます。
Starter Kitのブザーも音の高さを指定することができ、ブロックプログラムではドレミファソラシドの音階で指定することができます。

アプリを作る

今回使うパーツについて理解したところで、早速アプリを作る作業に入っていきましょう。

まずはいつも通り、開発者コンソールに移動します。
そして左側のタブから「アプリ開発」を選び、「新規作成」のボタンを押してください。

iotblock_07_02

アプリの種類で「ブラウザアプリ(ブロックプログラム)」を選択し、「obniz Board/1Yを使うテンプレート」の「Empty」を選びます。

アプリ名を入力するウィンドウが出てくるので、好きなアプリ名を入力し、「アプリを作成」を押します。
(ここでは時報のアプリということで、「時報」という名前にしました)

iotblock_07_03

そうすると、アプリ設定の画面になります。この設定はあとからでも変更できるので、今はそのままの設定にしておいて、先にプログラムを作る画面にいってしまいましょう。「プログラムを編集」のボタンを押してください。

iotblock_07_04

見慣れたプログラム画面が出てきましたね。この画面で、今までのようにブロックを並べて、プログラムを作っていくことになります。

iotblock_07_05

通常のブロックプログラムのプログラム画面と違うところは、obnizIDが「OBNIZ_ID_HERE」と指定されており、右上に登録したデバイスのobnizIDが入っているところです。

アプリはさまざまなデバイスで使うことができるように、obnizIDを具体的に指定せず、「OBNIZ_ID_HERE」という形で記述します。
ただ、動作確認ができるように、インストールをしなくても、登録してあるデバイスでは右上のボタンを押すことで、すぐにブラウザ上で実行できるようになっています。

ブザーを鳴らす

アプリをインストールしなくてもブラウザで実行することができるので、まずはその機能を使ってブザーを鳴らしてみましょう。

「Starter Kit」カテゴリの中に、ブザーのブロックがあります。

iotblock_07_06

「音を鳴らす」ブロックは、「止める」ブロックが使われるまで、音を鳴らし続けます。
「音を○拍鳴らす」ブロックは、指定した拍数分の長さだけ、音を鳴らします。

今回は少し鳴ったら自然に止まってほしいので、「音を○拍鳴らす」ブロックを使うことにします。
次のようなプログラムを作って、右上の実行ボタンで実行してみましょう。

iotblock_07_07

ドの音が1拍だけ鳴りましたか?
うまく動かなかった人は、ブザーが挿さっているピンがブロックの数字と対応しているかを確認してみてください。

「真ん中のド」の部分を別の音階にすれば音の高さを変えることができ、「1」拍の部分を変えれば音の長さを変えることができます。

これで、ブザーのパーツを使って音を鳴らすことができるようになりました!

プログラムを時間で実行する

実行ボタンを押してブザーを鳴らすだけなら、通常のブロックプログラムでも同じことができます。
しかし、手動で音を鳴らすだけでは時報にならないので、プログラムを時間で定期的に実行させる必要があります。

そこで、アプリの「クラウド実行」という機能を使います。

クラウド実行は、ブラウザを立ち上げて実行するのではなく、クラウド上でプログラムを動かす仕組みです。
きっかけを設定し、そのきっかけが起こるごとにプログラムを動かすことができます。

きっかけとして設定できるのは

  • Webhook
  • 決められた時刻
  • 決められた時間の間隔
  • デバイスがオンラインになったら
  • デバイスのスイッチが押されたら

の5種類です。複数のきっかけを設定することも可能です。
(参考:ブラウザアプリ:クラウド実行

今回は1時間ごとにブザーが鳴る時報を作りたいので、「1時間ごと」という「決められた時間の間隔」でプログラムを実行するように設定します。

では、先ほど飛ばしたアプリ設定の画面で、クラウド実行の設定をしましょう。
「ファイル」→「保存」でプログラムを保存してから、左上の「<コンソール」で開発者コンソールに戻ります。

iotblock_07_08

「アプリ開発」に行き、今回のアプリの「アプリ設定」を押します。

iotblock_07_09

「クラウド実行」の「時間で実行」に、時間の設定を入力します。
「時間で実行」では、「決められた時刻」または「決められた時間の間隔」のきっかけを設定することができます。

  • 決められた時刻:1日の中の特定の時間を指定
    everyday/11:11のように記述(毎日11:11に実行される)

  • 決められた時間の間隔:分刻みまたは時間刻みで間隔を指定
    every/10minutesevery/10hoursのように記述(10分ごとや10時間ごとに実行される)

今回は1時間ごとにプログラムを動かしたいので、every/1hoursと入力することになります。
しかし最初から1時間ごとに設定すると、ちゃんと動くかどうかを確認するのに、1時間待たなければなりません。
そのため、最初は10分ごとに動くように設定し、動作確認ができたら1時間ごとに設定し直すことにしましょう(アプリの1日あたりの実行上限回数は150回なので、設定できる短い時間として10分を選びました)。

iotblock_07_10

時間設定を入力できたら、右上の「設定を更新」を押してアプリ設定を保存します。

アプリをデバイスにインストールする

アプリが完成したら、デバイスにインストールして使用します。
前回のレッスンで登録したデバイスにアプリをインストールして、プログラムが動くかどうかを確認してみましょう。

先ほどクラウド実行の時間設定をしたアプリ設定の画面で、上部の「アプリ操作」の項目に、「自分の持つデバイスへインストール」というボタンがあるので、そこを押します。

iotblock_07_11

アプリ一覧の画面で、「インストール」という部分をクリックしてもインストールできます。

iotblock_07_12

インストールしたいデバイスを選んで「インストール」をクリックすれば、アプリがデバイスにインストールされます。

デバイスにアプリがインストールされていることは、デバイス一覧で確認することができます。

iotblock_07_13

「アプリを開く」のボタンを押すと、アプリをブラウザ実行させることができます。
今回はクラウド実行させたいので、10分後にブザーが鳴るのを、このまま気長に待ちましょう。少しの誤差がある可能性はあるので、10分経って何も音がしなくても、焦らずにあと少しだけ待ってみてください。

ブザーが鳴りましたか? そしたら成功です!

クラウド実行では、決められた時間(プランによります)でタイムアウトして、プログラムが終了するようになっています。
そのため、今回のプログラムがうまく動いていれば、タイムアウトのメッセージが「アプリステータス」のところに出ているはずです。

iotblock_07_14

Errorと出ているのは、アプリ終了時にどうするかを指定していないためで、きちんと10分ごとにブザーが鳴ればプログラムは正しく動作しているので、問題ありません。

10分ごとに動作することが確認できたら、アプリ設定でevery/10minutesevery/1hoursに書き換えて、1時間ごとに音が鳴る時報の完成です!

はじめてのアプリ開発はいかがでしたか? アプリがどんなものなのか、なんとなく掴めてきたでしょうか。

次回は「アプリステータス」の部分に、好きな情報を表示することに挑戦してみます!

おまけ:音のアレンジ

Starter Kitのブザーはパッシブブザーなので、音階を変えることができる、というお話をしました。
ブザーを動かしてみるときに、いろいろな音階を鳴らしてみた方もいらっしゃるかもしれませんね。

せっかくいろいろな音が出せるのに、短く鳴らすだけじゃもったいない!
時報なのに、ただ音が鳴るだけじゃ時報らしくない!

ということで、もう少し時報らしい音が出せるようにアレンジしたプログラムを、参考として載せておきます。
興味がある方は、ぜひ聴いてみてください。どうでしょうか、時報らしくなったでしょうか。

iotblock_07_15

このようにブザーは音の高さと長さを変えていろいろな音を出すことができるので、待機ブロックとうまく組み合わせれば、さまざまなメロディーが作れます。
ぜひ皆さん自身で、オリジナリティー溢れる時報の音を作ってみてください!