ttt90
2024年2月19日 14時29分
お世話になっております。
https://armadillo.atmark-techno.com/blog/615/4246
上記のブログを参考にBluetoothのシリアル通信を実現しようとしているのですが、
” rfcomm listen /dev/rfcomm0 22 &”を実行後、
ペアリング済みのPCからTeratermで接続しようとすると、
下記エラーが出ます。
[エラー]
Can't create RFCOMM TTY: Address already in use
”systemctl daemon-reload”をした後に”systemctl restart bluetooth”をしても効果はありませんでした。
ModemManagerの無効化もしております。
こちらの解決方法をお教えいただけますでしょうか。
よろしくお願いいたします。
at_dominique.m…
2024年3月1日 16時49分
ttt90さん、
返事が遅くなって申し訳ございません、
マルティネです。
> https://armadillo.atmark-techno.com/blog/615/4246
> 上記のブログを参考にBluetoothのシリアル通信を実現しようとしているのですが、
> ” rfcomm listen /dev/rfcomm0 22 &”を実行後、
> ペアリング済みのPCからTeratermで接続しようとすると、
> 下記エラーが出ます。
>
> [エラー]
> Can't create RFCOMM TTY: Address already in use
>
> ”systemctl daemon-reload”をした後に”systemctl restart bluetooth”をしても効果はありませんでした。
> ModemManagerの無効化もしております。
https://armadillo.atmark-techno.com/forum/armadillo/18972 の続きですね。
コンテナのコンフィグファイルあるいは起動オプションを教えていただけますか?
こちらで確認して、コンテナで rfcomm を使用する際に /dev/rfcomm0 のファイルがうまく生成されてなかったので、PCからの接続時に逆に rfcomm が「No such device」でエラーしていました。
コンテナのコンフィグファイルに「add_hotplugs rfcomm」を追加することで Base OS 側の udev との連携ができるようになって、接続できました。
また、デバイスがすでに存在する場合は Address already in use で失敗しますので、/dev/rfcomm0 ではなく /dev/rfcomm1 などで試してください。
rfcomm show ですでに使用されている rfcomm デバイスを表示できます(引数は armadillo の bluetooth mac です、以下の場合は /dev/rfcomm34 を使うと already in use でエラーします):
また、使い方はブログと異なりますが、rfcomm コマンドを使わなくてもプログラミングで socket() を使用できる場合はそれだけでもいいかもしれません。
armadillo で以下の python コードを実行して、pc側で rfcomm connect を使用できましたので teraterm でも接続できるかと思います(すみません、windows を手元にないので linux pcから試してました)
その場合に /dev/rfcomm0 などのデバイスが不要なので、上記の問題もないかと思います。
(pc側も rfcomm/シリアル接続ではなく、
socket.bind(('pcaddr', 22))
+socket.connect(('armadillo addr', 22))
で使用できますが、そっちは teraterm を標準に使えた方が便利ですね)よろしくお願いします。