Garmin Connect IQ プログラミング 自転車けんちゃん

大学サークルで自転車に魅せられて30年以上たちました。 いまだにロングライドと言えば日の出から日の入りまで 走っています。

ホーム > カテゴリー - Garmin Connect IQ プログラミング

Garmin Connect IQ SDK プログラミング(第3回):変数

変数を定義してみましょう

Monke Cの変数定義はJava Scriptと同様に定義はvarのみです。
変数の型は以下の種類があります。
型は代入または演算のときに自動的に判定されます。

変数の型(自動判定の為、全てvarで定義)
Number 32ビット符号付整数
Long 64ビット符号付整数
Floats 32ビット浮動小数点
Double 64ビット浮動小数点
Booleans 論理型 true/false
Strings 文字列
Objects インスタンスオブジェクト (classで定義される)
Arrays "new [X]"で定義される配列。'X'は配列の大きさ。
Dictionaries{}で定義される辞書配列。
配列要素に別名を付けて呼び出せる。


型を明示的に示す場合は以下のようにします。

変数型の指定方法
var x = 5; 数値で32ビット符号付整数
var y = 6.0; 小数点があると浮動小数点型
var l = 5l; 小文字の"l"エルで64ビット符号付整数
var d = 4.0d; 小文字の"d"で64ビット浮動小数点
var bool = true; true/falseで論理型
var arr = new [20 + 30];配列:要素数50
var chr = 'H'; 文字
var str = "Hello"; 文字列
var dict = { x=>y }; 辞書型:キーは5、値は6.0


型を変換する場合は以下のようにします。
  • <値または変数>.toXXXX()
たとえば文字列"11"を数値に変換する場合は
  • "11".toInteger
のように記述します。

変数型の変換
toNumber() 32ビット符号付整数
toLong() 64ビット符号付整数
toFloat() 32ビット浮動小数点に変換
toDouble() 64ビット浮動小数点に変換


これらのクラスはそれぞれの変数に定義されているクラスで、
newでのインスタンス化無し(Arrayを除く)に使用できる。
たとえばDoubleには
toDouble、toFloat、toLong、toNumber
のクラスが定義されている。

詳細は
"API Docs"のDouble、Float、Long、String、Number、Array、Dictionaryに記載されている。
  • <Install Directory>\connectiq\connectiq-sdk-win-2.1.0\doc\_index.html


第2回目で作成したコードを元に修正を加えてテストします。

2.ソースの修正

sourceフォルダの.mcのMonkey Cソースコードを修正します。
  • DataFieldView.mc:データ表示クラス

コードの指定部分にテストコードを埋め込みます。

DataFieldView.mcの修正箇所
//DataFieldView.mcにテストコードを埋め込む
    :
    :
    function compute(info) {
        Sys.println("View : compute");
        // infoから経過時間(msec)を取り出して秒に変換
        // varは変数の定義。変数の型は自動で認識される。
        var value_elapsedTime =
            info.elapsedTime * MILLISECONDS_TO_SECONDS;
※
※ここ(returnの前、最後から4行目)にテストコードを埋め込む
※
        // 経過時間をリターンして表示させる
        return value_elapsedTime;
    }
}

以下のコードをコピーペーストしてください。
テストコードの結果はConsoleにプリントされます。
テストコードの最後まで実行すると以下の行でエラーで停止します。
  • Sys.println(1,1);

DataFieldView.mcに埋め込むコード
//"※"箇所に埋め込むテストコード

//変数定義
//型未定
var a;
a=null;
Sys.println("Integer a = "+a);

//Integer型代入
a = 1;
Sys.println("Integer a = "+a);

//符号付整数に1を加算
a=a + 1;
Sys.println("Integer a + 1 = "+a);

//整数に浮動小数点を加算
a=a + 1.5;
Sys.println("Integer a + Float 1.5 = "+a);


//符号付整数に変換
//小数点以下は切り捨てられる
a=a.toNumber();
Sys.println("Float a is casted to Number a = "+a);


//同じ変数に文字が代入できる
a=a.toString();
Sys.println("Numbera is casted to String a = "+a);

//文字に数字の1を加算
//数字が文字に変換されて文字連結
a=a + 1;
Sys.println("String a + Ingeger 1 ="+a);

//***エラーを発生させて強制的に停止***
Sys.println(1,1);


自動変換の規則がだいたいわかったでしょうか。
文字+数字は文字に変換して文字結合。
数字同士の場合はビット数の大きい方、精度の高い方に合わせます。
精度の低い方に型変換すると端数は切り捨て。

中学でリンゴとみかんは足せません。
グラムとメートルも足してはいけませんと習ったのに
Monkey CやJava Scriptは文字と数字が足せるのですね。汗)

Garmin Connect IQ SDK プログラミング(第2回):プロジェクト作成とデバッグ

プロジェクトを作ってデバッグしてみましょう

Connect IQで使用する言語はJavaのようなVM上で動作するオブジェクト指向言語です。プロジェクトの作成はCやJavaの場合とほとんど同じ。特に難しいところはありません。

