Bluetooth_bitbloq_2

¿Quieres comunicarte vía bluetooth con tu placa controladora? Puedes hacerlo si tienes un módulo bluetooth compatible con arduino o una placa como la ZUM BT-328 que lo lleve integrado. Una comunicación se realiza siempre entre dos partes, entre dos makers, entre dos robots, entre dos lechugas… bueno, las lechugas lo tienen más difícil para comunicarse… A lo que iba, para conseguir una comunicación inalámbrica vía bluetooth lo que necesitas son dos programas, uno que se ejecute en el ordenador o dispositivo móvil/tablet y otro que se ejecute en la placa cerebro que uses.

Bluetooth_bitbloq_2

En este post se explica cómo realizar dicha comunicación con un ordenador que tenga Bluetooth. Necesitamos entonces:

  1. Programa dentro de la placa controladora que envíe/reciba datos. (Lo haremos con bitbloq )
  2. Programa dentro del ordenador o dispositivo con bluetooth que envíe/reciba datos. (Usaremos el Monitor Serial de la IDE de Arduino)

Abre bitbloq y descarga el IDE de Arduino. ¡Manos al código!

ESCRIBIR POR PUERTO SERIE BLUETOOTH


Serial_bitbloq__BT__1

En este primer ejemplo queremos enviar una frase ‘Bluetooth era un vikingo‘ por el puerto bluetooth esperando 2 segundos entre envío y envío.

Parte 1: EMISOR – Programación en bitbloq

En primer lugar usaremos este bloque de bitbloq de la pestaña Comunicación para inicializar los parámetros del puerto serie bluetooth. Si usas una placa ZUM BT-328 tendrás que poner una velocidad de 19200 baudios:

blu__1

Si en cambio usas el módulo Bluetooth de “Mi Primer Kit de Robótica” que es un HC-05, tendrás que poner 38400 baudios y conectarlo de la siguiente forma:

bluetooth_bitbloq_2

conexion_ModuloBluetooth

¡OJO! Justo cuando le des a Cargar el programa en la placa controladora, debe estar desconectado el cable naranja del pin 0. En cambio, cuando lo vayas a hacer funcionar vuelve a conectarlo como en el esquema.

Los bloques bitbloq de este ejemplo de programación son así de sencillos:

bloques_bluetooth_enviar

Como habrás visto, tan sólo es necesario el bloque de Bluetooth: Enviar donde conectamos el bloque de texto de nuestra frase. Carga este programa en la placa.

Parte 2: RECEPTOR – Usando el Monitor Serial de Arduino IDE

Vamos con la segunda parte, configurar el ordenador para que actúe como receptor.

Si estás usando la placa ZUM BT-328 Recuerda que debes tener el interruptor en ON y los conmutadores en la siguiente posición:

  conmutadores_Bluetooth_1_23
  • Conmutador 1: ON
  • Conmutador 2: OFF
  • Conmutador 3: OFF

Alimenta la placa con el portapilas, adaptador o cable USB.

>> Configuración Bluetooth en Windows 7:

Busca desde el botón inicio el asistente de configuración bluetooth que te guiará para establecer la conexión.

cap__0

Aunque en algunos ordenadores el asistente de configuración bluetooth sea ligeramente distinto, los pasos a seguir serán como estos:

cap_win7_bluetooth

Una vez esté configurado y le demos a conectar, nos pedirá que introduzcamos el PIN que por defecto será 1234

cap__4_PIIIN

>> Configuración Bluetooth en Linux (Ubuntu):

  1. Abre una Terminal (Alt + F2) y escribe gnome-terminal
  2. Busca la habilitación de nuevos dispositivos Bluetooth escribiendo el siguiente comando.

    $ sudo hcitool scan
    Scanning …
    98:D3:31:B2:DB:09 bqZUM_BT328

  3. Conecta tu dispositivo al puerto ‘/dev/rfcomm0′ escribiendo el siguiente comando usando la dirección obtenida en el paso anterior:

    $ sudo rfcomm bind /dev/rfcomm0 98:D3:31:B2:DB:09

>> Configuración Bluetooth en MacOX:

  1. En Preferencias de sistema selecciona Bluetooth.
    Captura de pantalla 2015-01-28 13.22.51 Captura de pantalla 2015-01-28 13.23.19
  2. Busca tu placa y pulsa enlazar. Si no puede conectarse y aparece un error, es necesario “emparejar” el dispositivo Bluetooth con el ordenador. Para ello, pulsa sobre Opciones e introduce el código “1234” y vuelve a pulsar sobre enlazar.
    Captura de pantalla 2015-01-28 13.23.45

