HC-05 + RMU900 datos basura...

Buenos dias Amigos del foro tengo este siguiente problema que me surgio, estoy tratando de conectar un modulo Bluetooth HC-05 con un UHF Reader/writter RMU900, logre el pareamiento, pero el erro surge al tratar de recibir o cachar el codigo que emite el lector cuando pasa por una barra o receptor de datos me arroja codigo basura...

Si alguien podria ayudarme con este falla gracias por su tiempo y espero puedan ayudarme.


Si pusieras el codigo te podria ayudar.

A veces no es que sea codigo basura sino codigo diferente, por ejemplo mandas una "A" y segun como leas puede recibir un 6 y luego un 5. A mi me paso en algun proyecto hasta que cai en que recibia 65 que era el numero ASCII del caracter A mayuscula. Y asi otros ejemplos.

Pon el codigo con el que recibes, dime que recibes y que esperabas recibir y lo intentamos resolver.

4jay:
pero el erro surge al tratar de recibir o cachar el codigo que emite el lector cuando pasa por una barra o receptor de datos me arroja codigo basura…

Con tan escasa información, solo se me ocurren dos cosas:

  • Que los datos sean binarios.
  • Configuración incorrecta (frecuentemente en la tasa de baudios).

que raro podria jurar haber dejado unos captures de pantalla mostrando el codigo que me da el lector,

una es el codigo que me arroja el lector RFID Bluetooth y la otra es el modelo del lector que estoy usando.

la cosa es que no estoy utilizando codigo estoy simplemente leyendo por el puerto COM predeterminado del TTL de mi modulo HC-05.

Eh probado todos los Baud para asegurarme, ya cambie un monton de veces el AT+UART. me sigue arrojando los mismos caracteres seguidamente.

Pareces urgido con el tema, porque buscando en Google me encontré con esto

Aparte de eso, ni siquiera el supuesto datasheet me dice nada. Pero también hablan de un SDK en un CD, así que ahí debe de estar la respuesta.

Ahora lo que me pregunto es: seguro que dispositivo debería estar enviando información textual y no binaria? Los datos binarios es normal que suelan verse como "basura" para un programa que lo que espera son datos textuales.

Lucario448: Ahora lo que me pregunto es: seguro que dispositivo debería estar enviando información textual y no binaria? Los datos binarios es normal que suelan verse como "basura" para un programa que lo que espera son datos textuales.

pues fijate que esa fue la conclusion que llegue hace unas horas, ahora lo que quisiera es transformar esos ASCII a HEX y asi tener una idea de por donde comenzar... pero ahora no logro como pasar la data obtenida por el HC-05 hacia el arduino para hacer la conversion, se que con SoftwareSerial logro leer la data obtenida pero algo no me anda bien dado que no recibe ningun dato el arduino.

con respecto al SDK si la tengo, el detalle es que no refleja nada, solo en un PDF muetra es una libreria escrita para VS solamente y un software de prueba de lectura con sus driver solo eso.

pues no es que estoy urgido si no que ya tengo 3 dias enteros y noches en esto y no daba con lo que se podria lograr con esos datos que me arroja, pero comente arriba mi idea ahora es traerme esos ASCII y transformalos que opinas tu con respecto a eso? Gracias por tomarte el tiempo de leer...

4jay: pues fijate que esa fue la conclusion que llegue hace unas horas, ahora lo que quisiera es transformar esos ASCII a HEX y asi tener una idea de por donde comenzar...

void loop() {
  if (elOtroSerial.available()) {
    Serial.print(elOtroSerial.read(), HEX);
    Serial.write(' '); // Pone un espacio (0x20) entre valores hexadecimales
  }
}

4jay: pues no es que estoy urgido si no que ya tengo 3 dias enteros y noches en esto y no daba con lo que se podria lograr con esos datos que me arroja

No no, solo decía :sweat_smile: ::)

4jay: pero comente arriba mi idea ahora es traerme esos ASCII y transformalos que opinas tu con respecto a eso?

Podría ser, quizá sea que haya que interpretar la información de una manera en particular.

Ahora que tocas ese tema (y que desconozco el tema de las tarjetas RFID): qué es lo que se supone que debería leer? Una secuencia de números? Una cadena de caracteres (texto)? O acaso es sólo un "volcado" del contenido de la memoria de esa tarjeta, el cuál el programador debe interpretar ya que es una copia "en crudo" de esta?

Lucario448: Ahora que tocas ese tema (y que desconozco el tema de las tarjetas RFID): qué es lo que se supone que debería leer? Una secuencia de números? Una cadena de caracteres (texto)? O acaso es sólo un "volcado" del contenido de la memoria de esa tarjeta, el cuál el programador debe interpretar ya que es una copia "en crudo" de esta?

la verdad soy nuevo tambien en esta area, por eso no tengo idea de mas o menos como funciona... ahora fijate ya como tal el codigo tambien yalo tenia previsto me lei mucho lo que era la libreria SoftwareSerial pero no estoy recibiendo en el arduino los datos entrantes por el modulo...

ahora tengo el siguiente problema, tengo el esquema de coneccion completa y bien pero el arduino no me arroja ningun dato que pase del modulo... corrigeme si estoy equivocado porfa, pero no deberia ver por el munitor serial ver lo que pasa por el modulo bluetooth?

4jay:
pero el arduino no me arroja ningun dato que pase del modulo… corrigeme si estoy equivocado porfa, pero no deberia ver por el munitor serial ver lo que pasa por el modulo bluetooth?

Usar Arduino como un adaptador USB a serial?

// Useful as a "USB to UART TTL converter", BUT NOT FOR SKETCH UPLOADING (unless reset is not auto-triggered)

// #define USING_MEGA // Uncoment only if your are going to upload this on an Arduino Mega

#ifndef USING_MEGA
#include <SoftwareSerial.h> // On some boards (like the Arduino Mega), this library is not necessary. Use Serial1 instead
#endif

#define BAUD_RATE 115200 // Set the baud rate for the serial communication

#ifndef USING_MEGA
SoftwareSerial virtualSerial(10, 11); // virtualSerial(RX, TX)
#endif

void setup() {
  Serial.begin(BAUD_RATE); // USB UART (pin 0 and 1)

  #ifdef USING_MEGA
  Serial1.begin(BAUD_RATE); // External UART only for boards like the Arduino Mega
  #else
  virtualSerial.begin(BAUD_RATE); // External UART
  #endif

}

void loop() {
  if (Serial.available()) {
    #ifdef USING_MEGA
    Serial1.write(Serial.read());
    #else
    virtualSerial.write(Serial.read());
    #endif
  }

  #ifdef USING_MEGA
  if (Serial1.available()) {
    Serial.write(Serial1.read());
  }
  #else
  if (virtualSerial.available()) {
    Serial.write(virtualSerial.read());
  }
  #endif
}

Ya es tarea tuya modificar estas líneas según corresponda:

#define BAUD_RATE 115200 // Set the baud rate for the serial communication
SoftwareSerial virtualSerial(10, 11); // virtualSerial(RX, TX)

para explicar mas rapido y simple jejeje... ;D

necesito pasar los ASCII del puerto COM TTL del modulo al arduino para transformalo a HEX pero no se como hacerlo???

    #ifdef USING_MEGA
    Serial1.write(Serial.read(),HEX);
    #else
    virtualSerial.write(Serial.read(), HEX);
    #endif

surbyte:     #ifdef USING_MEGA     Serial1.write(Serial.read(),HEX);     #else     virtualSerial.write(Serial.read(), HEX);     #endif

claro esto lo entiendo... pero el detalles que cuando conecto el modulo no recibo ningun dato por el monitor serial del puerto del Arduino, solo puedo ver los datos conectado al COM del Modulo por TTL

No aparece nada...

Cómo están las conexiones?

este es mi esquema… pero al momento de abrir el serial port no recibo nada de nada.

b6bad8649ab8d41f0d967bffb4576a9b876274f0.jpg

  • Este tipo de comunicación serial es uno de los que las líneas de datos NO deben coincidir. TX va con RX y viceversa.
  • Si tienes Arduino Uno de microcontrolador DIP (removible), eso se puede hacer; de lo contrario, para eso es que existe SoftwareSerial.

Bien fijate este es el codigo que estoy usando

#include <SoftwareSerial.h>

 #define rxPin 10
 #define txPin 11

 // configura un nuevo puerto serie
 SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

 void setup()  {
   // defines los modos de pin para tx, rx:
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   // configura la velocidad de datos del puerto SoftwareSerial 
   mySerial.begin(9600);
 }

 void loop() {
  if (mySerial.available()) {
    Serial.print(mySerial.read(), HEX);
    Serial.write(' '); // Pone un espacio (0x20) entre valores hexadecimales
  }
}

ya al momento de entrar en el software serial no pasa nada y ya estoy leyendo el codigo de barra
COM25 TTL.jpg

y este es el momento cuando visualizo el puerto TTL de mi modulo Bluetooth
COM17 Arduino.jpg

fijate lo logre con Python usando la liberia PySerial no me tomo mas de 10 minutos en crear un tipo de lectura unica aunque no se si es la correcta…
COM25 Python.jpg
code python.jpg

Espera un momento...

En el monitor serie de Arduino vas a 9600 bps, y en el de Python vas a 57600 bps. Cuál es la velocidad correcta entonces?

Entre toda la exótica documentación del escáner RFID (o la disque SDK), no vendrá la configuración a la que trabaja su puerto serial? Necesito saber:

  • Tasa de baudos (baud rate). Posibles opciones: wuuuuuuuuuuuuuu, son demasiadas como para enlistarlas.
  • Bits de datos (data bits). Posibles opciones: entre 5 y 8.
  • Bits de parada (stop bits). Posibles opciones: 1 o 2.
  • Bit de paridad (parity bit). Posibles opciones: par (even), impar (odd), no.

Lucario448: - Tasa de baudos (baud rate). Posibles opciones: wuuuuuuuuuuuuuu, son demasiadas como para enlistarlas. - Bits de datos (data bits). Posibles opciones: entre 5 y 8. - Bits de parada (stop bits). Posibles opciones: 1 o 2. - Bit de paridad (parity bit). Posibles opciones: par (even), impar (odd), no.

la configuracion del RMU es de 57600, 8, 1, no. lo que se dice en la SDK. Eh igual cambie los Baud a la indicada no pasa nada igual

lo que sucede es que le pongo al arduino a leer el serial port y no obtiene nada, con el ejemplo en python es que puedo leer los datos sin usar el arduino y va todo muy bien, quiero es poder decirle al Arduino Lee los datos que obtienes del modulo Bluetooth y transformalos, el codigo por lo que veo esta bien, lo que debe estar fallando es mi esquema. cambie igual mente lo que me comentaste del TX y RX, tengo una placa arduino Mega deberia probar con esa para ver que sucede?

4jay:
la configuracion del RMU es de 57600, 8, 1, no.

Problema de configuración completamente descartado. Por defecto Arduino (y el 99% de los dispositivos que se comunican por serial UART) trabaja de modo 8N1 (8 bits de datos, 1 de parada, no paridad)

4jay:
lo que sucede es que le pongo al arduino a leer el serial port y no obtiene nada, con el ejemplo en python es que puedo leer los datos sin usar el arduino y va todo muy bien

Con lo que dices + el esquema; llego a pensar que lo tienes conectado al USB, mientras el escáner lo tienes con los pines 0 y 1. Eso no se puede hacer a menos de que quites el microcontrolador de la placa.

Si la idea es usar el microcontrolador, entonces conecta escáner/módulo Bluetooth a los pines definidos en la instancia de SoftwareSerial (mySerial).

4jay:
tengo una placa arduino Mega deberia probar con esa para ver que sucede?

Si quieres; pero esta vez el otro dispositivo debe ir al par que pertenece al Serial1:

ArduinoMegaSerial1.jpg

Recuerda que TX con RX y viceversa.

Hombres Mil Gracias por la ayudaaaa..... la Solucion era que tenia los cables de TX y RX malos jajajaja en algun punto estaban quebrados...

MIL GRACIAS de verdad.... :) :) :) :) :grinning: :grinning: :grinning: :grinning: