Bluetooth HC-05 y App Inventor «botones», Pic C Compiler
Por
/
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 el objetivo es enviar comandos desde el teléfono celular utilizando una aplicación que se programara en App Inventor a un microcontrolador PIC para encender un LED correspondiente al pulsar un botón.
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
Cuando se habilita la interrupción, el programa se aloja en la sub-rutina «rda_isr()» para recibir el comando y guardarlo en la variable «recibido[]»
#int_rda
void rda_isr()
{
memset(recibido, 0, sizeof(recibido)); //limpia los registros de la varible
int8 i=0;
while(true)
{
recibido[i]=getc();//RECIBE EL CARACTER
if(recibido[i]=='\r')//busca el salto de linea \r
{
recibido[i]='\0';//fin de la cadena = caracter nulo \0
leds();
return;
}
i++;
}
}
En la sub-rutina «leds()», se identifica el comando recibido y realiza la instrucción correspondiente.
void leds()
{
signed int8 result;
char LED1_ON[10] = "LED1_ON";
char LED1_OFF[10] = "LED1_OFF";
result = strcmp(recibido, LED1_ON);//compara, si son iguales (0), no (+-1)
if(result==0)
{
OUTPUT_BIT(LED1, 1); //enciende el LED 1
return;
}
result = strcmp(recibido, LED1_OFF);
if(result==0)
{
OUTPUT_BIT(LED1, 0); //apaga el LED 1
return;
}
.
.
.
La instrucción «strcmp()» compara dos cadenas de caracteres, se compara la variable «recibido» que contiene el comando recibido y la variable «LED1_ON» que contiene el comando «LED1_ON», si las dos cadenas de caracteres resultan iguales entra en la sentencia «if » y se habilita la salida del «LED1» que corresponde al «pin_d0» y enciende el LED 1, si los comandos son diferentes, salta a la siguiente comparación para identificar el comando recibido.
result = strcmp(recibido, LED1_ON);//compara, si son iguales (0), no (+-1)
if(result==0)
{
OUTPUT_BIT(LED1, 1); //enciende el LED 1
return;
}
Código completo PIC Esclavo
#include "string.h"
#FUSES NOMCLR
#use rs232(baud=38400, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
#define LED1 PIN_D0
#define LED2 PIN_D1
#define LED3 PIN_D2
char recibido[20];
void leds();
#int_rda
void rda_isr()
{
memset(recibido, 0, sizeof(recibido)); //limpia los registros de la varible
int8 i=0;
while(true)
{
recibido[i]=getc();//RECIBE EL CARACTER
if(recibido[i]=='\r')//busca el salto de linea \r
{
recibido[i]='\0';//fin de la cadena = caracter nulo \0
leds();
return;
}
i++;
}
}
void leds()
{
signed int8 result;
char LED1_ON[10] = "LED1_ON";
char LED1_OFF[10] = "LED1_OFF";
char LED2_ON[10] = "LED2_ON";
char LED2_OFF[10] = "LED2_OFF";
char LED3_ON[10] = "LED3_ON";
char LED3_OFF[10] = "LED3_OFF";
result = strcmp(recibido, LED1_ON);//compara, si son iguales (0), no (+-1)
if(result==0)
{
OUTPUT_BIT(LED1, 1); //enciende el LED 1
return;
}
result = strcmp(recibido, LED1_OFF);
if(result==0)
{
OUTPUT_BIT(LED1, 0); //apaga el LED 1
return;
}
result = strcmp(recibido, LED2_ON);
if(result==0)
{
OUTPUT_BIT(LED2, 1);
return;
}
result = strcmp(recibido, LED2_OFF);
if(result==0)
{
OUTPUT_BIT(LED2, 0);
return;
}
result = strcmp(recibido, LED3_ON);
if(result==0)
{
OUTPUT_BIT(LED3, 1);
return;
}
result = strcmp(recibido, LED3_OFF);
if(result==0)
{
OUTPUT_BIT(LED3, 0);
return;
}
}
void main()
{
enable_interrupts(int_rda);
enable_interrupts(global);
while(TRUE)
{
//TODO: User Code
}
}
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.