SIM800H 上的蓝牙 SPP 配置文件
Bluetooth SPP profile on SIM800H
我在我的项目中尝试使用蓝牙时遇到问题。在以前的版本中,我使用 HC-05 蓝牙模块,它在连接任何设备后立即为我提供一个简单的串行连接。现在项目发展了,我们选择使用 SIM800H,因为它为我们提供了 GSM+蓝牙。
当我连接任何 android 设备时,它会给我一些配置文件,但不会提供 SPP。我可以正常配对,但在使用任何 SPP 服务器应用程序 () 时,我永远无法从我的设备发送或获取数据。如果我从 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"
但它停留在服务器模式,我无法使用命令 AT+BTSPPSEND 或 AT+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 并重新打开,否则我无法重新建立连接。
使用APP模式也没有成功(连接成功后立即发送字符串“SIMCOMSPPFORAPP”进行透明通信)。
SIM800H固件版本为
AT+CGMR
Revision:1309B07SIM800H32_BT
我尝试使用以下应用程序
GSM 端工作完美,我每次尝试都可以 send/receive 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());
}
}
以及我在尝试 Andrii 的 后得到的结果:
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
似乎 AT+BTSPPSEND
没有任何参数仅适用于从客户端(您的 SIM800H)发送到服务器(其他 SIM800,而不是您的 Android 设备,除非您的 Android 设备实现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
- 是您的数据,AT+BTSPPSEND=5
中的 5
是 HELLO
字符串的长度。 SIM800H_BT_Application_Note.
中的详细信息
更新
由大胆选择 小而重要的答案部分(感谢hlovdal)
我在我的项目中尝试使用蓝牙时遇到问题。在以前的版本中,我使用 HC-05 蓝牙模块,它在连接任何设备后立即为我提供一个简单的串行连接。现在项目发展了,我们选择使用 SIM800H,因为它为我们提供了 GSM+蓝牙。
当我连接任何 android 设备时,它会给我一些配置文件,但不会提供 SPP。我可以正常配对,但在使用任何 SPP 服务器应用程序 () 时,我永远无法从我的设备发送或获取数据。如果我从 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"
但它停留在服务器模式,我无法使用命令 AT+BTSPPSEND 或 AT+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 并重新打开,否则我无法重新建立连接。
使用APP模式也没有成功(连接成功后立即发送字符串“SIMCOMSPPFORAPP”进行透明通信)。
SIM800H固件版本为
AT+CGMR
Revision:1309B07SIM800H32_BT
我尝试使用以下应用程序
GSM 端工作完美,我每次尝试都可以 send/receive 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());
}
}
以及我在尝试 Andrii 的
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
似乎 AT+BTSPPSEND
没有任何参数仅适用于从客户端(您的 SIM800H)发送到服务器(其他 SIM800,而不是您的 Android 设备,除非您的 Android 设备实现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
- 是您的数据,AT+BTSPPSEND=5
中的 5
是 HELLO
字符串的长度。 SIM800H_BT_Application_Note.
更新 由大胆选择 小而重要的答案部分(感谢hlovdal)