>100 Views
November 04, 19
スライド概要
Johnny-Five と MRAA
- Node.jsからのハードウェアI/O -
SeeedKKの中の人。Microsoft MVP for Internet of Things。
Johnny-Five と MRAA - Node.jsからのハードウェアI/O - 2019/11/4 Takashi Matsuoka
Takashi Matsuoka (@matsujirushi12) 「e」3つ 2017~ MVP for Windows Development Wio LTE Wio 3G Wio LTE M1/NB1(BG96) MT3620 DevBoard de:code 2019
基礎からじっくり学ぶラズパイ電子工作 (2017年6月号~2018年6月号) デジタル入力 デジタル出力 PWM出力 I2C通信(汎用編) UART通信 SPI通信 I2C通信(SMBus編)
J5 for Raspberry Pi rwaldron/johnny-five nebrius/raspi-io nebrius/j5-io nebrius/raspi-gpio nebrius/raspi-i2c nebrius/raspi-serial fivdi/pigpio fivdi/i2c-bus serialport/node-serialport
J5 for BeagleBone Black rwaldron/johnny-five julianduque/beaglebone-io fivdi/linux-io
デジタル入力
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
this.pinMode(9, five.Pin.INPUT);
this.digitalRead(9, function(value) {
console.log(value);
});
});
デジタル出力
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
this.pinMode(13, five.Pin.OUTPUT);
this.digitalWrite(13, 1);
});
I2C
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
this.i2cConfig();
this.i2cWrite(0x01, [0x02, 0x03]);
});
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
this.i2cConfig();
this.i2cRead(0x01, 6, function(bytes) {
console.log("Bytes read: ", bytes);
});
});
UART • APIドキュメントに無い。 • 実際は、BoardにserialXxxx()とい うAPIがあるみたい。 • https://npmdoc.github.io/nodenpmdoc-johnnyfive/build/apidoc.html
mraa for Raspberry Pi intel-iot-devkit/mraa
デジタル入力 const mraa = require('mraa'); //require mraa let myDigitalPin = new mraa.Gpio(6); myDigitalPin.dir(mraa.DIR_IN); function periodicActivity() { let myDigitalValue = myDigitalPin.read(); console.log('Gpio value is ' + myDigitalValue); } setInterval(periodicActivity, 1000);
デジタル出力 const mraa = require('mraa'); //require mraa let myDigitalPin = new mraa.Gpio(5); myDigitalPin.dir(mraa.DIR_OUT); myDigitalPin.write(1);
I2C const mraa = require('mraa'); //require mraa let i2cDevice = new mraa.I2c(0); i2cDevice.address(0x77); buf[0] = 0xf4; buf[1] = 0x2e; i2cDevice.write(buf); let result = i2cDevice.read(2); console.log(result.toString('hex’));
UART "use strict"; const mraa = require('mraa'); //require mraa uart.setBaudRate(115200); uart.setMode(8, 0, 1); uart.setFlowcontrol(false, false); sleep(200); uart.writeStr("test\n"); sleep(200); console.log(uart.readStr(6)); sleep(200); write(), read() API有り
まとめ • Johnny-Five • 各種デバイスのライブラリといった印象 • ボードの差異は、「IO Plugins」で吸収 • Raspberry PiやBeagleBone BlackのIO Pluginは、外部パッケージを利 用してハードウェアI/Oしている • MRAA • ハードウェアI/Oのライブラリ • コア部分はCで書かれており、各種言語(Java, Python)から呼び出し できるようにしている • 外部パッケージの呼び出しは無し • 各種デバイスは、「UPM」(別ライブラリ)で提供