デバッグは・・・デバッガーがありません!
”将来のバージョンでは” trap(); を埋め込んでおくと
デバッガーが起動するそうです。
おいおい

ということはまるでカーネルのように print() でデバッグです。
ブレークポイントも無ければ、
オブジェクトの中身の表示も出来ない、
SystemClassの定義も見れない。

諸君がMonkey Cを身に付けた
瞬間から すでにバトルは
始まっているのである
  by SUIKEN-METAL

いさぎよすぎ!ハードル高っ!

気を取り直してはじめてみましょう。

1.プロジェクトの作成

Ecripseのメニューからプロジェクトを作ってみましょう。
  • File⇒New⇒Project


  • Connect IQ Project選択⇒Nextクリック


  • Project name "DataField"⇒Nextクリック


  • Project Type "Data Field" ⇒ "Edge 520"をチェック⇒Nextクリック


  • プロジェクトテンプレート"Simple"を選択⇒Nextクリック


  • languages "English"を選択⇒Finishクリック


  • Connect IQ perspectiveのダイアログで”Yes"を選択



2.ソースの修正

Data Fieldプロジェクトが出来ました。


sourceフォルダに.mcのMonkey Cソースコードが2種類あります。
  • xxApp.mc:アプリケーションの入り口
  • xxView.mc:データ表示クラス

それぞれのファイルに下のコードをコピーペーストして完成させます。

DataFiledApp.mc
//経過時間を表示するData Fieldアプリケーション

//Systemにはprintlnなど汎用的に使用するクラスが定義されている
//SystemクラスのエイリアスをSysに設定
using Toybox.System as Sys;
//Applicationにはアプリケーションの入り口 AppBaseが定義されている
//ApplicationクラスのエイリアスをAppに設定
using Toybox.Application as App;

//スーパークラスAppBaseを拡張してDataFieldAppクラスを定義
//データフィールドアプリケーションの入り口
class DataFieldApp extends App.AppBase {

    // コンストラクタ(初期化関数)
    function initialize() {	//functionはJavaのメソッドに相当
        //スーパークラスのコンストラクタ呼び出し
        AppBase.initialize();
        Sys.println("App : initialize");//printlnはJavaと同じ
    }

    // onStart() は アプリケーションのスタート時にCallされる
    function onStart(state) {
        Sys.println("App : onStart");
    }

    // onStop() はアプリケーションの終了時にCallされる
    function onStop(state) {
        Sys.println("App : onStop");
    }

    // データフィールド表示アプリケーションの
    //オブジェクト生成してReturnする
    function getInitialView() {
        Sys.println("App : getInitialView");
        // ProjDataFieldView()のオブジェクト生成と初期化
        // newでコンストラクタが呼び出される
        return [ new DataFieldView() ];
    }
}


DataFieldView.mc
//経過時間を表示するData Fieldアプリケーションの表示クラス

//Systemにはprintlnなど汎用的に使用するクラスが定義されている
//SystemクラスのエイリアスをSysに設定
using Toybox.System as Sys;
//WatchUiにはデータ表示クラスDataFieldViewが定義されている
//WatchUiクラスのエイリアスをUiに設定
using Toybox.WatchUi as Ui;

//スーパークラスSimpleDataFieldを拡張してDataFieldViewクラスを定義
//データ表示を行うクラス
class DataFieldView extends Ui.SimpleDataField {
    //マイル⇒メートル換算用定数
    const METERS_TO_MILES = 0.000621371;
    //ミリ秒⇒秒換算用定数
    const MILLISECONDS_TO_SECONDS = 0.001;

    // コンストラクタ(初期化関数)
    function initialize() {
        Sys.println("View : initialize");
        SimpleDataField.initialize();
        // データフィールドのラベル(画面に表示される)
        //labelの定義はinitializedeでのみ有効
        label = "Time";
    }

    // 約1秒間隔で呼び出される関数
    //infoオブジェクトには実行中ワークアウトの値
    //(経過時間、心拍、スピードなどなど)が含まれる
    //returnで表示したい値を返す
    function compute(info) {
        Sys.println("View : compute");
        // infoから経過時間(msec)を取り出して秒に変換
        // varは変数の定義。変数の型は自動で認識される。
        var value_elapsedTime =
            info.elapsedTime * MILLISECONDS_TO_SECONDS;
        // 経過時間をリターンして表示させる
        return value_elapsedTime;
    }
}


3.シミュレータでソフトウエアを実行

実機での実行はConnect IQ Storeにアップロードが必要です。
アップロードの仕方はまた後日。
まずはシミュレータでデバッグします。

ブレークポイントやステップ実行は無いので
コンソールにprintlnでテキストを出力してデバッグします。
  • DataFieldプロジェクト右クリック⇒Run As⇒Run Configurations⇒


  • Connect IQ Appをダブルクリック⇒New_configurationが生成される


  • New_configurationを選択⇒Choose Project "DataField"⇒
  • Target Device "Edge 520"⇒Applyクリック⇒Runクリック



