android 怎么通过蓝牙向一个硬件发送AT指令?

android 怎么通过蓝牙向一个硬件发送AT指令?,第1张

将16进制的字符串转换成bytes,通过hexstring2bytes转换,从而发送指令。

一、需要发送64个字节的数组,如果一次性发送过去,单片机那里可能无法及时处理以致没有任何回应,因为单片机那里是设置了数据接收的延时时间。要想畅通的与蓝牙模块通信,考虑这个时间差非常重要。调整字节的发送速率,就成为非常关键的一步。

二、值得注意的是,数据的发送是非常快的,就是因为这样才会导致单片机那里无法及时处理,所以,每次发送后的延时是非常重要的。我们单片机那里的延时是10毫秒,所以我们选择发送完每个字节后就延时10毫秒再发下个字节。

三、在使用InputStream的时候,必须注意,InputStream的读取是阻塞的。这点在一般的情况下是不会影响到我们的程序,但是记住这个情况对于代码的设计是非常重要的。

四、无参数的read()是每次只从流中读取一个字节,这种做法效率非常低,但是简单,像是读取整数值这种情况,使用read()就非常好,但如果是16进制字符串,使用InputStream.read(byte[]

b)或者InputStream.read(byte[] b,int off,int len)方法,这样一次就能读取多个字节。

将16进制的字符串转换成bytes,通过hexstring2bytes转换而不能直接用getbytes

String string = "41542B50494F392C310D"

mmOutStream.write(string.getBytes())

读取inputsteam中的

?

Log.d("example", "do read")

不执行,完整代码如下:

?

/**

* This thread runs during a connection with a remote device. It handles all

* incoming and outgoing transmissions.

*/

private class ConnectedThread extends Thread {

private final BluetoothSocket mmSocket

private final InputStream mmInStream

private final OutputStream mmOutStream

public ConnectedThread(BluetoothSocket socket, String socketType) {

Log.d(TAG, "create ConnectedThread: " + socketType)

mmSocket = socket

InputStream tmpIn = null

OutputStream tmpOut = null

// Get the BluetoothSocket input and output streams

try {

tmpIn = socket.getInputStream()

tmpOut = socket.getOutputStream()

} catch (IOException e) {

Log.e(TAG, "temp sockets not created", e)

}

mmInStream = tmpIn

mmOutStream = tmpOut

}

public void run() {

Log.i(TAG, "BEGIN mConnectedThread")

byte[] buffer = new byte[1024]

int bytes

// Keep listening to the InputStream while connected

while (true) {

Log.d("example", "do read")

try {

// Read from the InputStream

bytes = mmInStream.read(buffer)

// Send the obtained bytes to the UI Activity

mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes,

-1, buffer).sendToTarget()

} catch (IOException e) {

Log.e(TAG, "disconnected", e)

connectionLost()

// Start the service over to restart listening mode

BluetoothChatService.this.start()

break

}

}

}

/**

* Write to the connected OutStream.

*

* @param buffer

*The bytes to write

*/

public void write(byte[] buffer) {

String string = "41542B50494F392C310D"

try {

mmOutStream.write(string.getBytes())

// Share the sent message back to the UI Activity

mHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -1,

buffer).sendToTarget()

} catch (IOException e) {

Log.e(TAG, "Exception during write", e)

}

}

public void cancel() {

try {

mmSocket.close()

} catch (IOException e) {

Log.e(TAG, "close() of connect socket failed", e)

}

}

}

使用AT指令的时候,先使蓝牙模块进入AT模式,然后你就当蓝牙就是命令的接收端,单片机或者PC串口就是命令的发送端(就当蓝牙是独立的模块)。

串口发送的AT数据是直接给蓝牙模块的,这个串口可以是PC串口也可以是单片机串口。

如果你想用单片机实现AT指令设置蓝牙,就用一个IO控制蓝牙模块的KEY管脚,把AT指令写在程序中,通过串口发送给蓝牙模块。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8105026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存