Todo sobre Módulo Bluetooth HC-05 | Conexión con Android

Alguna vez quiso controlar sus robots mecánicos con un teléfono Android o diseñar los robots con un control remoto personalizado, aquí, en este tutorial, aprenderemos sobre un módulo Bluetooth HC-05 utilizado para los casos mencionados anteriormente y muchos otros. Aquí comprenderemos la conexión y el funcionamiento de un módulo HC-05 y también su interfaz con la aplicación de Android personalizada. 
Conceptos básicos 
La comunicación inalámbrica está reemplazando rápidamente a la conexión por cable cuando se trata de electrónica y comunicación. Diseñado para reemplazar las conexiones de cable, el HC-05 utiliza comunicación en serie para comunicarse con la electrónica. Por lo general, se usa para conectar dispositivos pequeños como teléfonos móviles mediante una conexión inalámbrica de corto alcance para intercambiar archivos. Utiliza la banda de frecuencia de 2,45 GHz. La velocidad de transferencia de los datos puede variar hasta 1 Mbps y está en un rango de 10 metros. 
El módulo HC-05 se puede operar dentro de 4-6V de la fuente de alimentación. Admite velocidades de transmisión de 9600, 19200, 38400, 57600, etc. Lo que es más importante, puede funcionar en modo Maestro-Esclavo, lo que significa que no enviará ni recibirá datos de fuentes externas. 
 

Módulo HC-05

Descripción de pines

Enable - This pin is used to set the Data Mode or and AT command mode (set high).
VCC - This is connected to +5V power supply.
Ground - Connected to ground of powering system.
Tx (Transmitter) - This pin transmits the received data Serially.
Rx (Receiver) - Used for broadcasting data serially over bluetooth.
State -Used to check if the bluetooth is working properly.

Modos de operacion

El módulo Bluetooth HC-05 se puede utilizar en dos modos de funcionamiento: modo de comando y modo de datos. 
 

Modo de comando

En el modo de comando, puede comunicarse con el módulo Bluetooth a través de los comandos AT para configurar varios ajustes y parámetros del módulo, como obtener la información del firmware, cambiar la tasa de baudios, cambiar el nombre del módulo, se puede usar para configurarlo como maestro o esclavo. 
Un punto sobre el Módulo HC-05 es que se puede configurar como Maestro o Esclavo en un par de comunicación. Para seleccionar cualquiera de los modos, debe activar el modo de comando y enviar los comandos AT apropiados. 
 

Modo de datos

Llegando al modo de datos, en este modo, el módulo se usa para comunicarse con otro dispositivo Bluetooth, es decir, la transferencia de datos ocurre en este modo.
 

Programación HC-05 con Microcontrolador

Especificaciones técnicas del código:

  • Arduino-Uno se utiliza como microcontrolador. 
     
  • Nombre: HC-05 
     
  • Contraseña: 1234 (o 0000) 
     
  • Tipo: Esclavo 
     
  • Modo: Datos 
     
  • Tasa de baudios: 9600 con 8 bits de datos, sin paridad y 1 bit de parada

C

//Define the variable that contains the led
#define ledPin 7
int state = 0;
void setup() {
  //Setting the pin mode and initial LOW
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(9600); // Default communication rate
}
void loop() {
  // Checks if the data is coming from the serial port
  if(Serial.available() > 0){
    state = Serial.read(); // Read the data from the serial port
 }
 Deciding functions for LED on and off
 if (state == '0') {
  digitalWrite(ledPin, LOW); // Turn LED OFF
  // Send back, to the phone, the String "LED: ON"
  Serial.println("LED: OFF");
  state = 0;
 }
 else if (state == '1') {
  digitalWrite(ledPin, HIGH);
  Serial.println("LED: ON");;
  state = 0;
 }
}

Interfaz de aplicación de Android con HC-05

