T time

プログラミングや電子工作、各種ガジェットに関するブログです。

PebbleTime で Watchface 開発

f:id:tatur0u:20150625052428p:plain

Pebble 使ってますか?
スマートウォッチの先駆け、Kickstarter の伝説、そう、あの Pebble です。 スマートフォン経由で無数の時計盤をインストールでき、活動計にもなる、便利なガジェットですよね。

そして先日、その進化版である PebbleTime も登場しました。
こちらは画面がカラーになり音声認識にも対応、新たなUIを搭載し、かつバッテリーも1周間もつという革新的なスペックで、自身が持つ Kickstarter の売上記録を軽々と超え総額 $20M(25億円)という大記録を打ち立てました。 その勢いに Apple も対抗策として Apple Watch を作り、Pebble、Apple Watch、Google Android Wear の三つ巴の戦いを繰り広げています。

あー、これくらいでいいですかね。

Pebble 信者のみなさまこんにちわ。私ですが。
Pebble、実際どうです? あの低スペックが巷ではなかなか評価されていない(特に Apple Watch が出てきてから)気もしますが、とても楽しいガジェットですよ。 私は Pebble、Pebble Steel、Pebble Time を持ってますが、毎日使ってます。

なんたって、軽いし、電池の持ちも良いし、ちょっとした暇つぶしにも使えるし、何より自分で文字盤を作れるところが最高です。

そう、文字盤を自分で作れるんです。

Pebble では文字盤のことを Watchface と言いますが、自分で作って、しかも世界に公開できるんです。すでに世界中から無数の Watchface が公開されていますが、自分で作った Watchface は格別です。なんせ自分が欲しいものをそのまま実現できるんですから。

そんな Watchface ですが、作るためにはプログラミングできないといけません。
そんなの無理?大丈夫、プログラミングせずに Web上で Watchface を作るサービスもありますよ。

www.watchface-generator.de

でも、これでできるのは、背景を変えたり、時計針や時刻表示を少しカスタマイズできるくらいです。 たとえば、これは私が作った ゼビ数字*1で時刻を表示する Watchface ですが、こういうのはジェネレータでは作れません。

XEVI NUMBER
f:id:tatur0u:20150625060635g:plain f:id:tatur0u:20150625060708g:plain
XEVI NUMBER is available on the Pebble appstore

(ちなみに、ハートの中の数字は「いいね!」の数です。2015-06-27 現在で 2 ですね…)

せっかくだから、ジェネレータに頼らず想像力の赴くままに作ってみましょう。

このブログでは、PebbleTime(最新のカラー表示できるやつ)の Watchface を開発する方法を紹介していきます。

対象読者

このブログが対象とする読者です。

  • Pebble を持っている方
  • Pebble を持っていない方

世の中には2種類の人間しかいない…ってやつですね(何が?)
持っていても持っていなくても興味があればOK。 あとで紹介しますが、実際 Pebble を持っていなくても開発はできます。

対象機器

このブログが対象とする機器です。

機器 対象/非対象
Pebble 非対象
Pebble Steel 非対象
Pebble Time 対象

せっかくなので、最新のやつを対象にしたいと思います。
ただ、Pebble/PebbleSteel と PebbleTime は多くの要素が共通しているため、PebbleTime の開発経験があれば Pebble/PebbleSteel の開発もできます(逆もしかり)。 また、可能な限り Pebble 用の注釈も付けるつもりなので、PebbleTime を持っていない方も参考になると思います。

Watchface でデキルこと

まずは WatchFace を作るにあたり、どのような機能が使えるかを紹介します。

カテゴリ 機能
アウトプット 画面 解像度 144x168 pixel
色数 64色(色は固定)
バックライト ON/OFF 可能
バイブレーション パターン ブッ
ブブッ
ブーーッ
なし
インプット ボタン 使えない!
コンパス あり
加速度 あり(XYZ軸方向)
タイマー 時分秒ごと
or 一定時間後
音声 Coming soon
GPS なし
タッチパネル なんですかそれ?
その他 ストレージ Pebble本体にデータを記録
スマートフォン iPhone 専用アプリ経由でデータを送受信
Android 専用アプリ経由でデータを送受信

