ruby-serialportで送受信

前:ruby-serialportインストール、シリアルポートを読む - 橋本詳解


ruby-serialterm.rb

# -*- coding: utf-8 -*-
require 'serialport'

if ARGV.size < 1
  puts 'ruby ruby-serialterm.rb /dev/tty/tty-usbdevice'
  exit 1
end

sp = SerialPort.new(ARGV.shift, 9600, 8, 1, SerialPort::NONE) # 9600bps, 8bit, ストップビット1, パリティ無し

Thread.new{
  loop do
    line = sp.readline # 改行コード毎に読み込み
    puts line
  end
}

loop do
  line = gets
  sp.write line
end
sp.close


読み込みは、ruby-serialportのサンプルでやっている通り1文字ずつ読むならsp.getcでいいがasciiコードで返ってくるので

[sp.getc].pack('c')

アスキーコードからRubyの文字列型に戻して処理する。


シリアルポートへの書き込みは

sp.write "hello\r\n"

改行コードダブルクォートで、使っているマイコンに合わせて自由に。


line = getsの時点でgetsで末尾に改行コードが入っている事を忘れていてしばらくハマった。