🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    UHF-RFID JRD-4032 – Short Reading Distance Issue

    Modules
    1
    1
    8
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      IotHobbyist
      last edited by

      Dear M5Stack Community,

      I recently purchased the JRD-4032 UHF-RFID modules from M5stack store and am currently using one in a project based on a standard ESP32 (Arduino IDE) together with your official UHF-RFID library.

      At the moment, I am experiencing significantly lower reading distances than specified in your documentation. I would greatly appreciate your support in resolving this issue, as I am working under time constraints due to project deadlines.

      Current Setup:

      • Controller: Standard ESP32
      • RFID Module: JRD-4032 UHF-RFID
      • Development Environment: Arduino IDE
      • Library: Official M5Stack UHF-RFID library
      • Main functions used:
        • EPC scanning (pollingOnce and pollingMultiple)
        • Memory read (readCard)
        • Memory write (writeCard)
        • (and of course other initializing functions and the select function for the readCard and writeCard)

      Observed Reading Distance:

      • With included M5Stack UHF tags: approx. 40 cm maximum
      • With third-party Class Gen1 tags (860–960 MHz): approx. 50 cm maximum (Link: https://www.amazon.de/-/en/860-960MHz-Warehouse-Parking-Logistics-Applications/dp/B07H94DGC2?th=1)

      This is considerably below the 1.5–2 m stable range stated in the documentation.

      Troubleshooting Steps Taken:

      1. Transmit Power

        I verified in both the documentation and the library source code that the transmit power is set to maximum in my implementation.

      2. Frequency Consideration

        I understand from your FAQ that the antenna frequency is fixed at 922 MHz. Since I am currently only testing and have not modified the frequency in software, both hardware and software should still be operating at 922 MHz.

      3. Power Supply Investigation

        • Initial setup: RFID module powered directly from the ESP32 (3.3V).

          → Reading distance: approx. 30 cm or less

        • Second setup: External stable power supply (separate regulated source). (Circuit schema below)

          → Reading distance improved to 40–50 cm

      This suggests that insufficient current may have been affecting performance initially. However, even with a dedicated external power source, the reading distance remains far below the expected range.

      Could you please advise:

      • What current and voltage specifications are required for optimal performance?
      • Whether additional hardware adjustments (e.g., antenna matching, grounding considerations) are necessary?
      • If there are recommended configuration settings for EU operation that may improve range?

      Additionally, I would like to clarify:

      Does the achievable reading distance differ depending on the function used?

      • EPC scan only (pollingOnce / pollingMultiple)
      • Reading user memory (readCard)
      • Writing user memory (writeCard)
      #include <Arduino.h>
      #include "UNIT_UHF_RFID.h"
      
      Unit_UHF_RFID uhf;
      String info = "";
      
      // UART pins for ESP32
      #define RFID_TX_PIN 16
      #define RFID_RX_PIN 17
      
      void setup() {
          // USB Serial Monitor
          Serial.begin(115200);
          delay(1000);
          Serial.println("ESP32 UHF RFID starting...");
      
          // Start RFID module
          uhf.begin(&Serial2, 115200, RFID_TX_PIN, RFID_RX_PIN, false);
      
          // Check module version
          while (true) {
              info = uhf.getVersion();
              if (info != "ERROR") {
                  Serial.print("RFID Version: ");
                  Serial.println(info);
                  break;
              }
              Serial.println("Waiting for RFID module...");
              delay(500);
          }
      
          // Set TX power
          uhf.setTxPower(2600);
          Serial.println("RFID initialized successfully");
      }
      
      uint8_t write_buffer[] = {0xab, 0xcd, 0xef, 0xdd};
      uint8_t read_buffer[4] = {0};
      
      void loop() {
          Serial.println("\nPolling once...");
          uint8_t result = uhf.pollingMultiple(100);
          Serial.print("Scan result: ");
          Serial.println(result);
      
          if (result > 0) {
              for (uint8_t i = 0; i < result; i++) {
                  Serial.print("PC: ");
                  Serial.println(uhf.cards[i].pc_str);
      
                  Serial.print("RSSI: ");
                  Serial.println(uhf.cards[i].rssi_str);
      
                  Serial.print("EPC: ");
                  Serial.println(uhf.cards[i].epc_str);
      
                  Serial.println("----------------------");
              }
      
              // Select first card
              Serial.println("Selecting first tag...");
              if (uhf.select(uhf.cards[0].epc)) {
                  Serial.println("Select OK");
              } else {
                  Serial.println("Select ERROR");
              }
      
              Serial.print("Selected EPC: ");
              Serial.println(uhf.selectInfo());
      
              // Write data
              Serial.println("Writing data...");
              if (uhf.writeCard(write_buffer, sizeof(write_buffer), 0x04, 0, 0x00000000)) {
                  Serial.println("Write OK");
              } else {
                  Serial.println("Write ERROR");
              }
      
              // Read data
              Serial.println("Reading data...");
              if (uhf.readCard(read_buffer, sizeof(read_buffer), 0x04, 0, 0x00000000)) {
                  Serial.println("Read OK");
                  Serial.print("Data: ");
                  for (uint8_t i = 0; i < sizeof(read_buffer); i++) {
                      Serial.printf("%02X ", read_buffer[i]);
                  }
                  Serial.println();
              } else {
                  Serial.println("Read ERROR");
              }
          }
      
          delay(100);
      }
      

      I am using this library:
      https://github.com/m5stack/M5Unit-UHF-RFID/tree/master

      Circuit 2.jpg

      1 Reply Last reply Reply Quote 0
      • First post
        Last post