Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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より)

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


参考元