martes, 4 de noviembre de 2014

Problemas con bluetooth HC-06 y ATtiny45 y 85

Últimamente estoy jugando bastante con el ATtiny45 y 85 porque al ser tan pequeñitos y no necesitar reloj externo, dan bastante juego.
El caso es que quería poder comunicarme con ellos a través de Bluetooth y compré el módulo HC-06, que está muuuy bien de precio (por unos 3.5€ en Ebay). Ejemplo: http://www.ebay.es/itm/221483856395

Primero lo conecté con un Arduino Nano para probarlo y ver cómo funcionaba. En el otro extremo usé el teléfono móvil (Android) con BlueTerm, que es perfecto para hacer pruebas.
La primera prueba fue un simple replicador, lo que yo escribía en el móvil me lo devolvía el Arduino.

Viendo que el módulo funcionaba, me dispuse a montarlo en el ATtiny. Primer problema: El ATtiny45 tiene muy poca memoria y la librería SoftwareSerial que utilicé en el Arduino para crear otro puerto serie ya no podría usarla. Tendría que apañármelas con el Serial que trae por defecto.

Así que cargué este programa en el ATtiny45 (http://www.plutec.net/2014/10/programando-un-attiny45-y-85.html):

 void setup() {  
  Serial.begin(9600);  
 }  
 void loop() {  
  Serial.println("HOLA");  
  delay(1000);  
 }  

Y me conecté con el móvil al otro extremo del Bluetooth, a ver qué recibía. El resultado fue desastroso:


Y ahí me quedé un par de días pensando, hasta que se lo comenté a Juanjo (un amigo y compañero de Hispasec) y me comentó que quizás modificando la velocidad del puerto serie se podría mejorar algo, así que al lío fui.
Me descargué el datasheet del HC-06 para ver si se podría modificar la velocidad de comunicación y cómo se hacía. Si alguien quiere mirarse el datasheet entero, es todo suyo. Yo me fui directamente a la página 15 que explica qué comandos usar para cambiar la velocidad, nombre y PIN del módulo. Aquí un resumen:

 Cambiar velocidad de comunicación:  
 Envía: AT+BAUD1  
 Respuesta: OK1200   
 Envía: AT+BAUD2   
 Respuesta: OK2400   
 Aquí la lista de velocidades disponibles:  
 1---------1200   
 2---------2400   
 3---------4800   
 4---------9600 (Por defecto)   
 5---------19200   
 6---------38400   
 7---------57600   
 8---------115200   
 9---------230400   
 A---------460800   
 B---------921600   
 C---------1382400  
 Cambiar el nombre del módulo:  
 Envío: AT+NAMEname   
 Respuesta: OKname  
 - Ejemplo:  
 Envío: AT+NAMEpepito  
 Respuesta: OKname  
 (El nombre está limitado a 20 caracteres)  
 Cambiar PIN del dispositivo:  
 Envío: AT+PINxxxx   
 Respuesta: OKsetpin  
 - Ejemplo:  
 Envío: AT+PIN5678  
 Respuesta: OKsetpin  
 El PIN por defecto es 1234  
 Para versiones del módulo mayor que la 1.5 hay comandos de paridad disponibles. 
 Mirar el datasheet.  

Pues bien, para cambiar la velocidad del módulo usé de nuevo el Arduino Nano y le cargué este sketch (no recuerdo de dónde lo saqué, así que no puedo poner los créditos, lo siento):

 #include <SoftwareSerial.h>  
 SoftwareSerial mySerial(4, 2); // RX, TX  
 String command = ""; // Stores response of the HC-06 Bluetooth device  
 void setup() {  
  // Open serial communications:  
  Serial.begin(9600); // Arduino - PC bauds
  Serial.println("Type AT commands!");  
  // The HC-06 defaults to 9600 according to the datasheet.  
  mySerial.begin(9600); //Arduino - BT bauds
 }  
 void loop() {  
  // Read device output if available.  
  if (mySerial.available()) {  
   while(mySerial.available()) { // While there is more to be read, keep reading.  
    command += (char)mySerial.read();  
   }  
   Serial.println(command);  
   command = ""; // No repeats  
  }  
  // Read user input if available.  
  if (Serial.available()){  
   delay(10); // The delay is necessary to get this working!  
   mySerial.write(Serial.read());  
  }  
 }  

Debemos conectar los pines 2 y 4 del Arduino al RX y TX del módulo BT, abrimos una consola serie y nos dirá:
 Type AT commands!
Para probar que están bien conectados los pines TX y RX podemos mandar el comando:
-> AT
<- OK
Nos debe responder OK, si esto no es así, posiblemente tengamos que intercambiar los cables RX y TX del Arduino al BT.
Pasamos a configurar el módulo BT con la siguiente frecuencia que admite: 19200
-> AT+BAUD5
<- OK19200

Cargamos el ATtiny con el sketch que puse al principio que sólo escribía "HOLA", pero modificando la frecuencia a 19200 y... PUMMM


No dice que el puerto serie del ATtiny sólo soporta velocidades de 9600, 38400 y 115200.

Antes de nada recordar que los puertos serie del ATtiny son el Analog Input 2 y el 3 (RX y TX respectivamente):

Cambiamos la frecuencia del HC-06 a 38400 y probamos con el ATtiny. El resultado es este:


Es mejor que con 9600, pero todavía se come algunos caracteres de fin de línea. Así que repetimos el proceso para 115200, con el siguiente resultado:


No he hecho mediciones y pruebas estadísticas (cosa que Juanjo me pidió), pero con estas vistas, creo que es suficiente.

Espero que os sirva para "algo". Cualquier duda, a los comentarios.


No hay comentarios:

Publicar un comentario