Bluetooth con módulo RN41 y 18F25K20

Cuando pensamos en el estándar Bluetooth para comunicar dispositivos entre sí, pensamos en objetos como nuestro ordenador, nuestro teléfono móvil o algún dispositivo costoso. Sin embargo, gracias a las facilidades que nos brinda el módulo RN41, podemos, por ejemplo, trasformar una simple conexión RS232 en inalámbrica ¡con un alcance de hasta 100 metros! En este artículo veremos la primera parte de todas las cosas que podremos realizar con el módulo Bluetooth de Microingenia S.L. La magia de la radio y la conexión inalámbrica te permiten explorar este útil sistema. En una aplicación simple y con un software gratuito, realizaremos una sencilla medición de temperatura que servirá de ejemplo para iniciarnos en la comprensión y en el aprovechamiento integral de este módulo RN41. ¡Bienvenido al mundo Bluetooth!

Tutorial seleccionado en ABCdatos.com

El módulo de desarrollo Bluetooth de Microingenia S.L. que utilizaremos en este artículo, basado en el RN41 de Roving Networks, es un perfecto aliado para eliminar los cables en tus proyectos o para conectarse a ordenadores y/o teléfonos móviles. Con un alcance de hasta 100 metros (Clase I), posee antena integrada, es compatible con el estándar Bluetooth 2.1, permite velocidades de transferencia de hasta 921Kbps, y lo puedes conectar de forma sencilla mediante la UART (RX/TX) de cualquier microcontrolador, desde donde puedes controlarlo haciendo uso de sencillos comandos AT. El módulo, además, puede ser alimentado tanto a 5Volts como a 3,3Volts, y para ello dispone de un puente (jumper) de selección de la tensión de alimentación. El RN41 funciona a 3,3Volts y sus líneas NO son 5Volts compatibles, por lo que las líneas de uso normal (Rx/Tx) están provistas de adaptación de niveles para su utilización con las placas de desarrollo que operan a 5Volts. De todos modos, posee entradas auxiliares que te permitirán trabajar en forma directa con el RN41 y un bus Rx/Tx de 3,3Volts, tal como utilizaremos nosotros. Aquí lo tienes: nuestro módulo Bluetooth.

La posibilidad que nos brinda utilizar un módulo completo (ya ensamblado) tiene la ventaja de disponer en forma rápida de una conectividad eficiente para ensayos. Es decir, es muy sencillo insertar el módulo en un protoboard, alimentarlo con 3,3Volts, conectarle los canales de transmisión y recepción provenientes de la USART de un PIC y agregarle un diodo LED indicador de estado de conexión. ¡Más sencillo, imposible! El diagrama en bloques del RN41 nos muestra las posibilidades de trabajo que este módulo ofrece y, como podemos apreciar, posee conexión Serie, USB, PCM (audio). Además, dispone de terminales de salida para activar dispositivos diversos como relés, motores, luces y otros circuitos de salida acoplados a este maravilloso enlace inalámbrico que es el módulo RN41. Por supuesto, al final del artículo encontrarás el enlace para descargar la hoja de datos de este módulo (entre otras cosas) y descubrir allí todas las posibilidades. Demás está decir que, si te atreves, con él podrás utilizar comandos AT desde tu teléfono móvil para indicarle instrucciones. Fascinante, ¿verdad?

Diagrama en bloques del módulo Bluetooth RN41

El circuito utilizado para iniciarnos en el mundo Bluetooth es sencillo por donde se lo mire. Es el clásico circuito que emplea los componentes más usuales dentro de nuestro grupo selecto de dispositivos. Un PIC 18F25K20 con un cristal de 16Mhz. para que puedas utilizar el software libre AMICUS y lograr de este modo un sistema que corra a 64Mhz de velocidad de reloj. Esta velocidad será vital para lograr una conectividad a 115.200bps. Si utilizas otros microcontroladores con menor velocidad de reloj, debes observar la conexión de PIO7 en el módulo para “forzar” la velocidad a 9600bps. Es decir, deberás colocar una resistencia pull-up (1K) en el mencionado pin respecto a la tensión de alimentación para lograr este objetivo. ¿Qué más necesitas para iniciar el trabajo? ¡Muy poco! Observa este video y te darás cuenta que ya posees todos los elementos necesarios.

