viernes, 22 de febrero de 2013

Control de LEDs del MSP430 Launchpad mediante bluetooth y Android

Aún recuerdo los dolores de cabeza, que me causó el aprender a usar la comunicación serial en los microcontroladores PIC, pero ahora, no digo que soy un experto en ello, pero algo me defiendo :-D. 

En la entrada anterior se dió una breve introducción a la tarjeta de desarrollo MSP430 Launchpad de Texas Instruments. En esta ocasión, se explicará el cómo controlar los LEDs (pines P1.0 y P1.6) que trae dicha tarjeta, usando el módulo serial bluetooth HC-05 montado en una base y un teléfono con Android (Para este caso se usará el Motorola MB511 o FlipOut).

Primero identificamos las terminales RX y TX del microcontrolador a utilizar, para este caso es el MSP430G2553, que de acuerdo con las hojas de datos son los pines 3 y 4:

Y en la tarjeta MSP430 son los pines P1.1(RX) y P1.2(TX), Nota: en Fritzing los pines vienen etiquetados con las terminales del dispositivo a conectar.


Después hacemos las siguientes conexiones (no es necesario mover los jumpers del MSP430):


Clic en la imagen para expandir.

Aquí se muestra una imagen del circuito físico:

Clic en la imagen para expandir.

A continuación dejo el código fuente, que deberán cargar a la tarjeta MSP430 Launchpad usando el software Energia (como se muestra en la publicación anterior):

//////////////////////////////////////
//  Creado por: ALFA                //
//  País: México                    //
//  Página WEB: galfama.blogspot.mx //
//  Fecha: 19/02/2013               //
//////////////////////////////////////

/*  Descripción

Programa que controla el encendido/apagado de los LEDs 
(verde, rojo) usando el módulo serial bluetooth modelo HC-05, 
implementado en el MSP430 Launchpad de Texas Instruments, con el
microcontrolador MSP430G2553 a una frecuencia de reloj de de 16MHz.

Los comandos a recibir son: El 1 -enciende LED rojo, 2 -apaga LED rojo,
3 -enciende LED verde, 4 apaga -LED verde, otro caracter apaga ambos LEDs.

Nota: Para el envío de datos por bluetooth entre el dispositivo
y la tarjeta se utiliza el programa para Android BlueTerm.

*/

// Se inicializa el puerto serie a 9600 bauds
// Y la variable "valor" de tipo caracter.
// Así como los pines de los LEDs (verde, rojo), se definen como salidas.

char valor=0;

void setup()
{
  Serial.begin(9600);
  pinMode (RED_LED, OUTPUT);
  pinMode (GREEN_LED, OUTPUT);
  digitalWrite(RED_LED, LOW);//Inicialmente se apagan los LEDs.
  digitalWrite(GREEN_LED, LOW);
}

void loop()  //Bucle infinito
{
  if (Serial.available())//Si hay una caracter en el buffer serial
                         //el programa entra aquí.
 { 
  valor = Serial.read();// Se lee el valor numérico en el puerto serie.
  
  if (valor == '1')//Si el valor es 1.
  {
    digitalWrite(RED_LED, HIGH);  //Se enciende el led rojo.
    Serial.print("Led rojo encendido\r\n");//Se envía el mensaje por el puerto serie,
  }                                        //un retorno y salto de línea.
  
  else if (valor == '2')
  {
    digitalWrite(RED_LED, LOW);  //Se apaga el led rojo.
    Serial.print("Led rojo apagado\r\n");
  }
 
  else if (valor == '3')
  {
    digitalWrite(GREEN_LED, HIGH);  //Se enciende el led verde.
    Serial.print("Led verde encendido\r\n");
  }
  
  else if (valor == '4')
  {
    digitalWrite(GREEN_LED, LOW);  //Se apaga el led verde.
    Serial.print("Led verde apagado\r\n");
  }
  
  else// Si se envía un caracter distinto de 1 - 4, los leds se apagan.
  {
    digitalWrite(RED_LED, LOW);  //Se apaga el led rojo.
    digitalWrite(GREEN_LED, LOW);//Se apaga el led verde.
    Serial.print("Ambos leds apagados\r\n");
  }  
 }
}