¡¡Ya estamos conectados!! Y sabremos el numero del puerto creado dependiendo del sistema operativo, por ejemplo: ‘COM46′, ‘/dev/rfcomm0′, ‘/dev/tty.bqZUM_BT320-SPPDev’…

Abre el IDE de Arduino y selecciona en Herramientas la placa [ArduinoUNO o Arduino BT w/ATmega328] y el puerto [ej: COM46]

cap__6_arduino_puerto_placa

Ya podemos abrir el Monitor Serial desde Herramientas/MonitorSerial o pulsando este icono:

cap__7_arduino_abre_SerialMonitor

Recuerda seleccionar la velocidad de 19200 o 38400 baudios según tu placa. Verás cómo aparece la frase cada 2 segundos

cap__8_arduino_monitor_recibe_1

LEER EL PUERTO SERIE BLUETOOTH


Serial_bitbloq__BT__2

Recibiendo vía Bluetooth:

Vamos con un ejemplo para recibir datos por el puerto que hemos abierto. Lo que hace este bloque de comunicación es comprobar si ha llegado algo vía bluetooth:

blu__0

Si recibimos algo por el puerto creado lo vamos a guardar en una variable local llamada “dato” que compararemos para ver si es la letra A (¡en mayúscula!) y en caso de ser cierto, encenderemos el LED ya integrado en la placa, es decir, el del pin digital 13 (así no necesitas conectar el módulo LED). En caso de recibir cualquier otro dato, apagaremos dicho LED:

bloques_bluetooth_recibir

“- Pero… ¡Has comparado el dato con un 65!¿? – ” Pues sí querido robonauta, porque ahora mismo en bitbloq no hay un bloque para comparar variables de texto tipo char de momento sólo pueden ser tipo String. No te preocupes si te suena a chino, tan sólo debes saber que para este ejemplo usamos números para identificar letras.

La letra ‘A‘ corresponde con el número decimal 65 en código Ascii (mira la tabla al final de este post).

Carga este programa en tu placa y abre de nuevo el Monitor Serial. Escribe una ‘A’ en mayúscula y dale a enviar… ¿Ves cómo se enciende el pequeño LED? ¿Qué sucede si envias cualquier otra cosa?

cap__9_arduino_monitor_envia_fix

Ahora que eres un experto en comunicación bitbloq-bluetooth, que sepas que la aplicación para Android llamada RoboPad envía los caracteres: S,U,D,R,L,C,M… (stop, up, down, right, left, claw, manual) al pulsar los botones de control de los PrintBots. Aquí te dejo la tabla Ascii para que compares la equivalencia de las letras y caracteres que viajan:

Ascii_A

¿Te has fijado en que los números 0,1,2,3… también se envían como caracteres y tienen su correspondencia decimal en el código Ascii? Qué de cosas se pueden aprender en un día… ¡Dentro de poco sabrás leer las letras de Matrix!