Algunos LEDs, un par de pulsadores, un LCD, el módulo de temperatura con el STCN75, o cualquiera que tengas disponible, pueden ser útiles como para construir este termómetro “remoto e inalámbrico”. Es decir, si dispones de un LM35 (o estás acostumbrado a su uso) puedes utilizar cualquiera de las entradas analógicas que te brinda el PIC 18F25K20. Y si en lugar de utilizar un termómetro deseas instalar otro tipo de dispositivo capaz de enviarte información hacia el ordenador, bienvenido sea. Aquí, el propósito es lograr el enlace Bluetooth e intercambiar datos entre el ordenador y el PIC, del mismo modo que si estuvieras conectado mediante el puerto serie. Aquí tienes el circuito que utilizamos en el protoboard:

Circuito propuesto para el módulo Bluetooth con 18F25K20

El Software del PIC
Todos saben que, para aplicaciones de ensayo y en los casos en que no son críticos los tiempos de acción del programa, prefiero el lenguaje BASIC de programación. A partir de la aparición de AMICUS, la facilidad de uso de este programa se ha potenciado debido a que es un software gratuito y totalmente funcional, sin restricciones de ninguna especie. Por lo tanto, la simplicidad del BASIC, sumada a la potencia de un lenguaje de alto nivel como Proton, facilita mucho la tarea de prácticas y experimentos poco exigentes. De todos modos, como sé que hay muchos entusiastas de otros programas, explicar el código puede servir para facilitar la comprensión del funcionamiento de este proyecto. Por lo tanto, lo primero que haremos es definir (como en todos los lenguajes de programación) los parámetros que determinarán el funcionamiento del PIC: velocidad de datos por puerto serie, utilización del mismo, utilización de display y todas aquellas librerías que sean necesarias.

Luego vienen las variables que utilizaremos en el programa, algunos valores constantes que debemos cargar, un mensaje de bienvenida y, por fin, iniciar el lazo principal de programa. En BASIC es común el uso de lazos de cuenta conocidos como FOR-NEXT. Dentro de ellos podemos incrustar muchas acciones o muchas interrogaciones (adquisición de datos) entre el PIC y su entorno físico. En nuestro caso, siempre estaremos atentos a que se pulse un botón conectado al pin 0 del puerto B o a que nos llegue algún dato proveniente desde el módulo Bluetooth. En BASIC utilizamos la instrucción HSERIN para leer en forma directa la USART del PIC. Con esta sencilla instrucción, sabremos si el módulo Bluetooth está recibiendo datos desde el ordenador. De ser así, estos datos se vuelcan en una variable y el programa actúa en consecuencia. Si es un tipo “esperado” de dato, realizará una determinada acción, u otra, hasta agotar las posibilidades de opción. Si ningún dato coincide con los esperados, es probable que el ordenador le esté “hablando” a otro módulo Bluetooth en las cercanías. Si los datos no corresponden a lo que estamos esperando, el ciclo se reinicia en forma indefinida y mantiene el sistema siempre “en espera y a la escucha”.

Entre las acciones que pueden esperarse está la de encender el LED verde, detectar que se ha pulsado el botón predeterminado para el envío de datos (el mensaje de saludo que vemos en el video), hasta recibir comandos AT desde el ordenador para cambiar la configuración de algunos parámetros de funcionamiento del módulo. Es decir, no vamos a enumerar aquí todas las cosas que pueden realizarse en un enlace serie entre un ordenador y un PIC, pero al menos queríamos explicarte con palabras la estructura del programa (que en definitiva termina siendo igual a una comunicación serie tradicional). Por último, puedes observar en el listado del programa (lo puedes abrir con un editor de texto) que ante cualquier evento que suceda dentro de estos lazos FOR-NEXT, el programa saltará a subrutinas para realizar tal o cual acción. Estas son: leer el termómetro y enviar los datos al ordenador o transmitir (HSEROUT) el mensaje de saludo almacenado.

