Comunicación entre módulo bluetooth y un microcontrolador PIC

si usas blu terminal, te ahorras la programación en el teléfono.

con respecto al pic, si sabes programar en C no te cuesta mucho aprender a programar los pic en ese lenguaje.

con respecto al modulo bt, es bastante simple de usar, solo conectas 2 cables de alimentación, y los otros 2 al puerto uart del pic rx con el tx, y el tx con rx, o sea, cruzados.

ya sabes programar pic? que tipo de información te hace falta?
 
Hola Martin
tengo la idea basica
pero me hago bolas o se me complica la programacion.

Con respecto a las conexiones las tengo claras.

el problema lo tengo para programar el pic con bluetooth
ojala me des una mano.

un ejemplo: si en el bluterminal digito "a"
el pic encienda un led
si en el bluterminal digito "b"
el pic apague un led
 
es facil solo tienes que programar el pic para que cuando reciba cierto carácter que haga determinada tarea, de hecho lo unico que debe estar haciendo continuamente es revisando si le llego un caracter, y que el caracter que le haya llegado sea uno de los que el tiene definidos para hacer una tarea, es un ciclo algo asi.

if(kbhit()){
RXdato=getchar();

if(RXdato=='n'){
output_high(PIN_A0);
}

if(RXdato=='f'){
output_low(PIN_A0);
}

if(RXdato=='a'){
output_high(PIN_A1);
}

if(RXdato=='b'){
output_low(PIN_A1);
}
}
}

eso es lo mas importante del codigo del pic, lo demas es programacion del celular
 
Hola Martin
tengo la idea basica
pero me hago bolas o se me complica la programacion.

Con respecto a las conexiones las tengo claras.

el problema lo tengo para programar el pic con bluetooth
ojala me des una mano.

un ejemplo: si en el bluterminal digito "a"
el pic encienda un led
si en el bluterminal digito "b"
el pic apague un led

el código que te brindaron debería funcionar para lo que queres hacer, otra posibilidad es usar la interrupción RDA

Código:
#int_RDA
void RDA_isr()
{
   x=getc();

   if(x=='a')
      output_high(algún_pin);
   if(x=='b')
      output_low(algún_pin);
}

Algo así también podría funcionar, solo tienes que asegurarte de activar las interrupciones.

y aclarar que de ambas formas tenes configurar los puertos con la función tris, el pin de recepción lo tenes que poner como entrada sino no va a funcionar, y tenes que usar la instrucción #use rs232() para configurar el puerto rs232.
 
Hola Gracias por sus saludos, he estado fuera un tiempo ahora retomare el proyecto esta semana con fuerza.

mientras tanto, pude conseguir el pic 16f628 y un modulo Bt Hc 05.

espero me pueda funcionar con este codigo gracias a gatito11

if(kbhit()){
RXdato=getchar();

if(RXdato=='n'){
output_high(PIN_A0);
}

if(RXdato=='f'){
output_low(PIN_A0);
}

if(RXdato=='a'){
output_high(PIN_A1);
}

if(RXdato=='b'){
output_low(PIN_A1);
}
}
}
 
Hola amigos!

luego de un tiempo retome el proyecto para comunicar este pic 16f628a con un modulo bluetooth HC05 y valgan verdades lo simule en Proteus usando "virtual serial port" e "hyperterminal" y la verdad me funciono muy bien la simulacion.

Ahora que el pic hace lo que necesito por ahora, necesitaria optimizar el codigo ccs ya que para la programacion soy un lastre.

les adjunto el codigo en txt espero me ayuden a optimizarlo.

PD: si se dan cuenta, si presiono la letra A,a,B,c,C,c el pic ejecuta una orden. Quisiera una instruccion para que cuando presione otra letra me indique que presione las teclas preestablecidas.

PD: Espero su ayuda. Mil Gracias :D:D:D:D:D
 

Adjuntos

  • codigo en txt.txt
    3.9 KB · Visitas: 45