Consoleにprintlnで指定したメッセージが表示されます。


ConnectIQ Device SimulatorにはEdge 520の画面が表示されています。
start/stopボタンをマウスでクリックするとタイマーがスタートします。
表示間隔は”約”1秒です。正確な1秒ではないので端数が出ます。


シミュレーションを停止するときは
Simulatorの右上の"x"をクリックして
Windowをクローズするとシミュレーションが終わります。

実行できたでしょうか。
functionにLogメッセージを埋め込むと
どのような順番で実行しているか分かります。

DataFieldの場合は単純に表示クラスを
一定間隔で呼び出しているだけです。
簡単ですね。アプリが作成できそうですね。

Garmin Connect IQ SDK プログラミング(第1回):環境設定

オブジェクト指向が分からないエンジニアのプログラミング講座

Connect IQ SDKでオブジェクト指向プログラミングしよう!

Javaを50の手習いで習い始めたのですが
習う⇒忘れる⇒復習⇒忘れる・・・の無限ループ。
やっぱオブジェクト指向は使ってみないとダメだね。
ってことでConnect IQ SDKでアプリを作ってみよう!
50回くらいの超大作になる予定!
飽きっぽい性格なので何回続くか分かりませんが・・・爆)

1.ツールのバージョン

Connect IQ SDKのバージョンは執筆時点で
  • v1.2.11:正式リリース
  • v2.1.0 :Beta
となっています。学習している間に正式版になると思いますのでv2.1.0で進めることにします。

2.インストールの手引き

インストールの手引きはWebの情報とインストーラに付属している情報の2種類あります。
Webのトップページからの場合はこちら。

Webの直接リンクの場合はこちら。

インストーラー付属のドキュメントの場合はこちら。
  • <Install directory>\connectiq-sdk-win-2.1.0\ProgrammersGuide.html

3.JDKダウンロード

SDK環境の実行にはOracle Java JDK 7以上が必要となります。
下のJDKダウンロードページからJDKをダウンロードしてインストールします。 執筆時点でのバージョンは8u92です。

4.Eclipse lunaのインストール

間発はEcripse lunaを使用します。
下のEcripse lunaダウンロードページからダウンロードします。
  • http://www.eclipse.org/luna/
  • "Standard Edition"(Eclipse IDE for Eclipse Committers 4.4.2)
    または
    "IDE for Java Developers"(Eclipse IDE for Java Developers)
    が使用できます。

ダウンロードが終わりましたらzipファイルを解凍します。
Ecripseは2バイトコードやスペースを使用しないフォルダに格納してください。

5.Eclipseの設定とConnect IQ SDKのインストール

Connect ID SDKのインストールはマニュアル記載の方法より"SDK Manager"を使用するほうが簡単です。
この手順ではパスの設定やWebから直接のSDKダウンロードは不要です。
途中までは"Getting Started"の"Installing the Eclipse Plug-in"と同じです。

Eclipseを起動

  • eclipse.exeをクリックして起動
  • Workspaceを設定
  • 例)C:\Users\<username>\Documents\workspace

Eclipse Plug-inのインストール

  • Helpメニュー⇒Install New Software


  • Add…ボタンをクリック


  • Location欄に以下設定
  • http://developer.garmin.com/downloads/connect-iq/eclipse/
  • Name欄に"Connect IQ Plugin"と入力


  • Connect IQのチェックボックスをON⇒Nextをクリック


ダウンロードが開始されます。終了するとEclipseが再起動されます。

Eclipse Plug-inの設定

この部分は手順書に記載ありません。
  • ConnectIQ⇒Open SDK Manager


  • SDKをセーブするディレクトリを指定
  • (例 C:\_tools\connectiq)
  • Connect IQ SDK 2.1.0 の"Download"をクリック


  • SDKのダウンロードが始まります

Developper Keyの取得

Developper KeyはConnect IQストアーにアップロードしたアプリのアップデートに必要です。無くすとアップロードしたアプリがメンテナンスできなくなります。
  • Window⇒Preferences


  • Connect IQ⇒Compiler⇒Developper Key
  • Developper Keyをもっていない場合は"Generate"、もっていたらBrowsで選択


下のSDKのルートディレクトリは自動設定されます。手入力不要です。
  • Window⇒Preferences⇒Connect IQ⇒SDK Root Drectory

6.サンプル読込み

サンプルを読み込む場合はEcipseから以下のようにします。
  • File⇒Import


  • Existing Project into Workspace⇒Nextをクリック


  • Select root directory "Browse"でサンプルのディレクトリを指定
  • <Install directory>\connectiq\connectiq-sdk-win-2.1.0\samples
  • Copy project into workspaceをチェック



読込みが終了するとProject Explorerにサンプルが20個程度表示されます。

うまくインストールできたでしょうか。
次回をお楽しみに。
プロフィール

けんちゃん

Author:けんちゃん
東京在住、和歌山生まれ
自称、和田峠ニスト
中華カーボンと手組みホイールでシクロクロス参戦中

カテゴリ