¿Para qué utilizamos los lazos FOR-NEXT? Para encender el LED rojo en forma intermitente. Sí, ya sabemos que es una aplicación trivial, sin sentido y que podríamos haber utilizado el desborde del TMR0 para ello, pero no olvides que estamos practicando, experimentado, aprendiendo y que este tipo de rutinas puede ser útil en cualquier momento para resolver eventos que no puedan dejar de atenderse u observarse en la forma cíclica en que activamos el LED rojo. También puede ser útil cuando ya has agotado el uso de todos los timers del PIC.

El módulo RN41 de Roving Networks

Entre los enlaces que te ofrecemos al final del artículo, encontrarás el listado completo de comandos AT que te permitirán configurar muchas características del módulo RN41. Por supuesto, una de las más importantes es darle al módulo nuestro nombre. Que al aparecer en escena, no lo haga como una sucesión de letras y números codificados, sino que tenga un nombre representativo a nuestra aplicación. Para lograrlo, bastará con abrir el software de comunicación serie de nuestra preferencia (por ejemplo, el Hyperterminal) y escribir: $$$, es decir, el símbolo de pesos, tres veces seguidas. Si el módulo lo recibe en forma correcta, devolverá las letras CMD seguido por un signo de pregunta, de igual modo que si estuviera esperando nuevas instrucciones. Luego de esto, escribimos SN, . Nosotros escribimos: SN,NeoTeo y resultó lo que ves en el video. El módulo te devolverá un AOK, indicándote que recibió la instrucción, y luego otro signo de interrogación. Este proceso se repite hasta que termines de enviar comandos AT al módulo. Al finalizar, quitas la alimentación, la reestableces y ¡listo! El módulo actuará según los comandos enviados.

¡Atención aquí! Existen dos tipos diferentes de comandos: unos determinan el funcionamiento del módulo (como los que te indicamos recién) y otros le indican acciones en tiempo real. Es decir, para los primeros debes reiniciar la alimentación, mientras que para los segundos la acción se realizará en tiempo real, o sea, cuando tú envíes el comando AT. En el caso de utilizar un ordenador como enlace a un dispositivo remoto que posea el módulo Bluetooth RN41, será muy sencillo enviarle los comandos AT de acción. Desde un teléfono móvil deberás encontrar o elaborar algún tipo de aplicación capaz de realizar este trabajo. Aquí tienes una muestra para ver cómo un teléfono móvil detecta el flamante Módulo Bluetooth NeoTeo.

Nuestro trabajo ahora estará centrado en seguir investigando acerca de las prestaciones que este módulo puede ofrecernos. ¿Qué es lo primero que intentarías hacer funcionar en tu ordenador móvil? El punto es: aplicación remota que envía datos al ordenador de manera inalámbrica. Por supuesto, te invitamos a charlar sobre el tema, posibles mejoras, aplicaciones útiles y todo lo que quieras decirnos en el foro de NeoTeo. Allí tenemos mucho para charlar y comentar acerca de esta maravilla del mundo de las telecomunicaciones: el Bluetooth. ¡Te esperamos!

Deja tu voto

9 puntos
Upvote Downvote

Total votes: 13

Upvotes: 11

Upvotes percentage: 84.615385%

Downvotes: 2

