Bluetooth HC-05 y App Inventor «comandos», Pic C Compiler

En esta sección aprenderás a establecer una comunicación inalámbrica en modo simplex, utilizado un módulo Bluetooth HC-05 y el Bluetooth de un teléfono celular. El objetivo es enviar comandos a un teléfono celular utilizando una aplicación que se programara en App Inventor para detectar un botón pulsado.

Bluetooth HC-05 

El Bluetooth HC-05 es un módulo de comunicación inalámbrico que utiliza la tecnología Bluetooth para establecer un enlace de comunicación serie entre dos dispositivos. Es un dispositivo muy popular en proyectos de electrónica y robótica, ya que permite la comunicación inalámbrica entre un microcontrolador, como Arduino, y otros dispositivos como un ordenador, smartphone o tablet. El HC-05 puede funcionar como maestro o esclavo y utiliza el perfil serial port profile (SPP) de Bluetooth, lo que lo hace compatible con una amplia variedad de dispositivos que soportan este perfil.

Características:

  • Tecnología: Bluetooth 2.0 + EDR (Enhanced Data Rate)
  • Alcance de comunicación: hasta 10 metros (en condiciones ideales)
  • Velocidad de transmisión: 2.1 Mbps máx. en modo EDR, 721 kbps máx. en modo estándar
  • Frecuencia: 2.4 GHz a 2.4835 GHz banda ISM
  • Potencia de transmisión: Clase 2, hasta 4 dBm (2.5 mW)
  • Sensibilidad de recepción: -80 dBm típico
  • Protocolos de soporte: Bluetooth serial port profile (SPP)
  • Modo de operación: Maestro o Esclavo
  • Compatibilidad: Compatible con dispositivos que soportan Bluetooth SPP
  • Interfaz: UART (Universal Asynchronous Receiver/Transmitter)
  • Voltaje de alimentación: 3.3V a 5V DC
  • Consumo de energía: 30 mA en modo de operación, 1 mA en modo de espera
  • Dimensiones: 28 mm x 15 mm x 2.35 mm

Circuito de conexión

Configuración

Inicialmente se debe configurar el módulo Bluetooth en modo esclavo para poder recibir los datos mediante una comunicación inalámbrica.

Programación 

Inicialmente se establecen los parámetros de la comunicación RS232.

  • baud = Velocidad de transmisión y recepción configurada en el módulo Bluetooth.
  • stop = Bits de parada.
  • parity = Bit de paridad. 
  • xmit = Pin de transmisión.
  • rcv = Pin de recepción. 
  • bits = Datos de transmisión.
  • stream = identificación de transmisión.

#use rs232(baud=38400, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)

Se definen los botones conectados como entradas digitales en el pin correspondiente.


#define  boton1 input(pin_d0)
#define  boton2 input(pin_d1)
#define  boton3 input(pin_d2)

Se utiliza una variable para registrar el estado pasado de los botones.


int1 pasboton1 = 0;
int1 pasboton2 = 0;
int1 pasboton3 = 0;

Cuando el botón cambia de estado se envía el comando correspondiente, si esta pulsado se envía «LED1_ON\r» y si no esta pulsado se envía «LED1_OFF\r».


      if (pasboton1 != boton1)
      {
         delay_ms(10);
         if(pasboton1 == 0)
         {
            printf("LED1_ON\r");
            pasboton1 = 1;
         }else
         {
            printf("LED1_OFF\r");
            pasboton1 = 0;
         }
      }

Para el boton2 y boton3 se realiza el código con la misma lógica.

Código completo 


#FUSES NOMCLR

#use rs232(baud=38400, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)

#define  boton1 input(pin_d0)
#define  boton2 input(pin_d1)
#define  boton3 input(pin_d2)

int1 pasboton1 = 0;
int1 pasboton2 = 0;
int1 pasboton3 = 0;

void main()
{
   while(TRUE)
   {
      if (pasboton1 != boton1)
      {
         delay_ms(10);
         if(pasboton1 == 0)
         {
            printf("LED1_ON\r");
            pasboton1 = 1;
         }else
         {
            printf("LED1_OFF\r");
            pasboton1 = 0;
         }
      }
      
      if (pasboton2 != boton2)
      {
         delay_ms(10);
         if(pasboton2 == 0)
         {
            printf("LED2_ON\r");
            pasboton2 = 1;
         }else
         {
            printf("LED2_OFF\r");
            pasboton2 = 0;
         }
      }
      
      if (pasboton3 != boton3)
      {
         delay_ms(10);
         if(pasboton3 == 0)
         {
            printf("LED3_ON\r");
            pasboton3 = 1;
         }else
         {
            printf("LED3_OFF\r");
            pasboton3 = 0;
         }
      }
      
   }
}

App Inventor

MIT App Inventor es un entorno de programación visual e intuitivo que permite a todos, incluso a los niños, crear aplicaciones completamente funcionales para teléfonos Android, iPhones y tabletas Android/iOS. La herramienta basada en bloques facilita la creación de aplicaciones complejas y de alto impacto en mucho menos tiempo que los entornos de programación tradicionales. El proyecto MIT App Inventor busca democratizar el desarrollo de software al empoderar a todas las personas, especialmente a los jóvenes, para pasar del consumo de tecnología a la creación de tecnología.

Aplicación 

En las propiedades del Bluetooth se establece un «DelimiterByte», este es un valor establecido que se encarga de encontrar el final de la cadena de caracteres recibidos, en este caso se coloco el número «13» que identifica el retorno de carro «\r», por lo que una vez que reciba este caracter dará por terminado el mensaje recibido.

Si en el fin de la cadena de caracteres se coloca un salto de linea «\n» se debe colocar el numero «1o».

Se utiliza un reloj para verificar si se reciben datos, se verifica cada milisegundo, por lo que siempre se estará ejecutando.

Scroll al inicio