Ahora lo que sigue es la instalación del software en el teléfono móvil con Android, para ello descargamos el BlueTerm de la tienda Google Play del siguiente enlace:

https://play.google.com/store/apps/details?id=es.pymasde.blueterm&feature=search_result#?t=W251bGwsMSwyLDEsImVzLnB5bWFzZGUuYmx1ZXRlcm0iXQ..

O usando el siguiente código QR (puedes usar el QRDroid para decodificarlo):

Después de haber instalado el BlueTerm (no lo abran aún), primero tenemos que vincular el módulo bluetooth HC-05 con el teléfono celular; para ello primero habilitamos el bluetooth y luego vamos a Configuración --> Redes inalámbricas y redes --> Configuración de Bluetooth.

Una vez allí seleccionamos la opción 1. Buscar dispositivos, una vez que aparezca el módulo HC-05 en la lista de dispositivos, 2. Lo seleccionamos y escogemos la opción "vincular", posteriormente cuando aparezca el recuadro que pide la contraseña, introducimos 1234 (que es la contraseña por defecto, que traen la mayoría de los módulos de este tipo).


¡Listo!, una vez que hemos vinculado el módulo con el teléfono ahora sí ejecutamos el BlueTerm. Y en las Preferencias podemos cambiar el color de fondo, el tamaño de la letra, etc. (Por defecto viene fondo azul, letras blancas, tamaño 8).

Texto blaco - fondo negro, tamaño de letra 20.

Ahora para enviar caracteres al módulo buetooth, seleccionamos la opción Conectarse a un dispositivo, una vez allí seleccionamos en HC-05 y listo, ya podremos enviar los caracteres 1,2,3,4 para encender/apagar los LEDs de la tarjeta MSP430 Launchpad.

A continuación dejo un video del funcionamiento del circuito:


Por último, dejo una aportación de código al blog, hecha por mi paisano Ángel Jacinto (muchas gracias). El siguiente código (el cuál está publicado, tal cual fue recibido) es un poco menos extenso que el original publicado en esta entrada, y permite encender/apagar de manera independiente los LED's  de la tarjeta MSP430 Launchpad, enviando 1 o 2 desde el teléfono celular:

//////////////////////////
// Autor: Ángel Jacinto //
// País: México         //
// Fecha: 24/05/2013    //
//////////////////////////

char valor=0;
boolean estado1, estado2; //Estado que ocuparemos, estan en boleano para poner falso o verdadero

void setup()
{
  Serial.begin(9600);
  pinMode (P1_0, OUTPUT); //LED ROJO de igual manera puede quedarse con LED_GREEN Y RED
  pinMode (P1_6, OUTPUT); //LED VERDE
  digitalWrite(P1_0, LOW);//Inicialmente se apagan los LEDs.
  digitalWrite(P1_6, LOW);
  estado1 = true; // Se inicializan como verdadero o encendido
  estado2 = true;
}

void loop()  //Bucle infinito
{
  if (Serial.available())//Si hay una caracter en el buffer serial
                         //el programa entra aquí.
 { 
  valor = Serial.read();// Se lee el valor numérico en el puerto serie.
  
  if (valor == '1')//Si el valor es 1.
  {
    digitalWrite(P1_0, estado1);  //Se enciende el led rojo.
    Serial.print("Led rojo encendido\r\n");//Se envía el mensaje por el puerto serie,
    estado1 = !estado1; //Aqui se cambia el valor del estado 1
  }                                        //un retorno de carro y salto de línea.
  
  else if (valor == '2')
  {
    digitalWrite(P1_6, estado2);  //Se enciende el led verde.
    Serial.print("Led verde encendido\r\n");
    estado2 = !estado2;
  }
  
  else// Si se envía un caracter distinto de 1 - 4, los leds se apagan.
  {
    digitalWrite(P1_0, LOW);  //Se apaga el led rojo.
    digitalWrite(P1_6, LOW);//Se apaga el led verde.
    Serial.print("Ambos leds apagados\r\n");
  }  
 }
}

