"¿De qué serviría hablar de aquello? Nadie me creería". Napoleón Bonaparte.

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:

Anónimo dijo...

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

ALF dijo...

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.

Unknown dijo...

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

ALF dijo...

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

Unknown dijo...

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

ALF dijo...

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

Unknown dijo...

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

ALF dijo...

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

Unknown dijo...

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

ALF dijo...

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

ALF dijo...

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

Unknown dijo...

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
:)

Unknown dijo...

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

ALF dijo...

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.

Anónimo dijo...

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

ALF dijo...

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

Unknown dijo...

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

Antonio P dijo...

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!

Unknown dijo...

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 ;)

Antonio P dijo...

Excelente!

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

Buen dia!




ALF dijo...

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.

Anónimo dijo...

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

ALF dijo...

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

Unknown dijo...

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.

ALF dijo...

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.

Unknown dijo...

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

Anónimo dijo...

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

ALF dijo...

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.

Anónimo dijo...

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

ALF dijo...

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

Unknown dijo...

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

ALF dijo...

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

dekodo dijo...

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

Unknown dijo...

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

ALF dijo...

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

Anónimo dijo...

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

Anónimo dijo...

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.

Anónimo dijo...

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

Anónimo dijo...

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

josgard dijo...

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

ALF dijo...

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.

Clari dijo...

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?

ALF dijo...

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.

Anónimo dijo...

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

Unknown dijo...

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

Unknown dijo...

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

Jorman dijo...

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

ALF dijo...

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.

Anónimo dijo...

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

Resistencias o resistores (Conceptos básicos)

  H an pasado casi 4 años desde que publiqué la última entrada en este blog (diciembre 2014); cuando comencé con este blog en el 2011, lo h...