{"id":54,"date":"2016-11-10T15:08:51","date_gmt":"2016-11-10T14:08:51","guid":{"rendered":"http:\/\/www.pinguytaz.net\/?p=54"},"modified":"2016-11-10T15:08:51","modified_gmt":"2016-11-10T14:08:51","slug":"uso-modulo-bluetooth-hc-05-en-arduino","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2016\/11\/10\/uso-modulo-bluetooth-hc-05-en-arduino\/","title":{"rendered":"Uso modulo bluetooth (HC-05) en Arduino"},"content":{"rendered":"<p>El primer \u00a0POST recuperado del anterior servidor creemos que deb\u00eda ser\u00a0\u00a0uno m\u00e1s de Arduino y exactamente el uso de un modulo Bluetooth (CZ-HC-05) y un ejemplo de uso de se\u00f1ales digitales y anal\u00f3gicas.<\/p>\n<p>Empezamos con un circuito que nos permite conectarnos a un dispositivo (m\u00f3vil android en nuestro caso) por <a href=\"https:\/\/es.wikipedia.org\/wiki\/Bluetooth\">Bluetooth<\/a>, explicando no solo la forma en la que podemos usar el modulo de <a href=\"https:\/\/es.wikipedia.org\/wiki\/Bluetooth\">bluetooth<\/a> (en nuestro caso <strong>CZ-HC-05 gomcu<\/strong>) en modo comando y comunicaci\u00f3n sino tambi\u00e9n ya de paso el uso de se\u00f1ales digitales y anal\u00f3gicas con arduino.<\/p>\n<p>El circuito y programa que vamos a explicar esta en \u201c<a href=\"http:\/\/fritzing.org\/projects\/uso-de-bluetooth-modulo-hc-05\">http:\/\/fritzing.org\/projects\/uso-de-bluetooth-modulo-hc-05<\/a>\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-55 aligncenter\" src=\"http:\/\/www.pinguytaz.net\/wp-content\/uploads\/2016\/11\/MontajeBluetooch-300x180.jpg\" alt=\"montajebluetooch\" width=\"300\" height=\"180\" \/><\/p>\n<p><em>Necesitaremos para este montaje<\/em><br \/>\nModulo bluetooth HC-05 que se puede comportar como maestro, yo he utilizado el CZ-HC-05)<\/p>\n<ul>\n<li class=\"alignnone\">Un arduino, he utilizado un arduino UNO.<\/li>\n<li class=\"alignnone\">Potenci\u00f3metro 100K<\/li>\n<li class=\"alignnone\">2 Led normales y uno RGB<\/li>\n<li class=\"alignnone\">5 resistencias (10K, 100\u03a9 (2), 470\u03a9 y 220\u03a9)<\/li>\n<\/ul>\n<p><strong><em>Peque\u00f1as nociones de Bluetooth<\/em><\/strong><\/p>\n<p>El Bluetooth es una comunicaci\u00f3n inal\u00e1mbrica en la banda de 2,4 GHz. Existen dos modelos de m\u00f3dulos Bluetooth: el HC-05 que puede ser maestro\/esclavo (master\/slave), y el HC-06 que solo puede actuar como esclavo (slave). El maestro es el que conecta a los esclavos ya que no solo puede conectarse a uno sino puede tener una red de dispositivos, hasta 7 esclavos, los esclavos solo pueden hablar con el maestro y este con todos sus esclavos.<\/p>\n<p>El dispositivo bluetooth tienen una direcci\u00f3n de dispositivo \u00fanica de 48-bits \u201cBD_ADDR\u201d, como tambi\u00e9n puede tener un nombre que definimos nosotros esto es lo que usaremos \u201cAT+NAME\u201d ya que nos facilitara sus localizaci\u00f3n. Cuando un maestro lanza una b\u00fasqueda de dispositivos estos contestan con su direcci\u00f3n y nombre. Si dos dispositivos est\u00e1n vinculados no lanzan esta b\u00fasqueda cuando se encuentra en rango se conectan.<\/p>\n<p>Los protocolos de comunicaci\u00f3n de los dispositivos bluetooth, les llamamos perfile(<a href=\"https:\/\/es.wikipedia.org\/wiki\/Perfil_Bluetooth\">https:\/\/es.wikipedia.org\/wiki\/Perfil_Bluetooth<\/a>) y los m\u00e1s importantes son:<\/p>\n<ul>\n<li>SPP (Serial Port Protocol) Como si fuera una conexi\u00f3n serie y es el ideal para r\u00e1fagas de datos.<\/li>\n<li>HSP (Headset Profile ) Para comunicaci\u00f3n con auriculares.<\/li>\n<li>HID (Human Interface Device Profile) Ratones y teclados.<\/li>\n<\/ul>\n<p><strong><em>Descripci\u00f3n de nuestro modulo HC-05<\/em><\/strong><\/p>\n<p>Como hemos dicho este modulo nos permite trabajar como esclavo o maestro, HC-05 podemos decir que es el integrado que usa nuestro modulo CZ-HC-05, esto permite poner 5v en VCC cuando en realidad el integrado HC05 trabaja con 3v.<\/p>\n<p>El patillaje es el siguiente:<\/p>\n<ol>\n<li><strong>VCC<\/strong> \u2013 3,6-6v<\/li>\n<li><strong>GND<\/strong> \u2013 Masa<\/li>\n<li><strong>TXD<\/strong> \u2013 Va a la recepci\u00f3n del arduino<\/li>\n<li><strong>RXD<\/strong> \u2013 Va a la transmisi\u00f3n del arduino 3,3v<\/li>\n<li><strong>KEY<\/strong> \u2013 En alto se pone en modo comando. Para poder introducir comandos ATs.<\/li>\n<li><strong>LED<\/strong> \u2013 Se conecta un led para ver cuando tiene comunicaci\u00f3n.<\/li>\n<\/ol>\n<p>Para poner el modo comando cortaremos la alimentaci\u00f3n, pondremos en alto el pin <em><strong>KEY<\/strong><\/em> y volveremos alimentar. Para pasar a modulo de comunicaci\u00f3n realizamos lo mismo pero con el <em><strong>KEY<\/strong><\/em> en bajo.<\/p>\n<p>En modo comando podremos configurar mediante <a href=\"https:\/\/www.dropbox.com\/s\/dp44ij3ljsacbxl\/Comandos%20AT.pdf\">comandos ATs<\/a> el modulo, recordar entre comando y comando deberemos esperar un segundo, y debemos terminar estos con un retorno de carro (\\r c\u00f3digo 13) y un fin de linea (\\n c\u00f3digo 10) y los comando m\u00e1s interesantes son:<\/p>\n<ol>\n<li><strong>AT<\/strong> (es un test) la respuesta sera OK si la comunicaci\u00f3n ha sido correcta.<\/li>\n<li><strong>AT+VERSION<\/strong> Nos da la versi\u00f3n del modulo.<\/li>\n<li><strong>AT+ORGL<\/strong> Que pone los par\u00e1metros de fabrica.<\/li>\n<li><strong>AT+NAME?<\/strong> Da el nombre del dispositivo.<\/li>\n<li><strong>AT+NAME=<\/strong> Ponemos un nuevo nombre al dispositivo.<\/li>\n<li><strong>AT+ROLE=0<\/strong> Nos ponemos en modo esclavo (podr\u00eda se 1 maestro)<\/li>\n<li><strong>AT+PSWD?<\/strong> Nos da la clave del dispositivo<\/li>\n<li><strong>AT+PSWD=<\/strong> Ponemos una nueva clave<\/li>\n<li><strong>AT+UART?<\/strong> Configuraci\u00f3n de conexi\u00f3n<\/li>\n<li><strong>AT+UART=&lt;baudios&gt;,&lt;stop&gt;,&lt;paridad&gt;<\/strong> Configuramos los par\u00e1metros de comunicaci\u00f3n.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-58 aligncenter\" src=\"http:\/\/www.pinguytaz.net\/wp-content\/uploads\/2016\/11\/Bluetooth_board-300x179.png\" alt=\"bluetooth_board\" width=\"300\" height=\"179\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><em><strong>Explicaci\u00f3n del c\u00f3digo<\/strong><\/em><\/p>\n<p>Una vez que tenemos el circuito echo y programado pasamos a explicar partes del <a href=\"http:\/\/fritzing.org\/media\/fritzing-repo\/projects\/u\/uso-de-bluetooth-modulo-hc-05\/code\/E5_Bluetooth.ino\">c\u00f3digo<\/a> que nos puede interesar.<\/p>\n<p><em>Lo primero es indicar que partes del c\u00f3digo nos permiten comunicarnos con el modulo<\/em>, este se programa v\u00eda serie pero para no utilizar los pines (0 y 1) y as\u00ed poder seguir usando la consola serie para depuraci\u00f3n usaremos los pines (10 y 11)<\/p>\n<h4>#include &lt;SoftwareSerial.h&gt; \/\/ Comunicaci\u00f3n serie en otros pins<\/h4>\n<h4>SoftwareSerial BT(10,11); \/\/10 RX, 11 TX. \/\/ As\u00ed tendremos el objeto BT que es por el que nos comunicamos.<\/h4>\n<p>Definimos la velocidad de comunicaci\u00f3n, de la misma manera que se realizar el uso de la consola, ya que trabajaremos igual con la diferencia que en este caso la comunicaci\u00f3n va por los pines definidos anteriormente.<\/p>\n<h4>BT.begin(38400); \/\/ Velocidad del equipo HC-05<\/h4>\n<p>Para poder pasar de modo comando a comunicaci\u00f3n hemos creado la funci\u00f3n modo_Comando que seg\u00fan se pase como par\u00e1metro 1 o 0 pondremos el modulo en una u otra forma de trabajo.<\/p>\n<h4>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/h4>\n<h4>\/\/ Modo_Comando(HIGH-Comamdo, LOW-Transmisi\u00c3\u00b3n)<\/h4>\n<h4>\/\/<\/h4>\n<h4>\/\/ Reinicia el modulo en modo comando o transmisi\u00f3n<\/h4>\n<h4>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/h4>\n<h4>void modo_Comando(boolean modo)<\/h4>\n<h4>{<\/h4>\n<h4>\u00a0\u00a0 digitalWrite(Pvcc, LOW); \/\/ Apaga el modulo<\/h4>\n<h4>\u00a0\u00a0 delay (500) ;<\/h4>\n<h4>\u00a0\u00a0 digitalWrite(Pkey, modo); \/\/ Pone el modo<\/h4>\n<h4>\u00a0\u00a0 delay (500) ;<\/h4>\n<h4>\u00a0\u00a0 digitalWrite(Pvcc, HIGH); \/\/ Enciendo el modulo en el estado.<\/h4>\n<h4>\u00a0\u00a0 if (modo) Serial.println(\u201cActivamos el modo comando del HC-05\u201d);<\/h4>\n<h4>\u00a0\u00a0 else Serial.println(\u201cActivamos el modo transmisi\u00c3\u00b3n\u201d);<\/h4>\n<h4>}<\/h4>\n<p>Vemos como con las funciones \u201cdigitalWrite\u201d eliminamos la alimentaci\u00f3n que se realiza por el pin 8, ya que el consumo del modulo es muy peque\u00f1o, y cambiamos el estado de la pata KEY que se conecta al pin 9.<\/p>\n<p>Luego tenemos la funci\u00f3n \u201ccomando\u201d que env\u00eda una transmisi\u00f3n mediante la funci\u00f3n \u201cescribe\u201d y espera una respuesta mediante la funci\u00f3n \u201clee\u201d. Estas dos funciones son las mismas que usamos en modo comunicaci\u00f3n y la hemos aprovechador tanto que la escritura a otro dispositivo va con el retorno de carro y nueva linea necesario para los comando ATs, no estorban pero si nuestro protocolo no lo necesitara deber\u00edamos retocar estas funciones.<\/p>\n<p>Y as\u00ed se trabaja con el modulo como pod\u00e9is ver es muy sencillo, ya que el arduino espera datos de otro dispositivo y tambi\u00e9n los env\u00eda yo he utilizado una aplicaci\u00f3n de android ya echa que es \u201c<a href=\"https:\/\/play.google.com\/store\/apps\/details?id=ptah.apps.bluetoothterminal\">Bluetooth Terminal<\/a>\u201d muy sencilla y nos permite depurar nuestros protocolos de comunicaciones, para luego poner los dispositivos adecuados. En nuestro caso el protocolo es sencillo ya que la aplicaci\u00f3n es sencilla ya que una vez que hemos introducido todos los comandos de configuraci\u00f3n necesarios, esto valdr\u00eda una vez pues los guarda en memoria, por eso muchas veces esta la aplicaci\u00f3n de configuraci\u00f3n de m\u00f3dulos bluetooth y la de trabajo, pero en nuestro caso es para aprender y ver que podemos tener todo en uno y as\u00ed justo despu\u00e9s pasamos a modo comunicaci\u00f3n y ya entramos en la funci\u00f3n \u201cloop\u201d que se repite hasta que se apaga el arduino.<\/p>\n<p>Lo primero que se hace en cada ciclo loop, es mirar si el boton que se controla en el pin digital 2 esta pulsado en este caso leemos el valor que tenemos en el potenci\u00f3metro conectado al pin analogico A0.<\/p>\n<h4>lectura = analogRead(PA0); \/\/ Leemos el valor de la entrada anal\u00f3gica A0<\/h4>\n<p>para escalar este valor con la funci\u00f3n \u201cmap\u201d, entre los valores de 100 a 1.000 y enviar ambos valores al dispositivo m\u00f3vil que tiene la aplicaci\u00f3n terminal.<\/p>\n<p>Luego tenemos las peque\u00f1as lineas de c\u00f3digo que realizan el parpadeo del led conectado al pin 7, aqu\u00ed lo que hacemos es usar la funci\u00f3n \u201cmillis\u201d que recoge los milisegundos que se lleva encendido el arduino (esta funci\u00f3n nos aguanta 50 d\u00edas que son los milisegundos que aguantar\u00eda el unsigned long, despu\u00e9s se pone a 0) y mira si paso el tiempo especificado para cambiar su estado.<\/p>\n<p>Y luego mira a ver llega alg\u00fan comando del dispositivo m\u00f3vil y solo pueden ser 2:<\/p>\n<ul>\n<li>L &lt;tiempo&gt; que lo que hace es que cambiaremos el tiempo de parpadeo, que se gestiona en el c\u00f3digo anterior,\u00a0 que se encuentra en la variable \u201c<em>parpadeo<\/em>\u201c, la conversi\u00f3n a entero se realiza muy f\u00e1cilmente con la funci\u00f3n \u201ctoInt\u201d<\/li>\n<li>C &lt;rojo&gt;,&lt;verde&gt;,&lt;azul&gt; que pasa los valores que pondremos en el led RGB que esta conectado a los pines 3,5 y 6. La conversi\u00f3n con la funci\u00f3n que hemos comentado antes \u201ctoInt\u201d y las funciones \u201csubstring\u201d y \u201cindexOf\u201d nos permite de forma muy sencilla extraer cada uno de los tres par\u00e1metros.<\/li>\n<\/ul>\n<p>Y ya finalizamos pero y para que era <em><strong>el otro led<\/strong><\/em> pues solo para ver como funciona la patilla <strong>LED<\/strong> del modulo bluetooth y as\u00ed tener el chivato de cuando el otros dispositivo se ha conectado a nuestro modulo ya que se encender\u00e1 el led.<\/p>\n<p>Os dejo el esquema el\u00e9ctrico que puede servir de chuleta para ver como conectar sensores, en nuestro caso un potenciometro, a nuestro arduino, o botones.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-60 aligncenter\" src=\"http:\/\/www.pinguytaz.net\/wp-content\/uploads\/2016\/11\/Bluetooth_esquema-300x224.png\" alt=\"bluetooth_esquema\" width=\"300\" height=\"224\" \/><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El primer \u00a0POST recuperado del anterior servidor creemos que deb\u00eda ser\u00a0\u00a0uno m\u00e1s de Arduino y exactamente el uso de un modulo Bluetooth (CZ-HC-05) y un ejemplo de uso de se\u00f1ales digitales y anal\u00f3gicas. Empezamos con un circuito que nos permite conectarnos a un dispositivo (m\u00f3vil android en nuestro caso) por Bluetooth, explicando no solo la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[2,3,5],"tags":[21,23,25],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-android","category-arduino","category-bluetooth","tag-android","tag-arduino","tag-bluetooch"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":0,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}