Ahora, desarrollaremos una pequeña aplicación de Android para demostrar la conexión del módulo bluetooth y la aplicación de Android. Usaremos Android Studio para este propósito y el código C mencionado anteriormente en el microcontrolador. 
 

Algorithm:
Create an empty project on Android Studio
Create a ListView containing all the available bluetooth devices. 
Get the name and MAC-address of HC-05 module.
Open connection with HC-05 module.
Instruct the module with data as bytes.

Entendiendo el código

1. Obtener todos los dispositivos Bluetooth en ListView

Este código es para MainActivity o la primera actividad donde se mostrará la lista y luego, cuando se seleccione el dispositivo, la actividad de Control vendrá a dar el comando.

Java

// Initializing the Adapter for bluetooth
private BluetoothAdapter BluetoothAdap = null;
private Set Devices;
// comes in Oncreate method of the activity
BluetoothAdap = BluetoothAdapter.getDefaultAdapter();
 
// Method to fill the listwith devices
private void pairedDevices()
{
    Devices = BluetoothAdap.getBondedDevices();
    ArrayList list = new ArrayList();
 
    if (Devices.size() > 0) {
        for (BluetoothDevice bt : Devices) {
            // Add all the available devices to the list
            list.add(bt.getName() + "\n" + bt.getAddress());
        }
    }
    else {
        // In case no device is found
        Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
    }
 
    // Adding the devices to the list with ArrayAdapter class
    final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
    devicelist.setAdapter(adapter);
 
    // Method called when the device from the list is clicked
    devicelist.setOnItemClickListener(myListListener);
}

2. Obtener el nombre y la dirección MAC del dispositivo

Ahora crearemos un OnClick Listener para la lista para que el nombre y la dirección MAC se puedan extraer del dispositivo. 
 

Java

// On click listener for the Listview
private AdapterView.OnItemClickListener myListListener = new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView av, View v, int arg2, long arg3)
    {
        // Get the device MAC address
        String name = ((TextView)v).getText().toString();
        String address = info.substring(info.length() - 17);
 
        // Make an intent to start next activity.
        Intent i = new Intent(MainActivity.this, Control.class);
        // Put the data got from device to the intent
        i.putExtra("add", address); // this will be received at control Activity
        startActivity(i);
    }
};

3.Establecer una conexión entre ambos

La función connect() en Control.java ayudará a establecer la conexión entre ambos.

Java

BluetoothAdapter myBluetooth = null;
BluetoothSocket btSocket = null;
// This UUID is unique and fix id for this device
static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
 
// receive the address of the bluetooth device
Intent intent = getIntent();
address = intent.getStringExtra("add");
 
try {
    if (btSocket == null || !isBtConnected) {
        myBluetooth = BluetoothAdapter.getDefaultAdapter();
 
        // This will connect the device with address as passed
        BluetoothDevice hc = myBluetooth.getRemoteDevice(address);
        btSocket = hc.createInsecureRfcommSocketToServiceRecord(myUUID);
        BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
 
        Now you will start the connection
            btSocket.connect();
    }
}
catch (IOException e) {
    e.printStackTrace();
}

4. Finalmente comandando el módulo HC-05

Aquí primero verificaremos si nuestro socket está conectado, luego solo procederemos a evitar la excepción Null Pointer.

Java

// Function for commanding the module
private void turnOffLed()
{
    if (btSocket != null) {
        try { // Converting the string to bytes for transferring
            btSocket.getOutputStream().write("0".toString().getBytes());
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ahora, finalmente, como hemos hecho nuestro primer proyecto básico con el módulo HC-05 y la programación de Android, podemos pasar a bots electrónicos complejos y hacer una conexión por cable a inalámbrica usando este increíble módulo HC-05 y también ahora sabemos cómo hacer una aplicación personalizada. 
 

Puede encontrar el código anterior en forma de Android Studio Project comprometido aquí.

Publicación traducida automáticamente

Artículo escrito por infoaryan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *