Edisonのボタン押下をイベントで取得し、LEDを制御


D2にボタンモジュールをつなぎます

XDK上で on board LED blinkのテンプレートで新規プロジェクトを作成


package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"name": "hoge",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"cylon": "^0.21.2",
"cylon-firmata": "^0.18.0",
"cylon-intel-iot": "^0.4.0"
}
}

main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var Cylon = require('cylon');
var turnOn = true;
Cylon
.robot()
.connection('edison', { adaptor: 'intel-iot' })
.device('led', { driver: 'led', pin: 13, connection: 'edison' })
.device('touch', { driver: 'button', pin: 2, connection: 'edison' })
.on('ready', function(my) {
my.touch.on('push', function() {
if(!turnOn){
my.led.turnOn();
console.log('push on');
}else{
my.led.turnOff();
console.log('push off');
}
turnOn = !turnOn;
});
});
Cylon.start();
→Pin2とD2はどういう関係あるのか良くわからないね。

プロジェクトをアップロード(cylonモジュールのインストールダイアログが自動的に表示される。)
installした場所:
[root@edison1_pepper:~/.node_app_slot]$ lsal
201 -rw-r--r-- 1 root root 36 Mar 25 17:55 .appGuid
211 -rw-rw-r-- 1 root root 2.4K Mar 25 17:53 README.md
4491 -rw-rw-r-- 1 root root 5.0K Mar 25 17:53 icon.png
4492 -rw-rw-r-- 1 root root 1.4K Mar 25 17:53 main.js
4609 drwxr-xr-x 7 root root 4.0K Mar 25 16:25 node_modules/
4493 -rw-rw-r-- 1 root root 252 Mar 25 17:53 package.json
4494 drwxr-xr-x 2 root root 4.0K Mar 25 17:53 xdk/
node_app_slotには現在のプロジェクト内容しかないようです。
他のプロジェクトをアップロードすると、node_app_slot配下は全部上書きされてしまうようです。
しかも同じプロジェクトを再アップロードしたら、
cylonのモジュールは全部再ダンロードらしい。

[root@edison1_pepper:~/.node_app_slot]$ ps | grep node
286 root 38224 S node /usr/lib/edison_config_tools/edison-config-server.js
291 root 35964 S /usr/bin/node /opt/xdk-daemon/main.js
305 root 72240 S /usr/bin/node /opt/xdk-daemon/current/appDaemon.js
427 root 37772 S /usr/bin/node /node_app_slot
xdk上で実行のボタンをクリックすると、edison側ではnode_app_slotというコマンドが実行されるようです。
明確に停止しないかぎりは、ずっと動いるようです。




[root@edison1_pepper:~/.node_app_slot/node_modules]$ lsal
4610 drwxr-xr-x 6 root root 4.0K Mar 25 17:54 cylon/
4620 drwxr-xr-x 6 root root 4.0K Mar 25 17:54 cylon-firmata/
4628 drwxr-xr-x 8 root root 4.0K Mar 25 17:54 cylon-gpio/
4640 drwxr-xr-x 7 root root 4.0K Mar 25 17:54 cylon-i2c/
4651 drwxr-xr-x 6 root root 4.0K Mar 25 17:54 cylon-intel-iot/

npmがインストールしたモジュールについて:
ローカルインストール
開発中のアプリが依存するライブラリをインストールする場合に利用します。
インストールしたモジュールは、プロジェクト内のみで使えます
同じマシンで開発している他のプロジェクトからは使えないので、それぞれで別のバージョンを使用したりできます。
モジュールは、/node_modules にインストールされます。

[root@edison1_pepper:~/.node_app_slot]$ npm ls
→現在のプロジェクト(現在のディレクトリ)配下でローカルインストールしたモジュールの一覧を出す。
OnboardLEDBlink@0.0.0 /home/root/.node_app_slot
├─┬ cylon@0.21.2
│ ├── async@0.9.0
│ ├─┬ body-parser@1.9.0


[root@edison1_pepper:~/.node_app_slot]$ node main.js
I, [2016-03-25T09:10:32.693Z] INFO -- : Initializing connections.
I, [2016-03-25T09:10:32.707Z] INFO -- : Initializing devices.
I, [2016-03-25T09:10:33.402Z] INFO -- : Starting connections.
I, [2016-03-25T09:10:33.407Z] INFO -- : Starting devices.
I, [2016-03-25T09:10:33.425Z] INFO -- : Working.
push off
push on
push off
push on
→XDKじゃなくても、直接edisonでmain.jsを実行すればいい。