¡Muchas gracias por leer esta nueva entrada!
ALF



49 comentarios:

  1. Me podrías proporcionar el código, haré algo parecido pero con CCS y quiero tener una idea básica. Te dejo mi correo: jfernandoghe@gmail.com Excelente página!! ;D

    ResponderBorrar
  2. Que tal jfernandoghe, ya te mandé el correo con el código. Muchas gracias por leer este blog, que bueno que la información que aquí se publica te sirva.

    ResponderBorrar
  3. Saludos soy un novato en estode los microcontroladores, ¿qué me recomiendas para empezar?, ¿TI Launchpad MSP430 o PIC?. De ante mano gracias.

    ResponderBorrar
  4. Que tal Ricardo, gracias por leer mi blog. Desde mi punto de vista te recomiendo empezar con los microcontroladores PIC's por las siguientes razones:
    - Son fáciles de conseguir y muy económicos.
    - Hay mucha información en internet sobre su programación o implementación en circuitos.
    - Puedes programarlos en lenguaje ensamblador con el MPLAB de Microchp, en lenguaje basic con Microbasic o PicSimulator o en lenguaje C con el compilador de la empresa CCS.
    - Puedes hacer fácilmente la simulación de tus circuitos en ISIS (Paquetería PROTEUS).
    - Te recomiendo invertir en un programador de PIC's económico y compatible con el S.O. de tu PC.

    Y ya después que tengas unas bases sólidas sobre los microcontroladores, ahora sí experimentar con la tarjeta MSP430 Launchpad, Stellaris Launchpad o Arduino.

    Espero te sirva mi recomendación.
    ALF

    ResponderBorrar
  5. Enserio? :S yo estoy empezando en esto y nos dijeroon q estos (MSP$430.. launchpad) son mas faciles de utilizar...
    la vdd tu blog ALF es muy bueno y si es entretenido, con muestras d q en vdd funciona lo q tienes, buen aporte

    ResponderBorrar
  6. Muchas gracias por tu comentario Ángel Jacinto, me da gusto que los aportes que se publican en este blog, te sirvan. Saludos.

    ResponderBorrar
  7. oye bro... me podrias ayudar? como se compara... por ejemplo si 1 oprimi el uno y se enciende... como se le haria mas o menos para q si lo vuelve a presionar ahora se apague?
    o podrias decirme almenos q funcion debo buscar? para investigar xfa

    ResponderBorrar
  8. Que tal Ángel, (no hay una instrucción que haga algo llamado toggle) pero acabo de publicar al final de la entrada, después del video el código, que pienso hace lo que tu deseas, no lo he probado por falta de tiempo, revisalo por favor y me cuentas como te fue.

    Un saludo cordial.
    ALF

    ResponderBorrar
  9. gracias bro :) oye... es tu codigo pero... lo pude hacer un poco mas corto.... puedo ponertelo? y ya si gustas actualizas denuevo tu codigo en tu blog... para los que leemos esto y para ayudar mas que nada.
    Pero como tu gustes amigo, te pido permiso, d vdd q me han ayudado bastante tus publicaciones

    ResponderBorrar
  10. Que tal Ángel, claro que sí puedes mandarme tu código para colocarlo en el blog, siempre estoy abierto a comentarios, sugerencias y mejoras. Para evitar poner e-mails y no sufrir de spam, te propongo lo subas a rapidshare, 4share, etc. y ya me colocas el link en estos comentarios para descargar el archivo. Me indicas por favor tu nacionalidad Saludos

    ResponderBorrar
  11. Olvidaba que me indiques por favor si tu código ya lo probaste físicamente en la tarjeta MPS430 Launchpad.

    ResponderBorrar
  12. Muchas gracias, soy de Cuautla, Morelos, Mexico.
    Aqui esta el link de descarga del archivo:
    http://www.4shared.com/office/wy4KgAGR/Encenderleds_estados.html

    Y efectivamente, el codigo esta probado por mi, en mi tarjeta MSP430G2553
    :)

    ResponderBorrar
  13. x cierto :S olvide decir que hace...
    enciende y apaga los leds con el mismo numero con el que se encendio,
    si apagan con otro numero por el motivo en que el estado sigue negado, debes presionar 2 veces el numero para encenderlo nuevamente

    ResponderBorrar
  14. Que tal Ángel, tu contribución de código ya fue anexada a la entrada, la coloqué al último para que no se perdiera la concordancia entre las imágenes y los videos que he publicado en la entrada. Un saludo cordial y muchas gracias.

    ResponderBorrar
  15. hola
    disculpa las molestias es que tengo que hacer un proyecto de encendido y apagado de leds en serie
    lo que me piden es que en el puerto p1.0 prenda el led y se apague luego pase al p1.1 y se prenda el led y apague asi hasta EL P1.7 Y AL TERMINAR REGRES AL P1.0 Y SIGA PRENDIENDO Y APAGANDO EL LED Y NO TENGO IDEA DE COMO HACERLO MI CORREO ES j_angelseductor@hotmail.com
    muchas gracias de antemano
    y esta muy padre tu foro

    ResponderBorrar
  16. Que tal j_angelseductor, agradezco mucho tu visita a este blog, y tus comentarios. Ya te he enviado a tu e-mail, la información que me pides. Saludos

    ResponderBorrar
  17. q tal ALF, saludos a mi primer mentor en programación de micros,
    oye bro, me gustaria empezar con un blog pero no se si me puedas dar unos consejos para empezar

    pasame tu correo xfa para comunicarnos

    ResponderBorrar
  18. Saludos ALF! lei esta entrada de tu blog y pienso seguir leyendo, una duda, el modulo bluetooh que mencionas, solo recibe informacion?? o tambien la puede enviar, me refiero a una comunicacion bidireccional. Te lo agradezco de antemano. Bye!

    ResponderBorrar
  19. buen dia Antonio P, disculpa que me meta pero si es BIDIRECCIONAL
    prueba bajandote el blueterm con el primer codigo de la publicacion del buen amigo ALF ;)

    ResponderBorrar
  20. Excelente!

    Gracias Angel! nada que disculpar, todo es para apoyarnos. OK, consigo entonces los modulos, pruebo y escribo experiencia.

    Buen dia!




    ResponderBorrar
  21. Que tal Antonio P, agradezco mucho que visites este blog, y que bueno que la información que aquí se publica te es útil. Muchas gracias Ángel Jacinto por contestar la pregunta de Antonio, me da gusto que personas como tú contribuyan con este blog. Por último Ángel Jacinto, te envié un mensaje privado en Google+ con mi dirección de e-mail queme solicitaste, espero te haya llegado, y cuenta conmigo para apoyarte en abrir tu blog. Un saludo cordial ALF.

    ResponderBorrar
  22. HOLA ALF , BUEN DIA .. ME PODRIAS PROPORCIONAR EL CODIGO COMPLETO PARA CARGARSELO A MI MICROCONTROLADOR MSP4302553 , DESDE LOS ENCABEZADOS HASTA EL FINAL ... MUCHAS GRACIAS

    MI CORREO ES diegito88@hotmail.com

    ResponderBorrar
  23. Que tal Diego, ya te he enviado por e-mail, el código que me solicitas. Muchas gracias por visitar este blog. ALF

    ResponderBorrar
  24. que tal amigo quisiera realizar lo mismo pero con el MSP430g2231 me podrías ayudar por que intente con el código y no me funciono?. gracias por tu atención.

    ResponderBorrar
  25. Que tal Arbey Ordoñez Becerra, la razón porque no te funcionó este código usando el MSP430G2231, es porque no tiene módulo UART (pines RX y TX) lo puedes checar en el datasheet del microcontrolador(http://www.ti.com/lit/ds/symlink/msp430g2231.pdf). El código de esta entrada del blog, es funcional en el MSP430G2553, porque si tiene módulo UART, lo puedes consultar en el datasheet (http://www.ti.com/lit/ds/slas735j/slas735j.pdf). Saludos.

    ResponderBorrar
  26. muchas gracias, voy intentar comunicar por el protocolo USI para ver si lo puedo lograr. gracias por atención prestada.

    ResponderBorrar
  27. Hola ALF me parecio muy interesante el progrmama no se si me lo podrias pasar y me gustria hacerte una pregunta como lo podria pasar al lenguaje ensamblador mi correo es bebe_8febrero@hotmail.com

    Muy interesante este blog

    ResponderBorrar
  28. Que tal bebe_8febrero, muchas gracias por visitar este blog y por tus comentarios. Ya te he enviado la información que me solicitaste, sólo que no tengo idea de como hacer este mismo ejemplo en lenguaje ensamblador. Saludos.

    ResponderBorrar
  29. Hola muy interesnate tu proyecto en el compilador energia se puede programar otro micro diferente al msp430g2553

    ResponderBorrar
  30. Gracias por tu comentario, sí se pueden programar otros microcontroladores usando Energia, por ejemplo el MSP430G2452. Saludos.

    ResponderBorrar
  31. Que tal amigo oye una grandísima pregunta que dispositivo Bluetooth puede sustituir el que ocupas en el video por uno que fabrique texas instruments. Saludos y gracias

    ResponderBorrar
  32. Que tal Aaron Ariel, desconozco si Texas Instruments fabrique módulos bluetooth similares al que presento en el video (pero circuitos integrados bluetooth si fabrica). Te recomiendo visitar este link:

    http://www.ti.com/lsds/ti/wireless_connectivity/bluetooth_bluetooth-ble/overview.page?DCMP=BluetoothLowEnergy&HQS=Bluetoothlowenergy

    Tal vez haya algún módulo o kit que te interese. Un saludo cordial.

    ALF

    ResponderBorrar
  33. Que tal amigo, pues no conozco mucho sobre el TI y menos de bluetooth pero estoy tratando de hacer algo similar. El código que posteas es ya el que usaste? O hay otra versión? Ahora, si no pudiera comunicar con un android hay alguna otra opción? como a la mejor una lao y utilizar alguna función? Gracias mi mail es diego.lule@gmail.com

    ResponderBorrar
  34. Muy buen blog muy util, quiero hacer algo muy parecido quiero conectar un acelerometro a la MSP430 launchpad y tambien el HC 05 y de ahi mandar los datos del acelerometro al celular, sabes si funciona la misma aplicacion que usaste?

    Muchas gracias

    ResponderBorrar
  35. Que tal Gabriel muchas gracias por tu comentario, pienso que si se puede utilizar el BlueTerm para adquirir los datos del acelerómetro, mandándolos mediante bluetooth al teléfono celular, ya que el BlueTerm actúa como el Hyperterminal en Windows, en este link hice otro proyecto utilizando el Launchpad, bluetooth, un potenciómetro y el software Processing:

    http://microsysoftware.blogspot.mx/2014/07/comunicacion-serie-via-bluetooth-entre.html

    En lugar del potenciómetro puedes utilizar un acelerómetro con salidas analógicas conectado al Launchpad o con comunicación I2C, y en lugar del software Processing utilizarías el BlueTerm.

    Ahorita estoy algo corto de tiempo, tal vez más adelante publique una entrada con algún proyecto similar a lo que requieres. Un saludo cordial.

    ALF

    ResponderBorrar
  36. Que tal ALF disculpa quisiera hacer esta practica en el ccs 5.4 podrias apoyarme con el codigo en este programa y si me podrias apoyar para guiarme en que parte es donde se hace el envio de datos desde el blueterm al launchpad, te lo agradecere mucho, mi correo j.eduardo.morales@hotmail.com

    ResponderBorrar
  37. Hola, buenas tardes, quisiera saber si pudieras poner un ejemplo utilizando el MSP430 y el Hc05 pero programando en IAR, te dejo mi correo gguarnerosb_611@hotmail.com
    De ante mano gracias.

    ResponderBorrar
  38. HOLA ALF , BUEN DIA .. ME PODRIAS PROPORCIONAR EL CODIGO COMPLETO PARA CARGARSELO A MI MICROCONTROLADOR MSP4302553 , DESDE LOS ENCABEZADOS HASTA EL FINAL ... MUCHAS GRACIAS

    mi correo es: ageofpires_03_@hotmail.com

    ResponderBorrar
  39. Una equivalencia en ensamblador de tu código no caería nada mal.

    ResponderBorrar
  40. hola buen dia sera que me puedes proporcinar el codigo lo que pasa es que quiero aprender a usar el bluetooth y que mejor con un codigo que ya funcione te dejo mi correo EdgJoseDiazTipacamu@gmail.com
    de antemano gracias

    ResponderBorrar
  41. Que tal Anónimo, agradezco tu comentario, ya me han sugerido el realizar el código equivalente de éste circuito en lenguaje ensamblador para el MSP430 Launchpad. Pero aún no logro realizarlo. Saludos.

    Gracias por tu comentario Edgard, te enviaré el código a tu correo. Saludos.

    ResponderBorrar
  42. hola!!! tuve problemas con mi heladera electrolux y no se bien que le pasa, me dijeron que necesito cambiar algo de leds y cables.. alguien sabe a quien puedo consultar que no sea un técnico que cobre carisimo?

    ResponderBorrar
  43. Que tal Clari, muchas gracias por visitar éste blog. Me gustaría saber, el país o región en donde vives, para poder emitir una sugerencia, o describe un poco más la falla que presenta tu heladera, para ver en qué podríamos ayudarte. Saludos. ALF.

    ResponderBorrar
  44. Hola muy buenas tardes me podria proporcionar este ejemplo en legunaje C para poder darme una idea de como se programa porfavor mi correo: brave_phymind@hotmail.com gracias. saludos

    ResponderBorrar
  45. HOLA ALF , BUEN DIA .. ME PODRIAS PROPORCIONAR EL CODIGO COMPLETO PARA CARGARSELO A MI MICROCONTROLADOR MSP4302553 , DESDE LOS ENCABEZADOS HASTA EL FINAL ... MUCHAS GRACIAS

    mi correo es jpsotoz93@gmail.com

    ResponderBorrar
  46. Hola, lo primero decir que me ha gustado mucho tu post en el blog porque creo que está muy bien explicado. La cosa es que yo estoy intentando hacer una comunicación serial entre Android y CCS pero eso no lo encuentro. Si tuvieses algún proyecto en el que hicieses esa comunicación o supieras de algún lado dónde mirar.
    Te mando mi correo: carlosalvarezmerino@gmail.com

    Muchas gracias y ánimo porque se agradece mucho este tipo de cosas

    ResponderBorrar
  47. Hola, aún está disponible el usuario?
    quiero hacer una comunicación con CCS, pero no tengo mucho la idea clara. me puede colaborar con eso?
    Gracias

    ResponderBorrar
  48. Que tal Jorman, muchas gracias por visitar el blog. ¿Qué es lo que tienes pensado hacer o que tipo de comunicación requieres con el Code Composer Studio?. Saludos.

    ResponderBorrar
  49. Me podrías proporcionar el código, haré algo parecido pero con CCS y quiero tener una idea básica. Te dejo mi correo: ing.andresmjr@hotmail.com Excelente página!! ;D

    ResponderBorrar