Spark CoreにはデフォルトでTinkerファームウェアがインストールされています。前回はAndroidなどのTinkerアプリなどから操作するために使いました。TinkerファームウェアはArduinoのFirmataファームウェアと異なり、インターネット上のSpark Cloudを経由して通信します。そのため直接ホストマシンと接続する必要がありません。リモートにあるSpark CoreをREST APIなどから操作することができます。自分のクラウド上の仮想マシンからNode.jsのプログラムを実行することも可能です。
ブレッドボードとLEDの準備
Spark-Core-LEDを参考にしてブレッドボードにLEDと抵抗を配線します。
D0のGPIOを使ってLチカします。
spark-cli
spark-cliを自分のクラウド上にデプロイしてSpark CoreをLチカしてみます。
Dockerコンテナの用意
適当なクラウドに仮想マシンとDockerをインストールしてプロジェクトを作成します。今回はIDCFクラウドの仮想マシンを使いました。最初にプロジェクトを作成します。
$ mkdir ~/docker_apps/spark_apps/my-spark-cli |
spark-cliはグローバルインストールするので、package.jsonには依存パッケージとして定義しません。
{ |
Dockerfileを作成してイメージをビルドします。ベースイメージにはgoogle/nodejs-runtimeを指定します。
$ cat <<EOF > Dockerfile |
ログイン
CLIを使ってSpark Cloudにログインします。テンポラリのaccess_tokenを取得できるので以下の操作で使います。
$ spark cloud login |
CLIからLチカ
spark cloud list
を実行すると接続しているSpark Coreの一覧を取得できます。xxx
のところに実際にはdevice_idが入っています。
$ spark cloud list |
このデバイスで使える関数の一覧が表示されます。digitalwriteを使いLチカしてみます。
D0のLEDを点灯(HIGH)します。成功すると1が返ります。
$ spark call ninja_mighty digitalwrite D0,HIGH |
D0のLEDを消灯(LOW)します。
$ spark call ninja_mighty digitalwrite D0,LOW |
REST APIからLチカ
spark-cliで確認した{access_token}と{device_id}を使ってREST APIを試してみます。
D0のLEDを点灯(HIGH)します。
$ curl https://api.spark.io/v1/devices/{device_id}/digitalwrite \ |
D0のLEDを消灯(LOW)します。
$ curl https://api.spark.io/v1/devices/{device_id}/digitalwrite \ |
Cylon.jsでLチカ
Cylon.jsのcylon-sparkアダプタを使い、Node.jsのプログラムからLチカします。
Dockerコンテナの用意
Dockerをインストールした仮想マシンにプロジェクトを作成します。
$ mkdir ~/docker_apps/spark_apps/led-blinking |
package.jsonに必要なパッケージを定義します。
{ |
app.jsのメインプログラムを書きます。access_tokenとdevice_idはDokerコンテナの起動時に環境変数として渡します。
var Cylon = require('cylon'); |
Dockerfileを作成してイメージをビルドします。
$ echo FROM google/nodejs-runtime > Dockerfile |
Lチカの実行
Dockerコンテナを起動します。{device_id}はspike-cliで取得した値と同じですが、{access_token}の値はテンポラリのようです。Spark Buildにログインして、Settingsメニューからアクセストークンを確認します。
{device_id}もSpark BuildのCoresメニューから確認できます。
docker run
の-e
フラグに{access_token}と{device_id}を指定してコンテナを起動します。package.jsonのscripts
ディレクティブに指定したapp.jsを実行してLチカが始まります。
$ docker run --rm --name led-blinking \ |