0

部屋がYo

Yo Developers API — Medium
から申請してAPI tokenをもらった。
1日後ぐらいにメールで来る。とりあえず「DELTAS112」と「IOTA411」の2つ申請した。


% curl --data=api_token=(token) http://api.justyo.co/yoall/
で全員にyo送れる。


nodeで書くとこんな感じ
request = require 'request'

yo = (token) ->
request.post "http://api.justyo.co/yoall/", {
form: {api_token: token}
}, (err, res, body) ->
console.log err
console.log body

yo "さっき取ったTOKEN"


増井研はDeltaS112とIota411という部屋にいて、それぞれの部屋のセンサが明るさとかlindaで流しているので、電気ついたらYoするようにした
もともと、部屋で電気つけたりすると「電気がつきました」とか音声で通知してたんだけど、
Yoを加えたら「デルタで」「Yo」「電気がつきました」とか陽気になった。



http://node-linda-base.herokuapp.com/delta?type=sensor
http://node-linda-base.herokuapp.com/iota?type=sensor


https://github.com/masuilab/linda-worker/blob/master/scripts/yo.coffee

0

blendmicro用 BLE terminal作った

今周囲にどんなBLEデバイスがあるか確認したり、ちょっと通信したりするのにシリアル通信みたいに使えるターミナルがあったら便利なので作った
BlendMicro/Arduino BLE Shield用なので他のデバイスでは使えない。汎用的にできる方法があったら教えて欲しい。


インストール

blendmicro npmに付いている

% npm install blendmicro -g

グローバルにインストールするとblendmicroというコマンドにパスが通る


使う


-listでデバイスリストを表示、-terminalで接続
% blendmicro --help
% blendmicro --list
% blendmicro --term [DEVICE_NAME]

echo.inoを書き込んだBlendMicroと喋っているところ

なお0x4c 0x00 0x02 0x15で始まるデバイスはiBeaconである

0

blendmicro npm 作った

前:Bluetoothが載ってるArduino派生ボード「BlendMicro」とNode.jsでBLEした


Bluetooth Low Energyが載ったArduinoMicroであるBlendMicroと、Node.jsで通信するためのライブラリを作った。
serialport npmと似たAPIで使えるようにしたので、けっこうわかりやすいと思う。

https://www.npmjs.org/package/blendmicro
https://github.com/shokai/blendmicro-node

動かん、意味不明、等の苦情要望はgithubかtwitterにお願いします。



ADCに接続した照度センサをBLEで読むのも簡単にできる



インストール


% npm install blendmicro


使う


基本的にREADMEやサンプルに書いたけど軽く紹介すると

arduino側で名前を宣言して、ble_begin()する。
#include <SPI.h>
#include <boards.h>
#include <RBL_nRF8001.h>

void setup(){
ble_set_name("BlendMicro"); // デバイスの名前を宣言、最大10文字
ble_begin();
}

node側から名前でデバイス探して接続できる。
var BlendMicro = require('blendmicro');
var bm = new BlendMicro("BlendMicro"); // 名前で接続

接続したら”open”イベントが発火するので、その後で”data”イベントで読んだり
bm.on('open', function(){
console.log("open!!");

bm.on("data", function(data){ // Bufferが返ってくる
console.log(data.toString());
});
});

文字列やBufferを書き込んだりできる
bm.write("hello");
bm.write( new Buffer([1,2,3]) );


このへんはserialport npmとほぼ同じだと思う。
bm.closeで閉じれる。
デバイス側から閉じられたらbm.on(“close”, callback)が発火する。

0

Node.jsでプロセス終了前に何か処理する

process.on(“exit”, callback)に登録しておくと、プロセスが終了する時に処理できる。

しかしそこで非同期処理を行うと、処理が終わる前にプロセスが終了してしまう。

使いたいところ


BlendMicroとのBLEでの通信をシリアルポートのように使えるモジュールを作ってるんだけど、プロセス終了時にperipheral.disconnect()しないとBlendMicro側がずっと開きっぱなしになって、再接続できなくなる。

ctrl+cでnodeを終了した時とかに、ちゃんとBLEを閉じたい。

こうした

for signal in ['SIGINT', 'SIGHUP', 'SIGTERM']
process.on signal, ->
peripheral.disconnect ->
process.exit 1
signal受け取れる事は知ってたけど、signalを握りつぶせる事は知らなかった。
peripheralを閉じる処理終わったら、自分でprocess.exitする必要がある。


node v0.12以上ならprocess.on(“beforeExit”, callback)が使える


ようになるらしい

0

Bluetoothが載ってるArduino派生ボード「BlendMicro」とNode.jsでBLEした

追記:npmにしたり、firmata作った




Mac OSXで動かしてるNode.jsとBluetoothで通信できるようになった。無線でArduino制御するの超簡単になっちゃった。
もうXBeeとか無くていいと思う。ミニ四駆とかに乗せるのに良さそう。

試したのはちゃんとコネクションはって双方向通信するやつ。次はAdvertisementパケットにセンサーの値でも乗せて垂れ流すのをやってみたい。

ソースコードとかはgithubにおいてある
https://github.com/shokai/blendmicro-study


ArduinoMicroにBLE(Bluetooth Low Energy)を追加したBlend Microというボードが先月末に出たので、買って試した。
1枚$36なので、2枚買った。注文して1週間ぐらいで届いた。
普通のArduinoMicroより1000円高いだけなので、(各言語から通信できるライブラリが揃ってくれば)とても良いと思う。


Blend Micro


Blend Micro — RedBearLab

ほぼArduino Microなマイコン基板に、BLEのチップ(Nordic nRF8001)が追加されている。
ATMegaからはACIというSPIに似たプロトコルで通信して制御する。その部分はArduinoライブラリになっている

BlendMicro


Arduino Microと比べて少し小さい。小さいのはnRF8001の制御にピンを使っているからその分をIOピンに引き出していないからだと思う。多分。
VCCが5Vではなく3.3Vになっている。nRF8001の動作のためにUSB 5Vを3.3Vに落としている。

BlendMicro


セットアップ

チュートリアルをよく読んで、ライブラリを追加したり、Arduino IDEの中のファイルを置き換えたりとかする必要がある。ちょっと面倒。
Getting Started – Blend Micro — RedBearLab

Arduino IDE側の環境が整ったら、サンプルスケッチのBLEControllSketchをBlendMicroに書き込んで、AndroidアプリiOSアプリから操作してみるといい。

やってみた



Node.jsと通信する


nodeからBLEでデバイス見つけて、文字列を書き込んで、BlendMicroが受信して、nodeにエコーする、というのを作ってみた。
Bluetoothの仕様全然知らないし、ドキュメントとか無かったけどソース読んでたら理解できてきてnodeで書けた。



通信しているところ。「かずどん」「ざんまい」などの文字列を送ると、
「echo>」が頭に付いて返ってくる。日本語が普通に通ってしまった。



nodeでのBLEはnoble npmを使った。

通信方法はドキュメントが無いので、AndroidアプリのChatサンプルのコードと、
BlendMicro内で使ってるNordicSemiconductor/ble-sdk-arduinoRedBearLab/nRF8001などのライブラリを読んだ。
ペリフェラル(デバイス)は名前で探して、その中のserviceリストとservice内のcharacteristicsリストから、nRF8001のRX/TXになってる奴をUUIDで識別すればいいだけだった。

複数のデバイスを接続する場合はarduino側でble_set_nameメソッドで名前を個別に変えて、それをnode側でperipheral.advertisement.localNameで探すとよさそう。