Bluetooth経由でデバイスに接続するためにPyBluezを使用しています。それはうまくいっています。デバイスは SPP を使用しており、BluetoothSocket (RFCOMM) を使用して接続します。
基本的なやり取りは次のとおりです。init コマンドの送信 -> 確認の受信。開始コマンドを送信 -> 連続データを受信; 停止コマンドを送信 -> ...
別のアプリからアプリケーションを制御できるようにする必要があります: 開始、停止... ZeroMQ またはおそらく Tornado と HTTP/REST ifc を考えていました。
私はこれをマルチスレッド アプリにすることにあまり熱心ではありません。私は C#/.NET でスレッドとそれらのプールを使って多くの作業をしてきましたが、ここでは実際には必要ないという予感があります。それどころか、かなりぐちゃぐちゃになると思います。
ただし、ZeroMQ/REST/ ... を介してコマンド (「開始」、「停止」など) を処理できる必要があり、データを継続的に受信し、時折パケットを送信します。
私はPythonに非常に慣れていないため、これを実装する方法がわかりません。BluetoothSocket を ZeroMQ/Tornado IOLoop に接続できますか?
私は Twisted を使ってほとんど何でも達成できると思っていますが、Twisted が提供するものすべてが本当に必要なわけではありません。Twisted を引き込む必要がある場合は、それを行います。私は実際に BluetoothSocketの Twisted実装を見つけました。繰り返しになりますが、Twisted は必要ですか?
Tornado IOLoop を使ってみました。例外はスローされませんが、データは送受信されません。
def eventhandler(s, events, error = None):
if events & ioloop.IOLoop.READ:
print 'Socket read: %r' % s.recv(1024)
elif events & ioloop.IOLoop.ERROR:
print 'Socket error!'
events = ioloop.IOLoop.READ | ioloop.IOLoop.ERROR
self._loop.add_handler(self._socket.fileno(), eventhandler, events)
私は今何をしているのかよくわかりません。最終的には方法を見つけますが、進むべき方向についてのヒントが必要です。
大規模な Google-fu ではあまり有用な情報が得られなかったので、ここで質問します。
編集:現在「gevent」を見ています。少なくとも Twisted よりも単純に思えます。