Skip to content
Cart

RFID Reader to the micro:bit Module

Parallax RFID Reader Serial (#28140) + micro:bit

The Parallax RFID Reader Serial (#28140) can interface with a micro:bit using two GPIO connections: one for receiving serial data and one for enabling the RFID reader. This example uses micro:bit MicroPython with the tag's ID displayed on the micro:bit's LED matrix and printed to the computer over USB. Note: this is an AI-generated project, and I'm awaiting testing from the community before considering it final. 

1. Hardware requirements

The RFID Reader Serial operates at 5 V and communicates at 2400 baud. The micro:bit uses 3.3 V logic, so the reader's serial output must be level-shifted before connecting to the micro:bit.  

Component

Quantity

Parallax RFID Reader Serial (#28140)

1

micro:bit Module

1

125 kHz EM4100-compatible RFID tag

1

10 kΩ resistor

1

20 kΩ resistor

1

Regulated 5 V power supply (from the I/O Edge)

1

Breadboard and jumper wires

As needed

2. Connection schematic

RFID reader pin

Connect to

Purpose

1 — VCC

External +5 V

Reader power

2 — /ENABLE

micro:bit P0

LOW enables reader

3 — SOUT

10 kΩ to P1, with 20 kΩ from P1 to GND

Serial data, level-shifted

4 — GND

Supply GND and micro:bit GND

Common ground


The resistor divider reduces a nominal 5 V serial signal to approximately 3.33 V. It is important not to connect the reader's SOUT directly to P1 or connect 5 V to the micro:bit's 3V pin.

3. RFID communication protocol

The reader transmits a 12-byte message at 2400 baud, 8N1:

0x0A

1 byte

Tag ID

0F0184F07A

10 ASCII characters

Stop

0x0D

1 byte

The 10 ASCII characters represent the unique tag identifier. They are not binary data. 

4. MicroPython program

Open the micro:bit Python Editor, paste this program, and transfer it to the micro:bit.

from microbit import *

# Parallax RFID Reader Serial #28140
# P0 = Reader /ENABLE (active LOW)
# P1 = Serial receive through voltage divider
# P2 = UART transmit (not connected)

uart.init(baudrate=2400, bits=8,
          parity=None, stop=1,
          tx=pin2, rx=pin1)

# Enable the RFID reader
pin0.write_digital(0)

START = 0x0A
STOP = 0x0D

tag_data = bytearray()
receiving = False
last_tag = ""

display.show(Image.YES)
sleep(1000)
display.clear()

print("Parallax RFID Reader Ready")

while True:
    data = uart.read()

    if data:
        for b in data:
            if b == START:
                tag_data = bytearray()
                receiving = True

            elif b == STOP and receiving:
                receiving = False

                if len(tag_data) == 10:
                    tag = bytes(tag_data).decode("ascii")

                    # Accept only hexadecimal tag IDs
                    valid = all(
                        c in "0123456789ABCDEFabcdef"
                        for c in tag
                    )

                    if valid and tag != last_tag:
                        last_tag = tag
                        print("RFID Tag:", tag)
                        display.scroll(tag, delay=100)

            elif receiving:
                if len(tag_data) < 10:
                    tag_data.append(b)
                else:
                    receiving = False

    sleep(10)

Expected operation

  1. Power the RFID reader from 5 V and connect the micro:bit by USB.

  2. The micro:bit briefly displays a check mark when initialized.

  3. Hold a compatible RFID card or key fob near the reader's antenna.

  4. The reader transmits the tag's ID to micro:bit P1.

  5. The micro:bit scrolls the tag ID on its LED display and prints it to the USB serial terminal.

Example output:

Parallax RFID Reader Ready
RFID Tag: 0F0184F07A
RFID Tag: 1A003B72C9

The program suppresses repeated display of the same tag until a different valid tag is detected. You can change that behavior by removing and tag != last_tag from the condition.

5. A few implementation notes

Power and enable: The reader's /ENABLE input is active LOW. Setting P0 LOW enables continuous reading. Setting P0 HIGH disables the antenna. The reader recognizes 3.3 V as a HIGH logic level according to its published electrical specifications.

USB debugging: MicroPython's print() output goes to the computer over USB, independently of the reader's UART input.

Compatible tags: The #28140 reads 125 kHz EM4100-family tags. It will not read the 13.56 MHz NFC tags commonly used by smartphones.

Security: These read-only identifiers can be copied or emulated, so this basic arrangement is suitable for learning and identification rather than high-security access control.

Further development: A straightforward next exercise would be storing several authorized tag IDs in a Python list, then having the micro:bit display a check mark for a recognized tag or an X for an unrecognized tag.

The Parallax hardware reference is available here: RFID Reader #28140 documentation.

This provides a practical starting point for a Parallax Learn curriculum activity combining RFID identification, serial communication, voltage-level interfacing, and Python programming. The wiring and code are based on the published specifications but have not been bench-tested with the physical hardware.

Previous Post Next Post

Leave A Comment