決まった時間にプログラムを実行

制作例

時報を作る

参考: サーバーレスイベント

定期的にブザーが鳴るような時報を作ってみましょう。

アカウントを作成し、デバイスをアカウントに登録しておく必要があります。
追加できたらリポジトリにプログラムを作成してみましょう。
このプログラムをイベントに登録して 1 時間ごとに呼ばれるようにします。
リポジトリから作成を押し、適当な名前(今回は test としています。)で HTML を作成します。

配線とプログラム

まずはスピーカーを obniz につなぎます。今回は io3 と io9 につなぎました。

プログラムではボタンなどを押さなくても開かれるたびに音が鳴るようにします。

<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@3.5.0/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var speaker = obniz.wired("Speaker", {signal:3, gnd:9});
  speaker.play(1000);
  await obniz.wait(1000);
  speaker.stop();
}
</script>
</body>
</html>

この HTML を先ほど作成した HTML(test として作成したやつです)に貼り付けて保存します。
実行すると 1 秒だけ 1khz の音がなるはずです。

イベントでは、処理が完了した時に done()関数を呼ぶことになっています。
呼ばない場合は 30 秒後に自動的にエラーとして停止することになります。
done 関数はイベントから呼ばれたときだけ存在する関数なので、done があるかどうかをチェックしてあれば、done を呼ぶようにします。

<html>
<head>
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@3.23.0/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>

<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
  var speaker = obniz.wired("Speaker", {signal:3, gnd:9});
  speaker.play(1000);
  await obniz.wait(1000);
  speaker.stop();
  if (typeof done === "function") {
    done();
  }
}
</script>
</body>
</html>

イベントに登録

イベントの作成は同じく開発者コンソールのイベントにある「新規作成」から行います。

  1. Project Name: イベントの名前です。なんでも良いです。
  2. トリガー: どのトリガーにするかを選びます。「繰り返し」を選び 1 にして、hour を選びます。これで 1 時間毎になります。
  3. 実行するアプリケーション: イベント発生時にどの HTML を開いて実行するかをしています。「リポジトリ内のHTML」を選択しm先ほど作成した test を選びます。

入力が終わったら「作成」を押して作成します。これで完了です。

テスト実行

試しに実行してみましょう。イベント画面の「テスト実行」ボタンを押すと試しに実行させることができます。音は鳴りましたか?
これで イベントの設定は完了です。今後、1 時間ごとに自動的にスピーカーから音がすると思います。

もしうまく動かなかったりした場合はイベント画面で実行ログを確認することができます。
エラーや console.log()などで出力したログを確認できますので、それを使って確認してみて下さい。