Python からは、古い RFCOMM チャネルを開いているように見え、魔法のように AT コマンドを受け取り、メッセージングを行うことを望んでいます。
特定のプロファイル/サービス チャネルに接続する必要があると思います (間違っている可能性もあります)。SMS の場合は、まだ標準化されていないメッセージング アクセス プロファイル (MAP) であると思います。不可能とは言いませんが、可能性は非常に低いです。それ以外の場合、一部の電話はメッセージング用の AT コマンドをサポートしますが、これは仕様外です。たとえば、Sony-Ericson の電話がダイヤルアップ ネットワーク プロファイル (DUN) を介して AT コマンドをサポートするという権限を持っています。
まず第一に、あなたのモバイル デバイスは SMS の仕様外の AT コマンドをサポートしていますか? サポートしている場合、特定のプロファイルまたはアドホックな独自のプロファイルでサポートしていますか? 次に、そのプロファイルに接続する必要があります。
次のPythonを使用して、サポートされているサービスなどを参照できます(周囲のすべてのBTデバイスをチェックします)...
import bluetooth
def whats_nearby():
name_by_addr = {}
nearby = bluetooth.discover_devices(flush_cache=True)
for bd_addr in nearby:
name = bluetooth.lookup_name( bd_addr, 5)
print bd_addr, name
name_by_addr[bd_addr] = name
return name_by_addr
def what_services( addr, name ):
print " %s - %s" % ( addr, name )
for services in bluetooth.find_service(address = addr):
print "\t Name: %s" % (services["name"])
print "\t Description: %s" % (services["description"])
print "\t Protocol: %s" % (services["protocol"])
print "\t Provider: %s" % (services["provider"])
print "\t Port: %s" % (services["port"])
print "\t service-classes %s" % (services["service-classes"])
print "\t profiles %s" % (services["profiles"])
print "\t Service id: %s" % (services["service-id"])
print ""
if __name__ == "__main__":
name_by_addr = whats_nearby()
for addr in name_by_addr.keys():
what_services(addr, name_by_addr[addr])
正しいサービス/プロファイルを見つけたら、次の問題はセキュリティ (ペアリング用の PIN コード) のネゴシエーションです。
Bluetooth のすべてのニーズについては、 www.bluetooth.orgを参照してください。