Saludos colega... sabes trabajo en mi tesis con un modulo GSM y la base es lo que estas haciendo reconocer caracteres... Trabajo en basic
Para lo que indicas te recomiendo que hagas una condición, osea que si no recibe algo conocido que te de un msj de error o algo así...

no recuerdo mucho C pero seria algo asi

if RXdato<>(('A')or('a')or('B')or('b')or('C')or('c')) then

(Aquí colocas el msj que deseas, algo como, presiono una tecla errada, intente de nuevo)

end if

Sabes funciones logicas?
bueno lo que indica la sentencia es como si lo que recibe es distinto a A o a o B o b.... Entonces mandas a imprimir...

Recomendación:
Podrías hacerle una interrupción para las capturas... a medida que así este haciendo una función o este en una rutina lea en cualquier momento el puerto Rx sin problemas... Éxitos...
 
Bueno hablando de condiciones solo se me ocurrio hacer un Switch Case para los comandos deseados y en caso de no ser el "caracter" adecuado manda la señal de error.

ahi lo adjunto para que lo revisen,.

me sirvio bastante GRacias
 

Adjuntos

  • codigo en txt (switch case).txt
    4 KB · Visitas: 49
hola a todos lei el foro pero no encontre nada sobre comunicacion pic+ bluetooth a otro pic + bluetooth.

quisiera que se comunicaran de pic a pic inalambricamente. pero no se como hacer para que estos se enlacen mutuamente. alguna idea? ya que las mayorias necesita de alguna interfaz grafica para poder conectarse alguna idea de programacion para que este busque y se conecte de bluetooth a bluetooth.
 
Requieres un par de HC-05, y se configuran por comandos AT desde la PC, una ves que se configuran ya es transparente al PIC y opera como UART simple, el MCU no necesita nada especial ya que el módulo se encarga de enlazar y todo lo demás.
 
Requieres un par de HC-05, y se configuran por comandos AT desde la PC, una ves que se configuran ya es transparente al PIC y opera como UART simple, el MCU no necesita nada especial ya que el módulo se encarga de enlazar y todo lo demás.

Si utilizas dos módulos HC-05, uno lo deberás configurar como maestro y el otro como esclavo.
También puedes utilizar un módulo HC-05 configurado como maestro y un módulo HC-06 que funcionará siempre como esclavo.

Salu2.
 
Si utilizas dos módulos HC-05, uno lo deberás configurar como maestro y el otro como esclavo.
También puedes utilizar un módulo HC-05 configurado como maestro y un módulo HC-06 que funcionará siempre como esclavo.

Salu2.

si supongo un 3ero, un sistema inteligente que cambie las configuraciones de los sistemas bluetooth dependiendo de alguna circunstancias.

la pregunta es, puedo yo escojer a que modulo bluetooth puedo conectarme. sin interferir en el emparejamiento y configuracion directamente(emparejamiento automatico de modulos bluetooth)?.

por que al parecer no se puede emparejar mas de dos dispositivos a las vez.
 
si supongo un 3ero, un sistema inteligente que cambie las configuraciones de los sistemas bluetooth dependiendo de alguna circunstancias.

la pregunta es, puedo yo escojer a que modulo bluetooth puedo conectarme. sin interferir en el emparejamiento y configuracion directamente(emparejamiento automatico de modulos bluetooth)?.

por que al parecer no se puede emparejar mas de dos dispositivos a las vez.

Conociendo la dirección MAC del esclavo, puedes iniciar la conexión desde el maestro con el esclavo indicando la MAC de este último:
AT+LINK=.........

Salu2
 
Saludos a todo..!!

tengo una duda..!!

resulta que estoy haciendo un programa en PBP para transmitir valores logicos osea.. "1 y 0" usando "SEROUT y SERIN" por Bluetooh.. pero me toca usar obligatoriamente los llamados PINES "TX y RX" del PIC para usar el USART. y me resulta muy molesto a la hora de hace el PCB ya que no solo envio y resibo datos logico, sino que tambien hay subrutinas para controlar dispositivos y al momento del ruteo en el PCB me obiga a usar muchos puentes por tener que usar esos pines "TX y RX" del PIC.