Downvotes percentage: 15.384615%

  • Johann AV

    Excelente, lastima que en mi pais (Perú) es dificil conseguirlo y si lo consiges cuesta un ojo de la cara, bueno para un estudiante.

  • zitonguito

    felicitaciones Mario muy buen trabajo, me sorprendio el modulo RN41 ya que le da la misma distancia de alcance al bluetooth tal y como se tratara de un xbee, y vaya, simplifica la tarea bastante y me imagino que de igual forma el costo, excelente articulo

  • mindmaster

    Que curioso para el lunes tengo que hablar sobre los modelo RN41 en mi clase y esto me servira como material de referencia gracias mario.

    ¿se podria utilizar para mandar comandos remotos a un robot o usarlo como nodo central para la transmision de datos a un gran numero de receptores ( robot,etc)

  • asword

    Bien ahi Johann!!! yo también soy estudiante de Perú y puedo confirmar lo que pusiste. Muy bueno el artículo!!

  • Pic-Codelic Trance

    Simplemente ¡Genial!, como todos dicen, lastima que cueste un ojo de la jeta, yo tenia pensado una aplicación desde hace tiempo para algún modulo de estos después que salio la estación meteorológica NeoTeo,
    Mi idea era que en lugar de conectar al ordenador la estación meteorológica enviar los datos a través del bluetooth y recibirlos en un celular con una aplicación hecha en java me puse a investigar todo pero cuando llegue a ver el precio de los módulos comerciales de bluetooth me desanime y dije algún día lo haré, este proyecto esta para futuro cuando tenga dinero de sobra(que para que eso pase uuuu falta mucho)

    ¡saludos desde México!

    PicTrance…

  • Truko

    Excelente, lastima que los modulos esta muy caros para poder experimentar =/

    • Mario Sacco

      Hola amigos!

      Cada uno de nosotros sabe mejor que nadie la realidad económica que tenemos.
      Es decir: si podremos comprarlo o no.
      En los enlaces al final del artículo, está la web del fabricante del módulo que yo he utilizado y por supuesto allí está el precio. Sumando los gastos de envío, en mi país ese dinero equivale a un buen calzado deportivo, no alcanza para comprar un teléfono móvil, equivale al gasto de energía electrica que tengo en mi casa, etc.
      Es decir, ese dinero solemos gastarlo en muchas cosas y hasta quizás gastamos más en cosas menos "útiles".

      Piensen que no es un gasto en un componente que sirve para una sola aplicación. Es un gasto que disfrutaremos en multiples actividades. Está bueno, vale la pena.
      Quizás otro distribidor lo tenga más barato, busquen, averiguen (Google tiene las respuestas a todo), pero aquellos que puedan (remarco eso, aquellos que puedan) no dejen de pensar en que se trata de una buena "inversión".

      Saludos!
      Gracias por estar ahí.

      Mario

      • Truko

        =D

  • Yesbond

    Hola Amigo Mario:

    Primero que todo me alegra muchisimo que volvieran tus articulos a NeoTeo, ya estaban haciendonos mucha falta, y volviste con un hit de home run.
    Muchos estabamos pidiendo la comunicacion por bluetooth, y tu nos inicias excelentemente con este modulo y cumpliste con lo que prometiste en el Foro de NeoTeo que esta buenisimo.
    Estoy de acuerdo con que el precio es algo elevado, en mi pais Colombia ya lo averigue y cuesta $170.000, cerca de 90 dolares, pero voy a conseguirme el dinero por que pues hay muchas cosas que puedo hacer con este modulo.
    Muchas gracias, y esperamos seguir con ustedes para hacer nuevas aplicaciones.

    Aprovecho para recordarles sobre el Foro, hay un link para que votemos y aprendamos a programar C18, vamos que falta poco tiempo, votemos para aprender mas sobre los microcontroladores.

    Saludo desde Colombia.

  • spectro

    Muy buen articulo…yo tambien necesito trabajar con este modulo pero no lo habia encontrado en Colombia…querido compañero Yesbond , me puedes indicar donde lo conseguiste en nuestro pais???

    Muchas gracias a Neoteo

  • Yesbond

    @Spectro
    Claro mira la pagina es http://didacticaselectronicas.com/index.php, y del modulo bluetooth es: http://didacticaselectronicas.com/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=313&category_id=68&keyword=modulo&option=com_virtuemart&Itemid=6
    Estan en medellin.
    En bogota no se en donde, pero creo que hay una que otra empresa que si les pides el modulo te le consiguen.

    Saludo spectro, espero te sirva la info.

  • byel

    Sobre unos 40€ (creo que más o menos 51$ EEUU) Para un componente de semejantes características no esta mal. Si le vas a sacar provecho es barato sino pues como todo, un gasto tonto.

  • xero_123

    gracias… me va ha servir mucho para los proyectos de robotica que tengo que hacer…xD

  • cristian

    WaaaaooooO! es 100% lo que hace algunos meses atras queria armar para chatear con un compañero en la escuela, lastima que haun no tengo pc y que mi compañero termina la secundaria, pero igual ¡MUCHÍSIMAS GRASIASSSS MARIO SACCO! eres fenomenal.

  • cristian

    Otra cosa, grasias a este articulo que hisiste, me entero que si hay ese llamado modulo que se puede conseguir, que pense seria algo imposible.

  • d4n13l4

    Hola
    sabes estoy trabajando con el modulo bluetooth y con un pic 16f877a pero tengo mis dudas de como conectarme entre los 2, porque el modulo como sabes se alimenta con 3.3v y el pic con 5 que adaptacion sencilla me recomiendas.

    Saludos
    muy bueno tu review

  • alejandro

    quisiera saber cuial es la programacion del pic como tal, yo tengo el pic 2550 y necesito hacer el proyecto de encender y apagar un led por medio de un celular via bluetooh, quisiera ver si me pueden colaborar ya q observo un excelente trabajo, muchas gracias

  • Carlos

    Hola, excelente artículo. Alguien sabe dónde se puede comprar el RN41 en México? Y cuál conviene más, el RN41 o el RN41SM?? Saludos cordiales.

  • Gorlex

    tiene q ser exclusivamente con el pic 18f25k20??? ademas no vi muy claro sobre la programacion que se uso para ello…
    podrias darme una aclaracion sobre ello?
    gracias

  • Gorlex

    serviria igual con el modulo rn42?

  • javier

    Que otros comando a parte de 100 y 200 podemos enviar para el que pic los reconozca. Muchas gracias mario por todo.
    un saludo

  • alejandro piñeros

    Hola mario, buenas tardes.

    Esta aplicación se ve muy interesante pues la verdad si necesito realizarla en un placa smd o algo parecido y así poder presentar en la universidad el proyecto, necesito medir la temperatura a la que esta algun producto enlatado o en envase de vidrio y adicional a esto necesito en tiempo real ir graficando ya sea en una pantalla la medida de la temperatura vs tiempo.

  • Hola! mi problema es que no encuentro el dispositivo RN41 FLY-477 (BlueSMiRF Gold), lo he buscado desde bluesoleil, blueterm (android)no detectan ningún dispositivo. Esta conectado a un regulador de voltaje AMS1117-3.3 seguido de una fuente de 5 voltios, estan conectados los pines VCC (3.3V), GND Y TX, RX al microcontrolador, los pines CTS, RTS estan desconectados. Solo enciende tililando el led incorporado stat el de connect permanece apagado.Gracias por su ayuda de antemano.

  • Cambie la fuente que utilizaba por unas baterías ahora si lo reconoce, envie los comandos $$$ cambie el nombre del dispocitivo todo bien. Ahora mi programa no funciona, para verificar utilice el programa de (solo modifique el puerto donde estaba el led) http://www.neoteo.com/bluetooth-android-pic-led-hola-mundo/ sin embargo tampoco funciona, envio del hyperterminal un 100 y no pasa nada.

    Codigo:

    Declare Hserial_Baud = 115200
    Declare Hserial_Clear = On

    Dim LED As Byte
    DelayMS 100
    Low PORTB.1

    Lazo:

    HSerIn 50,Lazo,[Dec LED]

    If LED = 100 Then

    High PORTB.1
    ElseIf LED = 200 Then

    Low PORTB.1
    EndIf
    GoTo Lazo