Problema extraño con el módulo Bluetooth JY-MCU (HC-06)

0

Breve explicación: los datos enviados a través de la serie Bluetooth no llegan correctamente al Arduino.

Ayer conecté un módulo bluetooth JY-MCU a mi Arduino UNO R3 para probarlo. Conecté los pines TXD y RXD a los pines Arduino 10 y 11 respectivamente y utilicé SoftSerial para comunicarme. Primero probé algunos comandos AT que encontré en línea. Después de AT devolvió OK , ejecuté el código encontrado Aquí y obtuve esta salida:

Starting config
OK
OKlinvorV1.6


OK57600
Done!

Por lo tanto, el nombre y el pin cambiaron, pero yo (supuestamente) cambié la velocidad en baudios con éxito. Sin embargo, cualquier intento posterior de ejecutar cualquier comando AT falló (sin salida), incluso cuando configuré la nueva velocidad de transmisión (57600) en el módem de software. Luego intenté sincronizarlo con mi PC y utilicé el siguiente código para probar:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);

void setup() {
  Serial.begin(9600);
  mySerial.begin(57600);
  delay(1000);
}

void waitForResponse() {
    if (mySerial.available()) {
      while (mySerial.available()) {
        int a = mySerial.read();
        Serial.println(a);
      }
      Serial.write("\n");
    }
}

void loop() {
  waitForResponse();
  delay(2000);
}

En resumen, espero que el módulo reciba algo y luego imprima el valor de cada byte. Lo extraño es que los datos que envío (usando cutecom en la PC) simplemente no son correctos; por ejemplo, el envío de la letra A (en minúsculas o mayúsculas) genera el número 161. Sin embargo, el envío de dos letras A genera los números 161 y 176 A pesar de que son la misma letra. Tengo muy poca experiencia con la comunicación en serie, pero parece que la velocidad en baudios no es correcta. Sin embargo, si este es el caso, no sé cómo volver a cambiar la velocidad en baudios a 9600 ya que ya no puedo enviar comandos AT al módulo.

Cualquier ayuda sobre cómo hacer que el módulo funcione correctamente o al menos una explicación sobre lo que está sucediendo aquí es más que apreciada.

    
pregunta fstanis

1 respuesta

4

La velocidad en baudios 57600 es bastante marginal en un AVR (el microcontrolador usado) a 16 MHz, normalmente está bien con solo un poco más de 2% de error, pero algunos módulos pueden ser exigentes. El sitio Cálculo de la tasa de baudios AVR de WormFood muestra algunas tablas buenas sobre porcentajes de error para varios relojes / combinaciones de velocidad de transmisión.

También me acabo de dar cuenta del comentario de Majenko y tiene toda la razón, la serie de software que está utilizando será peor a esa velocidad, así que para empezar, inténtelo con un UART de hardware.

Que Arduino se ejecuta a niveles lógicos de 5 V, por lo que si no está utilizando un divisor de voltaje para dejar caer la línea de transmisión a 3,3 V, podría valer la pena intentarlo primero. He leído algunas cosas contradictorias sobre si los módulos de HC son tolerantes a 5 V en las líneas serie o no, y ciertamente no hará ningún daño si primero lo intentan para ver si se resuelve.

Pero si ninguno de esos pasos funciona, recomendaría obtener un convertidor serial de USB a TTL, parece que para ese módulo debería buscar uno con un nivel lógico de 3.3 V como this para Sparkfun. También son útiles para una gran cantidad de otras cosas, por lo general son útiles para tener a su disposición.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas