Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Ruby+SerialportでHEX値を送る

Ruby+SerialportでHEX値を送るコードです。

##シリアルポートの有無を確認
if ARGV.size < 1
  puts 'ruby ruby-serialterm.rb /dev/tty/ttyUSB'
  exit 1
end

##初期化
sp = SerialPort.new(ARGV[0], 9600, 8, 1, SerialPort::NONE)

##パケット生成
packet = [0x7E, 0x00, (中略) , 0x1C]

##書き込み
#C => 8bit無符号整数。
sp.write(packet.flatten.pack('C*'))

書き込みのところで'H*'としてたら反応してくれませんでした……。
Hは16進数表記ですが「文字列」なので転送するとASCII扱いになるみたいですね。

flattenメソッドは入れ子になっていても強制的に一本の配列にしてくれる便利な機能です。

a = [1,[2,[3,4],5],[6,7]]

p a.flatten #=> [1, 2, 3, 4, 5, 6, 7]

(逆引きRubyより)

このサンプルでは必要ありませんが、別々に作ったパケットを統合して送信するなんて用途には使えるかもしれません。