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.
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.