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:
Transmit Power
I verified in both the documentation and the library source code that the transmit power is set to maximum in my implementation.
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.
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