Ir al contenido principal

Adroid + Bluetooth



Hay 4 tareas principales al momento de hablar de Bluetooth.

  • Configuracion del bluetooth
  • Busqueda de los dispositivos que esten disponibles en el area local
  • La conexion de dispositivos
  • Transferencia de datos entre dispositivos

Configuración de Bluetooth


Antes de que la aplicacion se pueda comunicar atraves de Bluetooth, es necesario verificar que el Bluetooth es compatible con el dispositivo, y si es asi, asegurarnos de que esta habilitado.

Si el bluetooth NO es compatible, tendremos que deshabilitarlo. Si el bluetooth es compatible, pero esta desactivada, entonces tendremos que pedir al usuario que active el Bluetooth sin dejar la aplicacion. Esta configuracion se realiza en dos pasos, utilizando los BluetoothAdapter.



1.-Recibe las BluetoothAdapter
Los BluetoothAdapter se requiere para cualquier y toda la actividad Bluetooth. Para obtener los BluetoothAdapter , llame al metodo getDefaultAdapter(). Esto devuelve un BluetoothAdapter que representa el adaptador Bluetooth del dispositivo propio (la radio Bluetooth).Hay un adaptador Bluetooth para todo el sistema, y ​​su aplicación puede interactuar con él con este objeto. Si getDefaultAdapter() devuelve un valor nulo, entonces el dispositivo no es compatible con Bluetooth y la historia termina aquí. Por ejemplo:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
    // Device does not support Bluetooth
}
2.-Activar Bluetooth

A continuación, es necesario asegurarse de que Bluetooth está activada. Llamar isEnabled() para comprobar si se permite en la actualidad Bluetooth. Si este método devuelve false, Bluetooth está desactivado. Para solicitar que el Bluetooth esté habilitado, llamada startActivityForResult() con ACTION_REQUEST_ENABLE. Este emitirá una solicitud para activar Bluetooth a través de los ajustes del sistema (sin detener la aplicación). Por ejemplo:

if (!mBluetoothAdapter.isEnabled()) {
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

Dispositivos de Busqueda


La búsqueda de dispositivos es un procedimiento de exploración que busca en el área local para dispositivos habilitados para Bluetooth y luego solicitar alguna información sobre cada uno de ellos (esto se refiere a veces como "descubrir", "investigar" o "análisis"). Sin embargo, un dispositivo Bluetooth dentro del área local responderá a una solicitud de descubrimiento sólo si está habilitado para ser detectable. Si un dispositivo se puede detectar, que responderá a la petición de descubrimiento mediante el intercambio de cierta información, como por ejemplo el nombre del dispositivo, la clase, y su dirección MAC única. Con esta información, el dispositivo realiza el descubrimiento puede entonces elegir para iniciar una conexión con el dispositivo descubierto.

Una vez que se establece una conexión con un dispositivo remoto por primera vez, una solicitud de emparejamiento se presenta automáticamente al usuario. Cuando un dispositivo está sincronizado, la información básica acerca de ese dispositivo (como el nombre del dispositivo, la clase, y la dirección MAC) se guarda y se puede leer utilizando el API de Bluetooth. Utilizando la conocida dirección MAC de un dispositivo remoto, una conexión se puede iniciar con él en cualquier momento sin necesidad de realizar el descubrimiento (suponiendo que el dispositivo está dentro del rango).
Recuerde que hay una diferencia entre estar vinculado y conectado.

La conexion de dispositivos


Antes de realizar la detección de dispositivos, vale la pena consultar el conjunto de dispositivos emparejados para ver si el dispositivo deseado ya se conoce. Para ello, llame a getBondedDevices(). Esto devolverá un conjunto de BluetoothDevice dispositivos s pareadas que representan. Por ejemplo, puede consultar todos los dispositivos vinculados y, a continuación muestran el nombre de cada dispositivo para el usuario, utilizando un ArrayAdapter:

Set pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
    // Loop through paired devices
    for (BluetoothDevice device : pairedDevices) {
        // Add the name and address to an array adapter to show in a ListView
        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
    }
}
Todo lo que necesita BluetoothDevice con el fin de iniciar una conexión es la dirección MAC. En este ejemplo, se guarda como una parte de un ArrayAdapter que se muestra al usuario. La dirección MAC más adelante se pueden extraer con el fin de iniciar la conexión. 



Conectando con un cliente