いかがです?

「スマートウォッチのパイオニアとか言っておきながら全然低スペックじゃねーか」と思われたかたも、その逆の方が多いと思いますがこれが現実です。 解像度は低いし、色も出ないし、音も鳴らせません。

しかもボタンも使えません! ボタン付いてるのに!

実は、PebbleTime には2種類のアプリの形式があります。
今回紹介する「Watchface」と「Watchapp」です。 両者は以下の様な位置づけです。

アプリ形式 機能
Watchface 文字盤
Watchapp アプリ

違いは幾つかあるのですが、大きな違いの一つが「ボタンが使えるか否か」です。 Watchface はボタンが使えませんが Watchapp は使えます。 だって文字盤ですよ。時間見るのにボタン必要ないでしょ?

そんな制限だらけの Watchface ですが、アイデア次第で面白いものはできるはずです。

開発環境

開発環境は大雑把に以下の2つが選べます。

  • ローカル
  • Web

自分の PC に開発環境を整えることも、Web 上の IDE を使って開発することもできます。 Web 上の IDE は「CloudPebble」といいます。

ローカルと CloudPebble を比較してみます。

カテゴリ ローカル環境 CloudPebble
OS Linux
OS X
HTML5 のブラウザが動けばどこでも(スマホでも!)
エディタ エディタ お好きなものを CloudPebble
キーバインド エディタ次第 Standard、vim-like、emacs-like の3種類から選択可能
シンタックスハイライト エディタ次第 ばっちり
補完機能 エディタ次第 変数、関数の自動補完機能あり
コードチェッカー エディタ次第 リアルタイムチェッカーあり
ビルド CLI GUI
デバッグ コンソールにログ出力 ログ画面にログ出力
パージョン管理 お好きなものを github 連携

どうです? CloudPebble 良さそうでしょ。

実際 CloudPebble は良くできていて、キーバインドにさえ目を瞑れば最高の環境です(それがデカイですがね)。なにより開発環境を整えなくても良いのが便利です。

このブログでは CloudPebble で開発する方法を紹介します。

動作確認

作ったものを動作確認するのに、以下の2つが使えます。

実際の PebbleTime で動かす以外にもエミュレータで確認ができます。 なので、まだ PebbleTime を買っていない方でも開発できるんです。 しかもエミュレータでもコンパスや加速度が使えます(方法は今後紹介します)。

CloudPebble を使用する場合でも、実機、エミュレータ共に使えますよ。

ただ、エミュレータは実機に比べると遅いです。 PC のスペックにもよると思いますが、アニメーションをぐりぐり動かそうと思うと実機のようにはいきません。 それ以外は普通に使えます。

言語

さて、まだ肝心なことを言ってませんでしたが。
開発言語はなんでしょう。

です!

みなさん、C言語大好きですよね!
嫌いですか、そうですか。 いろんなブログ見てると人気無いですよねー。なんでだろ?

でも大丈夫。
そんなあなたには「ドットインストール」があります!! Let's study!

dotinstall.com

実は、Javascript でも開発できなきゃないんですが、Javascript でデキルことは初めに紹介したジェネレーターとほとんど変わらないので面白くないんですよ。なのでこのブログでは紹介しません。

と言うわけでC言語でいってみましょう。

あとがき

PebbleTime の Watchface でデキルことと、開発環境を紹介しました。 いかがでしょう。興味がわいたなら幸いです。

では、次回は実際に Watchface を作ってエミュレータで動作確認してみたいと思います。


PebbleTime が Kickstarter を卒業し、公式サイトでもプレオーダーを開始しました。
2015-06-27 現在で $199.99 です。

getpebble.com


Amazon.co.jp並行輸入品が出てますね。 ただ、正直高いです。 公式サイトで買うことをおすすめします。


こちらは古い白黒のやつ。 見た目の違いで2種類あります(性能は同じ)。

Pebble Steel (Brushed Stainless)

Pebble Steel (Brushed Stainless)