代码之家  ›  专栏  ›  技术社区  ›  William Monteiro

SIM800H上的蓝牙SPP配置文件

  •  1
  • William Monteiro  · 技术社区  · 8 年前

    我在项目中尝试使用蓝牙时遇到问题。在以前的版本中,我将HC-05模块用于蓝牙,在任何设备连接后,它都会为我提供一个简单的串行连接。现在,项目不断发展,我们选择使用SIM800H,因为它为我们提供了GSM+蓝牙。

    当我连接任何android设备时,它会给我一些配置文件,但不会提供SPP。我可以正常配对,但在使用任何SPP服务器应用程序时( https://stackoverflow.com/a/4037619/2637661 )我无法从我的设备发送或获取数据。如果我从Android应用程序启动连接,它会说它正在连接,而SIM800会给我URC,我会回应:

    +BTCONNECTING: "34:c7:31:aa:37:5b","SPP"
    AT+BTACPT=1
    OK
    +BTCONNECT: 1,"Android",34:c7:31:aa:37:5b,"SPP"
    

    但它保持在服务器模式,我不能使用+BTSPPSEND或+BTSPPGET上的命令,正如文档所述。

    另一方面,如果我像文档中所说的那样从设备启动连接:

    AT+BTCONNECT=1,4 // Device is 1 and SPP profile is 4
    OK
    AT+BTSPPSEND
    >I type anything here + ctrl+z
    SEND FAIL
    

    在Android端什么也得不到。

    另外,在这两种情况下,连接都会在大约30秒后中断,除非我关闭并再次打开SIM800H,否则我无法重新建立连接。

    使用应用模式也没有成功(在连接成功后立即发送字符串“SIMCOMSPPFORAPP”以实现透明通信)。

    SIM800H固件版本为

    AT+CGMR
    Revision:1309B07SIM800H32_BT
    

    我尝试使用以下应用程序

    Bluetooth Terminal

    Bluetooth spp pro

    BlueSPP

    GSM端工作正常,每次尝试都可以发送/接收TCP消息。

    有没有人有使用本模块的经验?感谢阅读!

    更新:

    我使用了一个简单的草图来与模块的序列号进行对话,不知道它是否相关,但在这里。

    #define SIM800_POWER 23
    
    void setup() {
      Serial.begin(9600);
      Serial1.begin(19200);
      Serial.print("Setting all up");
      pinMode(SIM800_POWER, OUTPUT);
      Serial.print(".");
      delay(500);
      digitalWrite(SIM800_POWER, HIGH);
      Serial.print(".");
      Serial.println("OK");
    }
    
    void loop() {
      if(Serial1.available()){
        Serial.write(Serial1.read());
      }
      if(Serial.available()){
        Serial1.write(Serial.read());
      }
    }
    

    还有我在尝试安德烈的 answer :

    Setting all up..OK
    AT
    OK
    AT
    OK
    AT
    OK
    AT+BTPOWER=0
    OK
    AT+BTPOWER=1
    OK
    AT+BTCONNECT=1,4
    OK
    +BTCONNECT: 1,"Will",d4:87:d8:77:37:0b,"SPP"
    AT+BTSTATUS?
    +BTSTATUS: 5
    P: 1,"Will",d4:87:d8:77:37:0b
    C: 1,"Will",d4:87:d8:77:37:0b,"SPP"
    
    OK
    AT+BTSPPSEND
    > SIMCOMSPPFORAPP
    SEND FAIL
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Andrii Omelchenko    8 年前

    似乎 AT+BTSPPSEND 无任何参数仅用于从客户端(您的SIM800H)向服务器(其他SIM800,而非您的Android设备,除非您的Android设备实现AT命令支持)发送AT命令。对于数据发送,您应该使用 AT+BTSPPSEND 接收后 > 象征 邮寄 SIMCOMSPPFORAPP 关键字,然后在接收 SEND OK 响应发送命令 AT+BTSPPSEND=<LENGTH_OF_YOUR_DATA> 然后,在收到 > 符号,发送数据直到 Ctrl+Z 代码,例如:

    AT+BTSPPSEND
    > SIMCOMSPPFORAPP
    SEND OK
    
    AT+BTSPPSEND=5
    > HELLO
    SEND OK
    
    ^Z
    

    哪里 HELLO -是您的数据 5 在里面 AT+BTSPPSEND=5 长度为 你好 一串中的详细信息 SIM800H_BT_Application_Note .

    更新 选择人 大胆的 答案很小但很重要(感谢 hlovdal )