RaspberryPiシリアル通信(入力)について
マグボットのArduinoに超音波センサーを追加しArduinoからシリアルポートを介して信号を送ることはできたもののRaspberryPi側でシリアル信号を受け取る方法が判らずくろうしたので、そのシリアル信号の受け取り方法をメモしておきます。
プログラム的には、RaspberryPiのmugbot-server-1.1.rbにシリアル通信の入力を追加すれば良いというのはわかるのですが、どこにどのように書けばよいのか判らず、いろいろネットで調べてみました。
参考になった記事は『シリアル通信入門 (RS-232C/422/485)』
でした。内容的には、下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
require 'serialport' if ARGV.length.zero? $stderr.puts "COMポートの番号を指定して実行してください。" exit end port = ARGV.first puts "COMポート: #{port}" Signal.trap(:INT) { exit } SerialPort.open(port, 19200, 8, 1, SerialPort::NONE) do |serial| serial.read_timeout = -1 # 受信スレッド thread = Thread.new do loop do sleep 0.05 if recv = serial.read print recv end end end loop do serial.write $stdin.gets end end |
基本的には、シリアルの受信処理をスレッド処理で行うことでした。
具体的には、上記のプログラムを参考にしてmugbot-server-1.1.rbの中のWebSocket設定の手前にシリアル受信処理を入れたらArduinoからのシリアル信号を受信することができました。