我在尝试在项目中使用蓝牙时出现问题。在之前的版本中,我使用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"
但它保持服务器模式,我无法使用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端运行完美,我每次尝试都可以发送/接收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的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
答案 0 :(得分:1)
似乎AT+BTSPPSEND
没有任何参数只适用于AT命令从客户端(您的SIM800H)发送到服务器(其他SIM800,而不是您的Android设备,除非您的Android设备实现AT命令支持)。对于数据发送,您应在收到AT+BTSPPSEND
符号发送>
关键字后使用SIMCOMSPPFORAPP
和,然后在收到SEND OK
响应后发送命令{{1然后,在收到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)