La pregunta es...

en PBP, se puede configuarar otro pin de cualquier puerto usando "SOROUT y SERIN" paraenviar y resibir por "TX y RX". sin q se afecte la funcion del moduo BLUETOOH sin problemas ?

o alguien tiene algun codigo en PBP con el cual se configure el pin del pic que se usara como "TX y RX" para el enviar y resibir atravez del modulo BLUETOOH.

Gracias a quien sepa mucho de éste tema y me falicite la explicacion de como hacerlo..!!
 
En PICBasic Pro se usa SerIn y SerOut para trabajar RS-232 por software y poder usar cualquier pin I/O.
Cuando se usa HSerOut y HSerIn, es porque se va a usar el módulo USART del PIC, y esto es por hardware.

Desventajas de usar RS-232 por software:
No es confiable usando el oscilador interno.
Uso requerido de un cristal mayor a 4 MHz. como oscilador, si usarán velocidades superiores a los 9600 Bps.

Y sobre los códigos en PICBasic Pro. En el Foro existen varios que tratan sobre Tx y Rx usando PICBasic Pro.
No necesariamente los programas tienen que hacer referencia al uso de un módulo Bluetooth, porque tratándose de transmisión y recepción serial RS-232, el objetivo es el mismo.
 
Usar uart por software tiene muuuuuuchas muuuuuuchas desventajas.
Si el problema es un puente, eso no es problema.
Solo usaría una uart por soft si ya estoy usando la hard, y no se que decirte; la única vez que he usado dos busqué un microcontrolador con dos uart hardware.
 
Gracias por las sugerencias..!!

amigo D@rkbyte.. una pregunta.. segun lo que te entendi...

si uso el OSC interno y envio a 9600b no hay errores en la transmision..?

Gracias..!!
 
Amigo D@rkbytes. Una pregunta. Según lo que te entendí...

¿Si uso el OSC interno y envío a 9600b, no hay errores en la transmisión?
Mencioné que no es confiable usar RS-232 por software usando el oscilador interno.
Por lo que yo en numerosas ocasiones he comprobado, es que funciona bien por debajo de 4800 Bps.
Arriba de los 4800, por ejemplo, 9600 Bps. ya es conveniente usar el oscilador a cristal con más de 4 MHz.

Cuando se envía un solo carácter no hay tanto problema, pero cuando se envía una palabra ya se empiezan a generar errores al enviarla o recibirla completa.
Esto se debe a la inestabilidad del oscilador interno, ya que usando un cristal el desempeño mejora notablemente.

Ahora te diré algunas experiencias que he tenido con los módulos Bluetooth HC-05.
La recepción de datos es más exigente, es decir, dos PIC se pueden comunicar entre ellos sin problemas a 4800 Bps. y ambos usando el oscilador interno, pero cuando realizas la comunicación del módulo con un teléfono celular y aunque tanto el módulo como el PIC estén operando a 4800 Bps, la comunicación no se logra correctamente.

Los mejores resultados los he obtenido utilizando RS-232 por hardware y usando el oscilador a cristal.
De esta forma no he tenido problemas y he logrado enviar y recibir perfectamente en el teléfono los datos que el PIC manda al módulo Bluetooth. (Incluso tramas largas de datos.)
 
Última edición:
Hola amigo... estuve viendo los comentarios. he trabajado en mikroBasic acoplado a un modulo GSM para enviar y recibir mensajes desde el PIC. Y para evitar circuiteria externa del oscilador lo he trabajado sin problemas con el interno de 8Mhz.

Envió la información por el UART del pic y para escribir un msj de texto se necesita enviar bastantes datos por el serial. La verdad no tuve problemas, y la velocidad de comunicación es de 9600... lo que si hice es que para evitar saturar el puerto del MICRO coloque un pequeño retardo al enviar la información entre caracteres.

En modo personal creo que no hay problema, solo controla el envió de información para no saturar el puerto.
 
Atrás
Arriba