JavaScript
Espruino

JSで動かす!EspruinoでLCDに文字を表示したりセンサ使ったりする

More than 3 years have passed since last update.


はじめに

最近jsで書いて動かすEspruinoなるモノを知りました.

Espruino - JavaScript for Microcontrollers

「電子回路なんてV=IRしか知らへんし...」と思ってこの手のモノで遊んだことはなかったんですが, デフォルトである程度のセンサ等に対応していて, サンプルを見るとjsであることも相まってすごく簡単に使えそうです(文字表示とかコレですよ)

他のサンプルとかも眺めてると何かできる気がしてきたので, 早速注文して遊んでみました.


準備する


Espruino本体

これがないと何も出来ないので通販で買いましょう.

Espruino - Order

送料がお高いので, WiFiとかで遊びたい人はまとめて買っておくのがいいかもしれませんね.


センサとか

センサの類がなくてもLEDを光らせたりはできますが, やっぱり使いたいでしょう, センサとか.

なので今回は距離センサーを使います.

あと文字とか表示できるとなお熱いので, LCDも使います.

デフォルトで対応していて日本で簡単に手に入りやすそうなものだと, 距離センサーはHC-SR402,LCDはノキア液晶5110があるようです.

秋月電子通商さん, 千石電商さんの店舗若しくは通販で買えます.

SparkFun LCD-10168 84x48 グラフィックLCD Nokia 5110

超音波距離センサー HC-SR04: センサ一般 秋月電子通商 電子部品 ネット通販

あとは必要に応じて半田ゴテとかブレッドボードとか, 適当に用意しましょう.

自分は半田ごても何も家になかったので, もろもろ購入しました.


動かす

モノが揃ったらさっそく動かします.

開発環境ですが, EspruinoはChrome Appsとして実装されたIDEがあり, ブラウザからぽちぽちしているだけで開発環境の準備が終わってしまいます.

Espruino Web IDE - Chrome ウェブストア

インストールしたらファームウェア等のアップデートが推奨されているようです.

詳細はチュートリアルより.

Espruino - Quick Start

IDEを起動したら左上の黄色いアイコンを選択しEspruinoに接続, 画面左側に

LED1.write(1);

とタイプするとボードの赤色LEDが点灯します.

led.png


LCDを使う


接続

LEDがうまく点灯したらさっそくLCDも使ってみます.

今回購入したLCDの使用方法のドキュメントは以下

Espruino - PCD8544

"LCDのどのピンをEspruinoのどのピンに繋ぐか"とサンプルコードが載っています.

これ通りにぷすぷすすれば動いてしまいます.

LCDとEspruinoの基板を見つつ繋ぎましょう.

pin.png

ドキュメントに載っているものとはちょっと違うけど察しつつ繋ぐ.


動かす

上記ドキュメント内にあるサンプルコードを見つつ適当に文字列をLCDに出してみます.

フォントサイズの変更等も出来て, そこ辺りは以下のサンプルがいい感じです.

Espruino - Pico LCD Hello World

今回はこんな感じで

// ピン番号等はSPIというプロトコルに則って処理するために必要らしい

SPI1.setup({ sck:B3, mosi:B5 });
var g = require("PCD8544").connect(SPI1, B6, B7, B8, function() {
g.clear();
g.setContrast(0.4); // 呼んであげないと画面が黒ずむ...

g.setFontVector(9);
g.drawString("\\ ( > _ < ) /",0,0); // 大きめに表示

g.setFontBitmap(); // 元のサイズに戻してから表示
g.drawString("Hello, Espruino!", 5, 15);
g.flip();
});

hello.png

やったね.


距離センサー

距離センサーもLCDと同じ要領で取り付けます. ドキュメントは以下.

センサとEspruinoの基板を見つつ繋いでいきます.

Espruino - HC-SR04

処理としてはconnectが返したオブジェクトのtrigger を呼び出すと, コールバックに距離(cm)が渡されるようです.

var sensor = require("HC-SR04").connect(A0,A1,function(dist) {

console.log(dist.toFixed(3) + "cm!");
});

// 500ms後に1回センサから値を取得
setTimeout(sensor.trigger.bind(sensor), 500);

 _____                 _

| __|___ ___ ___ _ _|_|___ ___
| __|_ -| . | _| | | | | . |
|_____|___| _|_| |___|_|_|_|___|
|_| http://espruino.com
1v79 Copyright 2015 G.Williams
>echo(0);
=undefined
12.130cm!
>


ボタンを押したい

Espruino上にはボタンがあり, 押された際にそれを検出することができます.

Espruino - Control LED with Button

setWatch を使ってBTN1を監視し, 押されるたびにLED1のオンオフを切り替えるのはこんな感じで出来ます.

var light = false;

setWatch(function() {

LED1.write(light = !light);

}, BTN1, {repeat: true, edge: "rising"});


ボタンが押されたらセンサで距離を測るようにする

LCDで文字が表示出来たし, 距離センサーも動いたし, ボタンを押して任意の処理を開始することもできました.

最後にこれらを組み合わせて, ボタンを押すたびに距離を測るコードを書いてみます.


var distance = -1;

// 距離センサの初期化
var sensor = require("HC-SR04").connect(A0, A1, function(dist) {
distance = dist;
});

// ボタンが押されるたびにセンサで測定
setWatch(sensor.trigger.bind(sensor), BTN1, {repeat: true, edge: 'rising'});

// LCDの初期化
SPI1.setup({ sck: B3, mosi: B5 });
var g = require("PCD8544").connect(SPI1, B6, B7, B8, function() {

// 100ms毎に描画する
setInterval(function() {
g.clear();
g.setContrast(0.4);

g.setFontBitmap();

if (distance == -1) {
g.drawString("No sensor result", 0, 0);
} else {
g.drawString("Sensor result: ", 0, 0);

g.setFontVector(10);
g.drawString(" > " + distance.toFixed(3) + " cm", 5, 10);
}

g.flip();
}, 100);

});

こう!

measure.png

🍣


他にも色々

WiFiモジュールでネットワークに繋げれば, Getを投げたりサーバになったりできるようで, まだまだ遊べそうです.

あとはMicro SDカードスロットが最初からついてて, ファイルの読み書きもすごく簡単そう.

サンプルが結構あるため, 眺めているだけでテンションが上がります.

Espruino - Tutorials

Espruino - Internet

Espruino - File IO

結論: モノが動くと想像以上に楽しい