I tienen una configuración similar (Android Galaxy S3 teléfono 4,0 y RN-42 BT conectado con Arduino Uno) soy capaz de emparejar el Android y el bluetooth y para conectar desde el Android a la RN-42 BT (Estoy usando la aplicación BlueTerm para probar eso) Sin embargo, no puedo conectarme desde el RN-42 BT al teléfono Android. que siguieron a los innstructions y el ejemplo de código: http://www.instructables.com/id/Missed-calls-and-SMS-Notifier-Accessory/
programé el 42 BT para servir como un cliente y selecciona Auto modo de conexión (SR, 3). En mi código de Android, el BluetoothSerialService (equivalente al código de ejemplo de PhoneInfoServer) está atascado en el AcceptThread en: socket = mmServerSocket.accept(); Estoy adjuntando los siguientes trozos de códigos que están relacionadas con el problema de conexión:
- código de Arduino que establece el modo de conexión al automóvil e inicia una conexión con el teléfono Android
código
- Android BluetoothSerialService AcceptThread que escucha entrante conexión
- mensajes logCat que muestran que el código se ha quedado atascado en espera de conexión entrante
En la aplicación de demostración BluetoothChat de Google hay una opción para hacer que el teléfono sea visible para que otro teléfono se pueda conectar a él. Estoy buscando algo similar para la conexión en serie bluetooth. Busqué una aplicación en Google Play que probará escuchar una solicitud de conexión entrante desde un dispositivo serie bluetooth, pero no encontré esa aplicación. ¿Alguien sabe de una aplicación como esta?
Saludos, Avner
código de Arduino que establece el modo de conexión al automóvil e inicia una conexión con el teléfono Android de código
void setup() {
Serial.begin(115200);
Serial.println("BEG setup");
static const char *initString0 = "$$$SR,04FE3144A0A4\r";
// R,1 Forces a complete reboot of the device (similar to a power cycle).
static const char initString1a[] = "$$$";
static const char initString1b[] = "R,1\r";
// auto
static const char initString2a[] = "$$$";
static const char initString2b[] = "SM,3\rSO,Z\r---\r";
static const char *initVector[] = { initString0, initString1a, initString1b, initString2a, initString2b, NULL };
int i;
for (i=0; initVector[i] != NULL; i++) {
Serial.print(initVector[i]);
delay(500);
}
Serial.println("Setup completed");
}
Android BluetoothSerialService AcceptThread
que escucha conexiones entrantes
// ...
private class AcceptThread extends Thread
{
// The local server socket
static private final String TAG = "BluetoothSerialServiceAcceptThread";
private final BluetoothServerSocket mmServerSocket;
private String mSocketType;
/** Creates an thread for accepting incoming Bluetooth connections
* @param secure Currently ignored, but suppose to represent the mode of socket.
* All communication is currently done over insecure socket
*/
public AcceptThread(boolean secure) {
Log.i(TAG, "BEG AcceptThread::AcceptThread");
BluetoothServerSocket tmp = null;
mSocketType = secure ? "Secure":"Insecure";
// Create a new listening server socket
try {
Log.i(TAG, "AcceptThread constructor trying to create listening socket");
if (!secure) {
// This is for Android 2.2
// tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_INSECURE, BT_SPP_UUID);
// This is for Android 2.3 but testing the above on 2.3 device showed it to be working.
tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, BT_SPP_UUID);
}
Log.d(TAG, "AcceptThread: Listening BT Socket " + mSocketType + " created");
}
catch (IOException e)
{
Log.e(TAG, "AcceptThread: Listening BT Socket Type: " + mSocketType + " listen() failed " + e.getMessage());
acceptProblem();
}
mmServerSocket = tmp;
Log.d(TAG, "mmServerSocket: " + mmServerSocket);
} // public AcceptThread
public void run() {
Log.i(TAG, "BEG BluetoothSerialService::run");
if (mmServerSocket == null)
{
Log.e(TAG, "AcceptThread.run: No server socket");
return;
}
Log.d(TAG, "AcceptThread.run: socket type:" + mSocketType);
setName("AcceptThread" + mSocketType);
BluetoothSocket socket = null;
Log.i(TAG, "mState: " + mState);
// Listen to the server socket if we're not connected
while (mState != STATE_CONNECTED)
{
Log.i(TAG, "socket before mmServerSocket.accept(): " + socket);
try
{
// This is a blocking call and will only return on a
// successful connection or an exception
socket = mmServerSocket.accept();
Log.d(TAG, "AcceptThread.run: returned from accept");
}
catch (IOException e)
{
Log.e(TAG, "AcceptThread.run: Socket Type: " + mSocketType + "accept() failed " + e.getMessage());
break;
}
Log.i(TAG, "socket after mmServerSocket.accept(): " + socket);
//...
mensajes LogCat que muestran que el código se ha quedado atascado en espera de conexión entrante
// ...
12-09 01:04:38.765: I/BluetoothSerialServiceAcceptThread(16175): BEG AcceptThread::AcceptThread
12-09 01:04:38.765: I/BluetoothSerialServiceAcceptThread(16175): AcceptThread constructor trying to create listening socket
12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): initSocketNative
12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): ...fd 49 created (RFCOMM, lm = 0)
12-09 01:04:38.765: V/BluetoothSocket.cpp(16175): initSocketFromFdNative
12-09 01:04:38.775: D/BluetoothUtils(16175): isSocketAllowedBySecurityPolicy start : device null
12-09 01:04:38.775: V/BluetoothSocket.cpp(16175): bindListenNative
12-09 01:04:38.775: V/BluetoothSocket.cpp(16175): ...bindListenNative(49) success
12-09 01:04:38.785: D/BluetoothSerialServiceAcceptThread(16175): AcceptThread: Listening BT Socket Insecure created
12-09 01:04:38.785: D/BluetoothSerialServiceAcceptThread(16175): mmServerSocket: [email protected]
12-09 01:04:38.785: D/BluetoothReadService(16175): END start
12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): BEG BluetoothSerialService::run
12-09 01:04:38.795: D/BluetoothSerialServiceAcceptThread(16175): AcceptThread.run: socket type:Insecure
12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): mState: 1
12-09 01:04:38.795: I/BluetoothSerialServiceAcceptThread(16175): socket before mmServerSocket.accept(): null
12-09 01:04:38.795: V/BluetoothSocket.cpp(16175): acceptNative
12-09 01:04:38.855: I/MainActivity(16175): mBtStatus: [email protected]
12-09 01:04:38.855: I/MainActivity(16175): In case: BluetoothSerialService.STATE_LISTEN
12-09 01:04:38.855: D/MainActivity(16175): Beg onCreateOptionsMenu
12-09 01:04:38.885: D/memalloc(16175): ion: Mapped buffer base:0x5d760000 size:3768320 offset:0 fd:57
12-09 01:04:38.925: D/CLIPBOARD(16175): Hide Clipboard dialog at Starting input: finished by someone else... !
// ...
he descubierto además que la RN-42 BT es entrar en el modo de conexión automática sino que trata de conectarse a otro LG no androide teléfono en la casa.
Descubrí esto restableciendo el RN-42 BT a los valores predeterminados de fábrica. Al utilizar la aplicación BlueTerm, me conecto con éxito desde el teléfono Android al RN-42 BT. Cuando realizo un análisis de consulta ($$$ I \ r) obtengo la dirección MAC y el nombre del teléfono LG. Este teléfono tiene un bluetooth con una dirección MAC diferente (0026e25d8a91) - No sé qué causa que el RN-42 BT intente conectarse con este dispositivo.
Esto significa que el modo de autoconexión funciona, pero la conexión se dirige al teléfono incorrecto. estoy Pazzled porque estoy especificando la dirección MAC del teléfono Android usando los siguientes comandos (con retrasos entre ellos)
// The mac address of the android phone
$$$SR,04FE3144A0A4\r
// Force a complete reboot of the device (similar to a power cycle).
$$$R,1\r
// SM,3 - mode=auto
// SO,Z - Extended Status String, Setting this string enables status messages to be sent to the local serial port.
// --- - exit command mode (three minus signs).
$$$SM,3\rSO,Z\r---\r
ahora estoy pensando que la iniciación de conexión de la RN-42 BT es Ok pero que el BluetoothServerSocket en el código de Android no está configurado correctamente.
He intentado configurar el BluetoothServerSocket para escuchar utilizando listenUsingInsecureRfcommWithServiceRecord y listenUsingRfcommWithServiceRecord. Noté que hay un comando createInsecureRfcommSocketToServiceRecord. ¿Debería usarlo en su lugar?
Cualquier consejo sería muy apreciado.
Gracias, Avner
No olvide que puede aceptar su propia respuesta. –
Entonces, por ejemplo, ¿sabe cómo puedo hacer para conectarme a mi dispositivo Bluetooth más cercano con solo activar Bluetooth manualmente? –