動きました.. ...への道 なので、まだ動作していない. (サギだー.
- (2017-01-05) ↓これで、更新してます。
キーボード
<=USB=>RPi
<=UART(シリアル)=>BLEnano
<= Bluetooth =>PC
- どのキーも使えます。(HID USBでながれてくるキーコード、そのまま、BTへ投げてる)
- LEDも点くよ(このキーボードについてる、CAPS、NumLock、ScrLkのみ確認)
- ちょいと、不安定?一度、接続できれば、比較的安定。
- 電源切るときは、ぶちっ、とやるしかないので、やばいかも?
- iPhoneにもつながるよ
- 実用性?? USB端子がたりないとき、とか?
- らずぱいって、電気食うよね... => USBホストとUARTがつかえるマイコンが手元にない..(お勧めあったら、コメントへ)
概要
-
キーボード
<=USB=>RPi
<=UART(シリアル)=>BLEnano
<= Bluetooth =>PC
でいくのではないかと... - 関連: @Biaccoさんの記事「ErgoDox BT の設計・実装に試行錯誤した話あらため試行錯誤している話」
- (2017-0105):動いたんだけど、、もっとちーぷなマイコンでやりたいよね.
TODO
- buildrootとかでコンパクトにまとめる?
- (追加:2017-01-05)
- 記事を整理する > 新しいエントリでかく?
- (済:2017-01-05)とりあえず、nRF51側のソースコードとHEXをpushした.
コードをgithubへ..
- (済:2017-01-05)
BLEnanoとRPiでシリアル通信するとこ。
nodejsのserialport
でできるかな?serialport
使って、らずぱい側はできたかも?BLENano側を対応させる..
- (済:2017-01-05)
PCから送られてくるCAPSなどのLEDに対応。
環境
- Raspberry Pi 2
RPi3で、UARTって使うの面倒だったよね??
=> MK-20のまま挿せば、/dev/ttyACM0
でアクセスできる。 - Raspberry Pi Zero :
/dev/ttyAMA0
使用 - Windows 7 64bit
/home/pi/hid/kbd_usb2bt.js____/etc/rc.localあたりから、よぶ。&つける
#!/home/pi/.nvm/versions/node/v6.9.3/bin/node
var comDevName = "/dev/ttyAMA0";
var bSendText = false; //Textにして送る。;
var bVerbose = false;
var HID = require('node-hid');
var device = new HID.HID(HID.devices()[0].path)
var SerialPort = require("serialport");
//SerialPort.list(function (err, ports) {console.log(ports);}
var port = new SerialPort(comDevName, {
baudRate: 38400
});
const bufLFCR = new Buffer([0x0d,0x0a]);
var buf = new Buffer(10);
// 0xfe 始端 : 8バイトデータ : 0xfd 終端 みたいな?.
buf.writeUInt8(0xfe,0);
buf.writeUInt8(0xfd,9);
port.on('data', function (data) {
//bit 0: Num Lock
//bit 1: Caps Lock
//bit 2: Scroll Lock
//bit 3: Compose
//bit 4: Kana
//bit 5: Shift
if (bVerbose) console.log((('0'+data[0].toString(16)).slice(-2)));
device.write([0x80+data[0]]);
});
device.on("data", function(data) {
//console.log(data);
data.copy(buf, 1,0,8);
if (bVerbose) console.log(buf);
if (bSendText) {
buf.forEach(function(a,b,c){port.write(('0'+a.toString(16)+' ').slice(-3));});
port.write(bufLFCR);
} else {
port.write(buf);
}
});
↓は、作業内容。まとまってない...
確認できてること
BLEnano Nordic nRF51 UARTで受け取った文字を、HIDキーボードとして、タイプする。
=>シリアルからデータを受け取り、BLEnano経由で、文字のタイプ。-
RPi + nodejs + node-hidにて、キーコードの取得。
node.jsの準備などsudo apt-get install libusb-1.0-0-dev # 古いnodejsを削除 sudo apt-get autoremove nodejs -y # nvmをインストール wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash # export NVM_DIR="/home/pi/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # node LTS版をインストール nvm install --lts nvm use --lts # # node-hidをインストール mkdir /home/pi/hid ; cd /home/pi/hid npm install node-hid
rootにて実行sudo bash export NVM_DIR="/home/pi/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" cd /home/pi/hid node
rootで実行.らずぱいのUSBにキーボードのみ挿してテストvar HID = require('node-hid'); var deviceFirst = new HID.HID(HID.devices()[0].path) deviceFirst.on("data", function(data) { console.log(data) }); /* ここで Hello とタイプすると、キーコードがでてくる。 <Buffer 02 00 00 00 00 00 00 00> L_SHIFT <Buffer 02 00 0b 00 00 00 00 00> L_SHIFT+ 'h' <Buffer 02 00 00 00 00 00 00 00> L_SHIFT <Buffer 00 00 00 00 00 00 00 00> (none) <Buffer 00 00 08 00 00 00 00 00> 'e' <Buffer 00 00 00 00 00 00 00 00> (none) <Buffer 00 00 0f 00 00 00 00 00> 'l' <Buffer 00 00 00 00 00 00 00 00> (none) <Buffer 00 00 0f 00 00 00 00 00> 'l' <Buffer 00 00 00 00 00 00 00 00> (none) <Buffer 00 00 12 00 00 00 00 00> 'o' <Buffer 00 00 00 00 00 00 00 00> (none) */
=> これ、そのまま、送信すればいいんじゃね?
-
シリアル(UART)動作
npm install serialport node-hid
にて。
らずぱいのUART(ttyAMA0)と、Windows(USBのPL2303)のTeraTermにて通信-
ttyAMA0
を使えるようにする。
ログインのコンソールとして使用するようになってるので、それをしないようにする。/boot/cmdline.txtから、console=serial0,115200を消す.dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles #元. #dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles ```
serial-getty@ttyAMA0.serviceを停止。sudo systemctl stop serial-getty@ttyAMA0.service sudo systemctl disable serial-getty@ttyAMA0.service
-
rootにて、node実行
nodeこんそーるにてvar bSendText = true; //Textにして送る。 var HID = require('node-hid'); var device = new HID.HID(HID.devices()[0].path) var SerialPort = require("serialport"); //SerialPort.list(function (err, ports) {console.log(ports);} var port = new SerialPort("/dev/ttyAMA0", { baudRate: 38400 }); const bufLFCR = new Buffer([0x0d,0x0a]); var buf = new Buffer(10); // 0xfe 始端 : 8バイトデータ : 0xfd 終端 みたいな?. buf.writeUInt8(0xfe,0); buf.writeUInt8(0xfd,9); port.on('data', function (data) { console.log(data); }); device.on("data", function(data) { //console.log(data); data.copy(buf, 1,0,8); console.log(buf); if (bSendText) { buf.forEach(function(a,b,c){port.write(('0'+a.toString(16)+' ').slice(-3));}); port.write(bufLFCR); } else { port.write(buf); } });
-