KMConnector
Node.js and Browser javascript Library for Keigan Motor.
Keigan Motor用のNode.jsとBrowser JavaScriptライブラリ
Description
You can control USB Serial and BLE in Node.js. Browser can control Web Bluetooth. https://www.keigan-motor.com/
Node.jsではUSBシリアル・BLE、ブラウザ(chrome)ではWebBluetoothを用いて接続出来ます。
DEMO:
WebBluetooh (Browser only. Chrome on Android or Mac)
WebBluetoothでのデモ(Android又はMac上のChromeで動作)
https://document.keigan-motor.com/apiSample/motorApiSample/other exsample file is /examples/
サンプルファイルは/examples/にあります。
Requirement
- noble 1.9.1+
- serialport 7.0.2+
Usage
KeiganMotor firmware needs 1.78 or more
BLE (Node.js only. Raspberrypi needs to run with administrator privilege to launch Bluetooh.(sudo))
BLE Node.js用。RaspberryPiは管理者権限で実行する必要があります。
USB Serial (Node.js only) serialport 7.0.2+
- Web Bluetooth (Browser only. andoroid or chrome on macos)
Web Bluetoothは現在andoroid及びMacOSのchromeのみで動作します。
Installation
Node.js
npmからインストール
$ npm install kmconnector
Browser(Web Bluetooth)
ブラウザはhtmlのヘッダーにindexBrowser.jsを読み込んで下さい
<script src="kmconnector-js/KMConnectorBrowser.js"></script>
Examples (Exsample file is /examples/nodejs/)
サンプルファイルは /examples/nodejs/ にあります
USB (Example of connection to specified port)
指定したUSBポートに接続する例
const KMConnector = require('kmconnector/KMConnectorUSB');
const KMMotorOneUSBSerial=KMConnector.KMMotorOneUSBSerial;
let kMMotorOne=new KMMotorOneUSBSerial('/dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DM00KBZZ-if00-port0');
kMMotorOne.on(kMMotorOne.EVENT_TYPE.connect,function(kMDeviceInfo){
if(kMMotorOne.isConnect){
kMMotorOne.cmdLed(1,200,0,0);//led
}
});
//Try Auto Reconnect
kMMotorOne.on(kMMotorOne.EVENT_TYPE.disconnect,(kMDeviceInfo)=>{
setTimeout(()=>{kMMotorOne.connect();},5000);
});
kMMotorOne.on(kMMotorOne.EVENT_TYPE.connectFailure,(kMDeviceInfo,err)=>{
setTimeout(()=>{kMMotorOne.connect();},5000);
});
kMMotorOne.connect();
USB (Example of all scanning USB port for connection)
全てのUSBポートをスキャンして接続する例
const KMConnector = require('kmconnector/KMConnectorUSB');
KMConnector.KMMotorOneUSBSerial.on(KMMotorOneUSBSerial.EVENT_TYPE.discoverNewMotor,function(kMMotorOne){
kMMotorOne.on(kMMotorOne.EVENT_TYPE.connect,function(kMDeviceInfo){
if(kMMotorOne.isConnect){
kMMotorOne.cmdLed(1,200,0,0);//led
}
});
kMMotorOne.connect();
});
KMConnector.KMMotorOneBLE.startScanToCreateInstance();
BLE
const KMConnector = require('kmconnector/KMConnectorBLE');
KMConnector.KMMotorOneBLE.on(KMConnector.KMMotorOneBLE.EVENT_TYPE.discoverNewMotor,function(kMMotorOneBLE){
KMConnector.KMMotorOneBLE.stopScan();
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.init,function(kMDeviceInfo){
if(kMMotorOneBLE.isConnect){
kMMotorOneBLE.cmdLed(1,200,0,0);
}
});
kMMotorOneBLE.connect();
});
KMConnector.KMMotorOneBLE.startScanToCreateInstance();
BLE (When directly using noble API)
BLE通信(noble)を既に使用している物に組み込む場合の例
const KMConnector = require('kmconnector/KMConnectorBLE');
const noble = require('noble');
noble.on('discover',(nobleperipheral)=>{
noble.stopScanning();
//connected to motor only
let localName=nobleperipheral.advertisement?nobleperipheral.advertisement.localName:"";
if(localName.startsWith('KM-1')){
let kMMotorOneBLE= new KMConnector.KMMotorOneBLE(nobleperipheral);
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.init,function(kMDeviceInfo){
if(kMMotorOneBLE.isConnect){
kMMotorOneBLE.cmdLed(1,200,0,0);
}
});
kMMotorOneBLE.connect();
}
});
if(noble.state === 'poweredOn'){
noble.startScanning();
}else{
noble.once('stateChange',()=>{
noble.startScanning();
});
}
Web Bluetooth (Browser only. Chrome on Android or Mac)
Exsample file is /examples/browser_webbluetooh/
html
<head>
<script src="kmconnector/indexBrowser.js"></script>
</head>
<body>
<a href="javascript:KMB.connect();">connect</a>
</body>
javascript
const KMB=new KMMotorOneWebBLE();
KMB.on(KMB.EVENT_TYPE.init,function(kMDeviceInfo){
KMB.cmdEnable();
KMB.cmdSpeed_rpm(10);
KMB.cmdRunForward();
});
//KMB.connect();//For security reasons permission request error occurs unless it is ignited by user's click operation
Https(https://) connection is required for Web Bluetooth operation.
※Web Bluetoothはセキュリティの為、https://での接続が必須です
BLE connection Api (Node.js)
Node.jsでのBLE接続例
Methods
BLE Scanninng and Stopping (Static Methods)
BLEスキャンと停止
KMConnector.KMMotorOneBLE.startScanToCreateInstance(15000);
KMConnector.KMMotorOneBLE.stopScan();
Collective disconnection (Static Methods)
接続したモーターの全切断
KMConnector.KMMotorOneBLE.allDisConnect();
Connect and disConnect(instance Methods)
個々のモーターの切断
kMMotorOneBLE.connect();
kMMotorOneBLE.disConnect();
Events(Scan)
discoverMotor (Static)
スキャン中のモーター発見時のイベント例
KMConnector.KMMotorOneBLE.on(KMConnector.KMMotorOneBLE.EVENT_TYPE.discoverMotor,function(kMMotorOneBLE){
console.log('onDiscoverMotor:'+kMMotorOneBLE.deviceInfo.name);
});
discoverNewMotor (Static)
未接続の新規モーター発見時
Only when new motor is found.
KMConnector.KMMotorOneBLE.on(KMConnector.KMMotorOneBLE.EVENT_TYPE.discoverNewMotor,function(kMMotorOneBLE){
KMConnector.KMMotorOneBLE.stopScan();//Depending on the adapter, it is necessary to initialize the motor after completing the scan. https://github.com/sandeepmistry/noble#notes
//todo::Motor initialization processing
});
scanTimeout (Static)
スキャンがタイムアウトで終了した時
KMConnector.KMMotorOneBLE.on(KMConnector.KMMotorOneBLE.EVENT_TYPE.scanTimeout,function(){
//Connected to all motors
Object.keys(KMConnector.KMMotorOneBLE.motors).forEach((key)=>{
let motor=KMConnector.KMMotorOneBLE.motors[key];
if(!motor.isConnect){
motor.connect();
}
});
});
Events(Motors)
init
モーターの初期化完了時のイベント例
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.init,function(kMDeviceInfo){
//Motor operation
kMMotorOneBLE.cmdEnable();
kMMotorOneBLE.cmdSpeed_rpm(10);
kMMotorOneBLE.cmdRunForward();
});
Connect and disconnect
モーター接続・切断時イベント
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.connect,function(kMDeviceInfo){
console.log("onConnect:"+kMDeviceInfo.isConnect);
});
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.disconnect,function(kMDeviceInfo){
console.log("onDisconnect:"+kMDeviceInfo.isConnect);
});
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.connectFailure,function(kMDeviceInfo,err){
console.log("onConnectFailure:"+err);
});
motorMeasurement
モーター回転情報受信時
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.motorMeasurement,function(kMRotState){
console.log(kMRotState.GetValObj());//{position,velocity,torque}
});
imuMeasurement
ジャイロ情報受信時(受信するには別途cmdEnableIMU()を有効にする)
It is output only when the gyro is enabled (kMMotorOneBLE.cmdEnableIMU())
kMMotorOneBLE.on(kMMotorOneBLE.EVENT_TYPE.imuMeasurement,function(kMImuState){
console.log(kMImuState.GetValObj());//{accelX,accelY,accelZ,temp,gyroX,gyroY,gyroZ}
});
Web Bluetooth Api (Browser)
ブラウザでの接続例
Methods
Connect and disConnect
接続・切断
kMMotorOneWebBLE.connect()
kMMotorOneWebBLE.disConnect()
Events
Node.jsと同様
init
When the motor is first connected and initialized
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.init,function(kMDeviceInfo){
console.log(kMDeviceInfo.GetValObj());//{type,id,name,isConnect,manufacturerName,firmwareRevision}
kMMotorOneWebBLE.cmdEnable();//For safety, the motor operation at startup is disabled
kMMotorOneWebBLE.cmdSpeed_rpm(10);
});
Connect and disconnect
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.connect,function(kMDeviceInfo){
console.log("onConnect:"+kMDeviceInfo.isConnect);
});
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.disconnect,function(kMDeviceInfo){
console.log("onDisconnect:"+kMDeviceInfo.isConnect);
});
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.connectFailure,function(kMDeviceInfo,err){
console.log("onConnectFailure:"+err);
});
motorMeasurement
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.motorMeasurement,function(kMRotState){
console.log(kMRotState.GetValObj());//{position,velocity,torque}
});
imuMeasurement
It is output only when the gyro is enabled (kMMotorOneWebBLE.cmdEnableIMU())
kMMotorOneWebBLE.on(KMB.EVENT_TYPE.imuMeasurement,function(kMImuState){
console.log(kMImuState.GetValObj());//{accelX,accelY,accelZ,temp,gyroX,gyroY,gyroZ}
});
Motor command Api (common)
モーター操作コマンド
The command of the motor is defined by "cmd [CommandName] (prame, ...)"
操作コマンドは「cmdコマンド名()」の書式になります。
kMMotorOneBLE.cmdSpeed_rpm(10);//Set the speed 10rpm
kMMotorOneBLE.cmdEnable();//Enable motor action
kMMotorOneBLE.cmdRunForward();//Run forward (ccw)
For details of the command, see the following site
詳細なドキュメント
- Motor command Api(English)
https://en.document.keigan-motor.com/motor-control-command/command-motor-action.html - KeiganMotor javascript Libraryリファレンス(日本語)
https://document.keigan-motor.com/apiDocument/kmconnector-js/ - モーターコマンド一覧
https://document.keigan-motor.com/motor-control-command