ネットワーク接続されたプリンタの名前をmrubyで取得するプログラム

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

島ぶくろ ネットワーク接続されたプリンタのステータスを取得するプログラムを受けて、mrubyで簡単に実装してみました。

実用性ゼロの動作確認レベルです。

1. mrubyをダウンロードする

$ git clone https://github.com/mruby/mruby.git

2. ビルド設定を編集する

build_config.rb
MRuby::Build.new do |conf|
  toolchain :clang # :gcc, :visualcpp 

  conf.bins = %w(mrbc)

  # mruby's Core GEMs
  conf.gem 'mrbgems/mruby-bin-mirb'
  conf.gem 'mrbgems/mruby-bin-mruby'
  conf.gem 'mrbgems/mruby-print'

  # user-defined GEMs
  conf.gem :git => 'https://github.com/iij/mruby-io.git'
  conf.gem :git => 'https://github.com/iij/mruby-mtest.git'
  conf.gem :git => 'https://github.com/iij/mruby-socket.git'
  conf.gem :git => 'https://github.com/iij/mruby-pack.git'
end

3. ビルドする

$ rake
CC    tools/mrbc/mrbc.c -> build/host/tools/mrbc/mrbc.o
CC    src/array.c -> build/host/src/array.o
CC    src/backtrace.c -> build/host/src/backtrace.o
... 中略 ...
Build summary:

================================================
      Config Name: host
 Output Directory: build/host
         Binaries: mrbc
    Included Gems:
             mruby-bin-mirb - mirb command
               - Binaries: mirb
             mruby-bin-mruby - mruby command
               - Binaries: mruby
             mruby-io
             mruby-socket
             mruby-pack
================================================

4. mrubyのスクリプトを作成する

sysDescr.rb
sendMsg = [0x30,0x2C,0x02,0x01,0x00,0x04,0x06,0x70,0x75,0x62,0x6C,0x69,0x63,0xA0,0x1F,0x02,
           0x04,0x30,0xB1,0xF0,0x32,0x02,0x01,0x00,0x02,0x01,0x00,0x30,0x11,0x30,0x0F,0x06,
           0x0B,0x2B,0x06,0x01,0x02,0x01,0x19,0x03,0x02,0x01,0x03,0x01,0x05,0x00].pack("c*")

sock = UDPSocket.open

sock.send(sendMsg, 0, "192.168.0.xx", 161) # set the IP address of your printer

recvMsg = sock.recv(65535)

p recvMsg

sock.close

5. 上記のスクリプトを実行する。

$ cd bin
$ ./mruby sysDescr.rb
"0@\002\001\000\004\006public\2423\002\0040\261\3602\002\001\000\002\001\0000%0#\006\v+\006\001\002\001\031\003\002\001\003\001\004\024EPSON EP-806A Series"

バイナリの解析を省略しているので読みにくいですが、バイト列の最後にプリンター名 "EPSON EP-806A Series" を取得できていることがわかります。