Ruby の serialport gemで Bluetooth SPP を使おうとすると Errno::EBUSY がでてうまく通信できず、なんでだろう、となりました。接続先の Bluetooth モジュールは Microchip の RN42です。
結論からいうと sleep するしかなさそうです。
begin @port = SerialPort.new( "/dev/tty.RNBT-68BF-RNI-SPP", 115200, 8, 1, 0 ) rescue Errno::EBUSY sleep 1 retry end
今回のケース
- MCU と RN42 の TX/RX/GND を接続し、RN42 に 3.3V を供給 (接続はこれらのみ)
- この状態で Mac から RN42 をペアリングする。
- /dev/tty.RNBT-68BF-RNI-SPP みたいなファイルができる。
- Ruby のプログラムで serialport gem を使って通信する
したがって MCU と RN42 の間にはフローコントロールはありません。