Open Web Board で ToCoStick

先日のハンズオンの際に、Open Web Board で ToCoStick を使う方法を教えてもらったので試してみました(ちなみに PC で ToCoStick とシリアル通信する記事はこちら)。

Open Web Board の USB ポートに ToCoStick を挿すと /dev/ttyUSB0 として認識されます。

$ adb shell ls -l /dev/ttyUSB*
crw-rw---- radio    radio    188,   0 2000-01-01 09:00 ttyUSB0

FTDI の VCP ドライバが入っていて、シリアル通信できる状態になっているようです。

$ adb shell cat /proc/tty/driver/usbserial
usbserinfo:1.0 driver:2.0
0: name:"FTDI USB Serial Device" vendor:0403 product:6001 num_ports:1 port:1 path:usb-usb20_host-1

さらに、Open Web Board では seriald というデーモンがいて、9943/tcp で待ち受けています。ここに接続するとシリアル通信をフォワードしてくれます。

$ adb shell netstat
Proto Recv-Q Send-Q Local Address          Foreign Address        State
 tcp       0      0 0.0.0.0:2828           0.0.0.0:*              LISTEN
 tcp       0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN
 tcp       0      0 0.0.0.0:9943           0.0.0.0:*              LISTEN  <--- ココ
 tcp       0      0 0.0.0.0:666            0.0.0.0:*              LISTEN

とりあえず telnet で簡単に試してみます。接続したら TTY 名とボー・レートを指定します。次の例では ToCoStick が受信した子機からのコマンドが出力されています(参考)。

$ adb shell
root@rk3066:/ # busybox telnet 127.0.0.1 9943                               
{"devicename":"ttyUSB0","bitrate":115200}
:78811501AE81003AB57859F1000C001D0000FFFFFFFFFFED

:78811501AE81003AB5785A31000C001D0000FFFFFFFFFFAC

Open Web Board で L チカ

9943/tcp には TCP Socket API で Firefox OS アプリからもアクセスできます。

Open Web Board にインストールした Firefox OS アプリから、ソケット経由で ToCoStick にコマンドを送り、TWE-Lite 子機の LED を L チカしてみます。

次の写真は Open Web Board にインストールされた Firefox OS アプリです。Open Web Board に HDMI 接続したモニタで表示しています。小さくて見づらいですが、LED を ON/OFF するためのスイッチがあります。

次の写真は、左から ToCoStick, Open Web Board, TWE-Lite 子機です。上のアプリでスイッチを ON/OFF すると、右側の TWE-Lite 子機の LED が点灯/消灯します。

アプリの JavaScript コードの抜粋です。ここでは省略している isTurnedON() という関数で UI 上のスイッチの ON/OFF 状態を取得し、ToCoStick に送信するコマンドを切り替えます。

  var socket = navigator.mozTCPSocket.open('127.0.0.1', 9943);
  socket.onopen = function () {
    var param = {
      devicename: 'ttyUSB0',
      bitrate: 115200
    };
    console.log('Opened');
    socket.send(JSON.stringify(param));
    setInterval(function() {
      var cmd = '';
      if (isTurnedON()) {
        cmd = ':7880010101FFFFFFFFFFFFFFFF0D';
      } else {
        cmd = ':7880010001FFFFFFFFFFFFFFFF0E';
      }
      console.log('Sending ' + cmd);
      socket.send(cmd + '\r\n');
    }, 1000);
  }
  socket.onerror = function (evt) {
    console.log('Error:' + evt.type);
  }

これで Open Web Board から ToCoStick を使えるようになりましたので、色々遊べそうです!

Published: November 05 2014

  • category: