Help needed with UHF RDIF - (Wiegand / RS232)

Hi everyone!
I’m working on a little project using some UHF long range RFID readers I got from Aliexpress (link), and I’m having some issues sending and receiving commands from/to a connected arduino UNO board.

Here’s some more information about the whole setup:

  • The RFID reader supports both RS232 and Wiegand interfaces. Since Wiegand seems a little more limited, I’ve been trying to get this to run using the RS232, but I’ll accept any compelling arguments to switch to Wiegand.

  • Related connections are as follows:

  • Using softwareSerial for pins 10, 11

  • PIN 10 (arduino RX) - RS232 TX (reader output)

  • PIN 11 (arduino TX) - RS232 RX (reader input)

  • GND - RS232 GND (reader RS232 common ground)

  • After asking the manufacturer for some information, I got some poorly translated documentation and a test tool for windows that I used to check that the reader works perfectly fine.

  • I’ve attached a screenshot of the command message parameters and one sample command (reset) but here is the text just in case:

     "The physical interface is compatible with the RS – 232 specifications.
      1start bit、8 data bits、1 stop bit、no even odd check..
      
      Head    Len       Address      Cmd      Data[0…N]      Check
      0xA0    1 Byte   1 Byte        1 Byte    N Bytes         1 Byte

      Head Head of the packet, every packet starts with 0xA0.
      Len Length of the packet bytes. Starts from the third
      byte, the Head, Len bytes are exclusive.
      Address Reader’s address. The common addresses are 0 ~
      254(0xFE),255(0xFF)is the public address. The
      reader accepts the address of itself and the public
      address.
      Cmd Command byte.
      Data[0…N] Command parameters.
      Check Checksum. Check all the bytes except itself."

Message_parameters.jpg
reset_message.jpg

  • Here’s the checksum function the reader uses:
unsigned char CheckSum(unsigned char *uBuff, unsigned char uBuffLen)
{
unsigned char i,uSum=0;
for(i=0;i<uBuffLen;i++)
{
uSum = uSum + uBuff[i];
}
uSum = (~uSum) + 1;
return uSum;
}

So here is all the relevant information (I think). I’ve tried sending a reset command as a quick test (the reader should beep on reset, and I should receive a response on the serial monitor), but so far I haven’t had any luck with it. I’d appreciate any help with this :confused:

Thanks!

More stuff:
Tried this, in a futile attempt to send commands directly from the serial monitor, without success:

#include <SoftwareSerial.h>

SoftwareSerial RFID_serial(10,11); //pins 10(rx) and 11(tx) will use a softwareserial interface
byte byteRead;
byte byteRead_RFID;

void setup() {
  Serial.begin(115200);
  RFID_serial.begin(115200);  
}

void loop() {
  if (Serial.available()) {
    byteRead = Serial.read();
    RFID_serial.write(byteRead);
  }
  
  if (RFID_serial.available()) {
    byteRead_RFID = Serial.read();
    Serial.println(byteRead_RFID);
  }
  
}

Even more stuff:

Attached the documentation files (in PDF format) for the RFID reader commands.

Also I had success with a simpler RFID reader (and there are plenty of them with custom Arduino libraries), but this one is the only affordable one that will get me the range and read speed that I need for my project (several meters, and at least 66ms. read speed - In case someone wonders, those numbers checked out perfectly using the windows tool and USB connection)

YR903 UHF RFID reader module_protocol_.pdf (342 KB)

YR903communica interface protocol spec.pdf (75.1 KB)

The Arduino can not read or write RS232 levels. You need a MAX232 chip between the reader and the Arduino, to convert the RS232 levels to TTL levels.

does anyone success in connect that UHF RFID with arduino?
I really need some help