代码之家  ›  专栏  ›  技术社区  ›  eLAN

从蓝牙设备获取响应

  •  3
  • eLAN  · 技术社区  · 15 年前

    我正在尝试编写一个能够发送短信息的简单模块。我使用蓝牙连接到手机,使用以下示例:

    文件:bt-sendsms.py

    import bluetooth
    
    target = '00:32:AC:32:36:E8' #  Mobile address 
    print "Trying to send SMS on %s" %  target
    
    BTSocket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    BTSocket.connect((target, 2)) # BT Address
    BTSocket.send('ATZ\r')
    BTSocket.send('AT+CMGF=1\r')
    #sockfd.send('AT+CSCA="+972547716507"\r') # This line changes the SMSC address - do not modify unless required 
    BTSocket.send('AT+CMGS="+972547877763"\r') # TO Phone Number
    BTSocket.send('This is a test message - port 2.\n')
    BTSocket.send(chr(26)) # CTRL+Z
    
    print "SMS sent"
    sockfd.close()
    print "Closed" 
    

    我的问题是我无法验证或获取短信发送或任何套接字操作的错误代码。

    如果您推荐正确的方向,我们将不胜感激。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Simon Peverett    15 年前

    在python中,您看起来像打开了任何旧的rfcomm通道,希望它能神奇地接受at命令并进行消息传递。

    我认为(我可能是错的),你需要连接到一个特定的个人资料/服务频道,我认为对于短信来说,它是一个信息访问个人资料(map),它还没有标准化,所以找到一个开着它的手机,我不会说不可能,但非常,非常不可能。否则,有些手机将支持AT命令,但这超出了规范,例如,我有权让索尼爱立信手机通过拨号网络配置文件(DUN)支持它。

    因此,首先,您的移动设备是否支持一些不符合规格的短信息命令,如果是,在某个特定的配置文件或特别的专有配置文件上?接下来,您需要连接到该配置文件。

    您可以浏览支持的服务等…使用以下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代码),但我还没有弄清楚该如何做!

    www.bluetooth.org 满足您的蓝牙需求!