44 comentarios

  1. Me encantó la explicación! quiere comprar el Kit de Robótica Mi primer, ya que es para enviar a Brasil? el pago por PayPal !!

  2. Podrias vover ha hacer lo de bitbloq con la versión de sofware nueva???

    1. Anita de Prado

      Hola Gabriel, ¿a qué te refieres exactamente con “hacer lo de bitbloq”? ¿a qué software te refieres?

  3. How to do (Bluetooth Serial Available)>2 then (HiByte=Bluetooth recieved data) and (LoByte=Bluetooth recived data) in bitbloq?Thanks in advances.

    1. Anita de Prado

      Hola Tsai y-p. For the time being you cannot program “(Bluetooth Serial Available)>2″ in bitbloq. However, you can use that code in Arduino IDE. Here’s an Arduino example:

  4. ¿Como puedo enviar algo? cargo el programa, me da correcto y ¿ahora? no sé. He vinculado la placa con el bluetooth instalado y mi pc lo vé.

    1. Anita de Prado

      Hola Juan Carlos. Si usas un dispositivo móvil o tablet con Android puedes usar como pone en el post la aplicación RoboPad. Tan sólo tendrás que instalarla en tu dispositivo, enlazar el Bluetooth y pulsar las flechas de movimientos, ya que esos botones enviarán las letras: S,U,D,R,L,C,M… (stop, up, down, right, left, claw, manual).

      Si en cambio estás usando el PC, necesitas una aplicación que envíe datos por bluetooth, por ejemplo, si usas Windows tienes Hyperterminal, para MAC OSX la aplicación CoolTerm si usas Linux tienes las aplicaciones Minicom y Cutecom. ¿Qué sistema operativo usas?

      1. Gracias! esta tarde me pongo con mi hija.

      2. Mi sistema operativo es windows 8.1, pero creo que sera mas fácil con RobPad.

      3. como se configura el bluetooth en el kit printbot beetle que no se como hacerlo que mande señal para conectarlo al movil.

        1. Anita de Prado

          Hola Adry,

          Puedes usar Robopad para controlar tu printbot desde el móvil: http://diwo.bq.com/robopad-3/
          Para ello, conecta todos los componentes incluído el módulo bluetooth HC-05 a la placa FreaduinoUNO como indica el esquema:
          Robopad Conexiones

          Cuando esté listo, enciende el robot y pulsa en el botón de conectar de la aplicación RoboPad (icono de enchufe arriba a la izquierda). Te aparecerá una lista de dispositivos bluetooth. Pulsa sobre el que se llame HC-05 e introduce la contraseña 1234.

  5. Hola!
    Tengo un Renacuajo y todo va estupendo pero cuando conectamos según el esquema (lo hemos comprobado 20 veces), ya no podemos enviar programas a la placa. Además, no se bien qué poner en Tx y Rx en la función de inicialización, he puesto un 1 en Rx y un 0 en Tx pero…

    He probado con el programa que pones de ejemplo y lo paso sin conectar el módulo. Luego conecto el módulo pero nada.
    Sin embargo el módulo BT debe estar bien alimentado porque enlaza con la aplicación… no se por donde seguir.

    Alguna idea?

    1. Anita de Prado

      Hola Sergio,

      Tienes una FreaduinoUNO debes poner la tasa de baudios a 38400 (en lugar de 19200). Además usa un 0 en Rx y un 1 en Tx. Dinos si con esto funciona.

      Es normal que no puedas programar la placa con el módulo conectado al pin digital 0. Éste pin de recepción (Rx) es el único que debes desconectar cuando programes.

      ¡Ánimo!

      1. Hola Anita, había hablado con soporte y preparado videos, el xml del programa y fotos del cableado, a ver si entre todos dábamos con ello.
        Cuando estaba a punto de decirte que el pin RX no es el 0 sino el 1 (el blanco), he caído….

        He visto que has incluido en la entrada del blog los valores correctos de RX y TX en la imagen de la inicialización Bluetooth y que yo, ingenuo de mí, pensaba al reves. Como el cableado que muestra en la placa del módulo, RXD es el blanco, que va al 1 y TXD es el naranja, que va al 0 según el esquema, asumí que la placa Feaduino lo ve igual, pero supongo que el programa lo pinta desde el punto de vista de la placa, es decir, el RX de la placa, va al TX del módulo y viceversa. Despiste de novato y prueba bastante obvia para haberlo probado.

        Resuelto!!! Ya se enciende el led!

        1. Anita de Prado

          Me alegro que ya lo hayas solucionado :) Efectivamente es como dices, el índice R es “recepción” y T “transmisión” pero desde el punto de vista de cada componente. He cambiado la imagen para que quede más claro a todo el que lo pruebe. ¡Gracias Robonauta!

  6. Hola robonauta, hemos creado mediante MIT App Inventor una aplicación para poder encender un LED de la placa BQ-ZUM 328 por el bluetooth cuando pulsamos un botón que aparece en la aplicación, ¿qué programa tenemos que crear en BitBloq para que funcione la placa como te he dicho? Muchas gracias.

    1. Julián Caro

      Hola Luís.

      Debes realizar exactamente el programa que Anita ha puesto como ejemplo en esta entrada del módulo bluetooth en la parte del bloque Recibiendo vía Bluetooth de esta forma:

      Recibiendo por bluetooth-Encender LED

      Recuerda configurar en bitbloq correctamente tu bluetooth tal como se explica en la entrada.

      Asegúrate de que tu programa está enviando el código correcto. En este caso, tal como puedes ver en el post, un 65 en código ascii corresponde con la letra A mayúscula.

      ¡Nos vemos robonautas!

  7. Hola, tengo un problema con el módulo bluetooth. Lo he conectado correctamente, se conecta con mi portátil. Primero desconecto el cable que va al 0 para poder cargar el programa, después cambio el puerto al del bluetooth y vuelvo a conectar el cable. El bluetooth solo se me conecta cuando inicio el Monitor Serie y se desconecta cuando lo cierro. Hasta ahí creo que bien. El problema viene cuando se ejecuta el código pues no se por qué cuando introduzco la A no se enciende el led. El caso es que he probado a comentar la parte del código donde hace la comparación del dato y dejar la instrucción del código que enciende el led justo después de leer el valor. De esta manera el led si que se enciende de modo que la cosa falla en la comparación del dato. He seguido probando y lo que he hecho ha sido escribir por el puerto serie el dato que lee. Mi sorpresa es que cuando escribo cualquier cosa me escribe signos de interrogación, tantos como caracteres escriba. Supongo que es por eso que siempre lee signos de interrogación y la comparación lógicamente nunca se cumple. ¿Alguien sabe por que puede ocurrir esto?

    Un saludo!

    1. Anita de Prado

      Hola Iván, antes de probar otras cosas comprueba que el baud rate sea el correcto para tu placa tanto en el programa que hagas como en el Monitor Serie.

      En concreto debe ser 19200 baudios si usas la ZUM BT-328 o bien 38400 baudios si usas el módulo bluetooth del Kit.

      1. Si, eso está bien tanto en el programa como en el Monitor Serie. Le he dado muchas vueltas y no le hago funcionar…

        1. Hola, a mi me pasa lo mismo que a Luis, mi problema es que al mandar la A, he puesto que me devuelva el valor que lee el bluetooth y me devuelve una Á acentuada, me pasa lo mismo con otras letras, me devuelve cosas que no son lo que mando, con la B me devuelve una A pero con la diéresis, la cosa es que con el ejemplo de mandar algo desde el bluetooth, cuando mando lo del vikingo no me manda las oes, he probado 1234567890abcde….. y además de la o alguna letra también lo hace mal.

          Mi problema es que en la consola del programa arduino no tengo opción de elegir 38400, alguien sabe como puedo añadir esa opción? pasa de 19200 a 57600 :(

          1. Anita de Prado

            ¿Qué versión de Arduino IDE usáis? En alguna de las nuevas versiones no te deja elegir el baudrate correcto (38400).
            Comprobad también las conexiones:
            – Cable naranja TXD = pin 0
            – Cable blanco RXD = pin 1

            Por último, probad a seleccionar la opción “No hay fin de línea” en el Monitor Serial de Arduino IDE.

  8. Buenos que quería preguntar si cualquier vídeo o podría crear uno de explicar “el módulo bluetooch” para explicar cómo nos conectamos y cómo programar lo que debemos comprobar (por ejemplo, baterías). Porque yo ya leí todo sobre ella, sin embargo, yo no podía hacer nada con “módulo de bluetooch” mi teléfono y la tableta no encontraron ningún robo dispositivo de mi “PrintBot Kit Escarabajo
    Cuerpo + electrónica “si podesse me facilitar con vídeo agradecido. XD :)

    1. Anita de Prado

      Hola elton,
      Haremos un vídeo explicando cómo utilizar el módulo bluetooth para que os quede todo más claro :)

  9. Yo uso la versión 1.6.0. Esta todo correcto Ana, aun así sigue sin funcionar, me ocurre exactamente lo mismo.

    Un saludo.

    1. Anita de Prado

      Hola de nuevo Iván,

      Como sigues teniendo problemas y sin tener delante tus componentes es difícil encontrar la causa, te sugiero que escribas a soporte.3d@bq.com y les indiques los pasos que has seguido. Tiene pinta de ser problema del baudrate pero si en cambio fuese un problema de fábrica de tu módulo bluetooth ellos sabrán darte una solución.
      ¡Ánimo!

  10. Muy buenas:

    Estoy intentando hacer funcionar el bluetooth siguiendo los pasos que me indicáis en la página (cargar el programa en la placa con bitbloq y después buscar el dispositivo bluetooth) pero no consigo que dicho dispositivo sea detectado, es como si no existiese, ni utilizando un ordenador ni con un móvil con robopad++.
    Agredecería que me echaseis una mano.
    Un cordial saludo,

    Cándido

    1. Anita de Prado

      Hola Cándido,

      ¿Qué placa tienes? Si usas la FreaduinoUNO con el módulo Bluetooth del Kit, comprueba que estén bien conectados los cables tanto al propio módulo como a la placa controladora. Además, fíjate en que el interruptor de la FreaduinoUNO esté en 5V (y no en 3V3). Si en cambio tienes una ZUM BT-328, comprueba la posición de los pequeños conmutadores (ON/OFF/OFF).

      En cualquier caso, prueba a alimentar la placa con pilas bien cargadas por si fuese un problema de alimentación del módulo Bluetooth. Si después de estas comprobaciones sigues teniendo problemas, escribe a soporte.3d@bq.com y les indiques los pasos que has seguido.

      ¡Un saludo!

  11. Hola a todos!

    He montado el esquema y tengo emparejados la placa con el pc via bluetooth.

    Al enviar datos del pc al arduino, recibe bien, pero no el valor debido. Por ejemplo, si envío un 1, me aparece un 247 en la variable…

    Lo mismo ocurre cuando envío desde el arduino hacia el pc, no se recibe la frase, sino “basura”.

    Compruebo que los valores no son aleatorios, pero no tienen sentido (ya he comprobado que no son los valores ascii)

    alguna sugerencia?

    gracias!!!

    1. Anita de Prado

      Hola Javi,

      Parece que es un problema de la tasa de baudios (baudrate). ¿Estás usando el monitor serial de Arduino IDE? Sí es así, comprueba que has seleccionado en el MonitorSerial la velocidad de 19200 o 38400 baudios según tu bluetooth y también la opción “No hay fin de línea”.

      ¿Se soluciona con esto?

  12. Hola!
    He intentado hacer funcionar el bluetooth, he seguido los pasos, cargar el programa en la placa con bitblop, después desde la aplicación robopad++ intento conectarme pero no lo consigo, no aparece ningún dispositivo.
    Ya le escribí al servicio técnico pero no tengo respuesta.
    Me podéis ayudar?
    Gracias!

    1. Anita de Prado

      Hola Gabriel,

      ¿Tienes la nueva ZUM BT-328? Si tienes la ZUM, comprueba que los conmutadores estén en la posición correcta (que si es tu caso seguramente ya lo hayas comprobado). Si en cambio tienes el módulo Bluetooth con la placa FreaduinoUNO, comprueba que el interruptor esté a 5V (y no a 3V3) y también que has conectado bien los cables de colores al propio módulo:

      State – cable verde
      RXD – cable blanco
      TXD – cable naranja
      GND – cable azul
      VCC – cable rojo
      KEY – cable negro

  13. Hola.
    ¿Como emparejo y comunico dos ZUM BT-328 entre si?.

    Gracias

    1. Anita de Prado

      Hola Luis,
      En principio las ZUM BT-328 están configuradas para trabajar como “esclavo” no “maestro-esclavo”. No puedes enlazar automáticamente dos placas. Sin embargo, puedes probar a comunicarte con ellas a través de un intermediario: un PC, un móvil o dispositivo con bluetooth o bien, conectando ambas placas por cable para que se pasen información.

  14. Buenas, ¿cómo puedo configurar el bluetooth para la placa Zum BT-328 en bitbloq 2? ¿incluyo un componente bluetooth conectado a los pin 0 y 1 aunque esté integrado?

    Podría ser muy útil un minitutorial como este pero para bitbloq 2.

    Recibid un saludo y enhorabuena por esta iniciativa.

    1. sgruben

      Hola Juan,

      Eso es, añade un módulo bluetooth y podrás realizar comunicaciones a través de esta conexión.

      Estamos elaborando poco a poco tutoriales para bitbloq 2.

      Saludos,

  15. Hola ¿podría usar los pines 0 y 1 como salidas digitales en una placa Zum BT 328? necesito todos los pines digitales además del bluetooth integrado y no sé si estos estan libres. Gracias de antemano

    1. SGracia

      En Bitbloq es necesario añadir el bloque del módulo Bluetooth y conectarlo a alguno de los pines, por lo que éstos no podrían quedar libres.

  16. Hola, he comprado el printbot evolution y no tengo ningun problema para hacerlo funcionar desde el pc con el bitbloq1, en cambio no consigo hacerlo funcionar desde la tablet con la aplicacion robopad++, he cargado el programa tal como se explica en el tutorial, y la aplicacion me encuentra a traves del bluetooh la placa Zum BT328, pero una vez conectada, no responde a ningun comando de la aplicacion.

    1. SGracia

      Hola miguelm,

      ¿Puedes decirnos si con un dispositivo Android diferente tienes este mismo problema? ¿Has cargado el programa de Robopad++ para ZUM?

  17. Hola Anita,

    soy un antiguo alumno tuyo de un curso que diste en UNIIR . He hecho una aplicación con app inventor y la he probado con el printbot y funciona correctamente pero he intentado hacer lo mismo con una placa Genuino 101 y no hay modo que se conecte. Podrías indicarme qué puedo hacer? he intentado encontrar la solución en la web de Arduino pero no hay manera.

    Gracias por todo.

    Daniel

Los comentarios están cerrados.