Con el fin de iniciar una conexión con un dispositivo remoto (un dispositivo de la celebración de un socket de servidor abierto), primero debe obtener una BluetoothDevice objeto que representa el dispositivo remoto. (Obtener una BluetoothDevice se trata en la sección anterior sobre dispositivos Búsqueda .) A continuación, debe utilizar el BluetoothDevice para adquirir una BluetoothSocket e iniciar la conexión.



  1. Uso de la BluetoothDevice, consiga un BluetoothSocket llamando createRfcommSocketToServiceRecord(UUID).
    Esto inicializa un BluetoothSocket que se conectará a la BluetoothDevice . El UUID pasado por aquí debe coincidir con el UUID utilizado por el dispositivo de servidor cuando abrió su BluetoothServerSocket (con listenUsingRfcommWithServiceRecord(String, UUID) ). Utilizando el mismo UUID es simplemente una cuestión de codificar la cadena de UUID en su aplicación y, a continuación hace referencia a que tanto el servidor y el código de cliente.
  2. Iniciar la conexión llamando a connect() .
    Tras esta llamada, el sistema realizará una búsqueda de SDP en el dispositivo remoto con el fin de que coincida con el UUID. Si la búsqueda tiene éxito y el dispositivo remoto acepta la conexión, que compartirá el canal RFCOMM para usar durante la conexión y connect() regresará. Este método es una llamada de bloqueo. Si, por cualquier razón, la conexión falla o el connect() varias veces al método (después de unos 12 segundos), entonces se producirá una excepción.
    Debido a connect() es una llamada de bloqueo, este procedimiento de conexión debe realizarse siempre en un hilo separado del hilo principal actividad.
private class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;
 
    public ConnectThread(BluetoothDevice device) {
        // Use a temporary object that is later assigned to mmSocket,
        // because mmSocket is final
        BluetoothSocket tmp = null;
        mmDevice = device;
 
        // Get a BluetoothSocket to connect with the given BluetoothDevice
        try {
            // MY_UUID is the app's UUID string, also used by the server code
            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) { }
        mmSocket = tmp;
    }
 
    public void run() {
        // Cancel discovery because it will slow down the connection
        mBluetoothAdapter.cancelDiscovery();
 
        try {
            // Connect the device through the socket. This will block
            // until it succeeds or throws an exception
            mmSocket.connect();
        } catch (IOException connectException) {
            // Unable to connect; close the socket and get out
            try {
                mmSocket.close();
            } catch (IOException closeException) { }
            return;
        }
 
        // Do work to manage the connection (in a separate thread)
        manageConnectedSocket(mmSocket);
    }
 
    /** Will cancel an in-progress connection, and close the socket */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) { }
    }
}

Comentarios

Publicar un comentario

Entradas populares de este blog

Pequeño Juego con LEDS y Dip Switch

Siguiendo con los mini-proyectos, lo que quería hacer originalmente era un tipo "candado" con push-button y LEDs, el objetivo seria, meter la combinacion de botones correcta y los LEDS encendería por un motivo practico, en forma de serpiente. El objetivo no cambio, pero por falta de "material" lo hice con un dip switch de X entradas(depende de que tan grande quieras la combinación). CONOCIMIENTOS(max. 7 estrellas): Electronica:     ★ ★ Programación: ★ ★ Juego de Combinación + LEDs El programa es un poco mas complicado que el mini-proyecto pasado , pero aun asi es basico. Guardamos las salidas de los LEDs en un arreglo, despues con los valores recibidos y comparados de los dip switch jugamos con los LEDś. Hardware Requerido (1) Arduino Uno (6) LED (8) Resistencias 330 Ω (1) Dip Switch Circuito Usamos las salidas del ARduino 2-7 para los LEDS Usamos la salida A5, A4 para el dip switch Para hacer prender los LEDS tienes que encontrar la

Tarea #5 - Codigo Hamming - Python

Codigo hamming Liga al repo Teoria segun wikipedia Antes de los códigos Hamming se utilizaron ciertos códigos detectores de error, como lo fueron el código linteing, pero ninguno llegó a ser tan eficaz como los de Hamming. A continuación se describen algunos de estos códigos. Paridad   La   paridad   consiste en añadir un bit, denominado   bit de paridad , que indique si el número de los bits de valor 1 en los datos precedentes es par o impar. Si un solo bit cambiara por error en la transmisión, el mensaje cambiará de paridad y el error se puede detectar (nótese que el bit donde se produzca el error puede ser el mismo bit de paridad). La convención más común es que un valor de paridad   1   indica que hay un número impar de unos en los datos, y un valor de paridad de   0   indica que hay un número par de unos en los datos. info. completa y un vídeo que me ayudo mucho para esta tarea: (TIENEN QUE VERLO - OBLIGATORIO) http://www.youtube.com/watch?v=xiDPFm9PeLU Impleme

Potenciometro + pushboton + led

Bueno, estos días he estado practicando con los ejemplos de la pagina de Arduino , algunos que me llamaron la atención los voy a compartir, por supuesto con modificaciones. Nivel de conocimientos: Electronica:        ★   Programació n :    ★    Potenciometro + push-boton = LEDintensidad El mini-proyecto es controlar la intensidad de un LED mediante un potenciometro el cual combinado con push-botton para prenderlo o apagarlo. Hardware Requerido (1) Arduino UNO (1) Potenciometro (1) Push-boton (1) LED (1) Resistencia 330 Ω Circuito Conectamos el LED al PIN 9 del Arduino Conectamos el PUSH_BOTON al PIN ANOLOGICO 0 (A0) Conectamos el POTENCIOMETRO al PIN ANOLOGICO 1 (A1) El funcionamiento del circuito es basico, mientras tengas pulsado el Push-Boton el LED se mantendrá encendido y con el pontenciometro controlas la intensidad del LED. Código Video