Skip to main content

Python driver for the Eccel Peeper C1 RFID reader (UART / TCP)

Project description

pepper_c1

Python driver for the Eccel Peeper C1 RFID reader made by Eccel Technology Ltd.

Supports communication over UART and TCP, and covers MIFARE Classic, MIFARE Ultralight, MIFARE DESFire, and ICODE tag families.

Installation

pip install pepper_c1

Quick start

from pepper_c1 import PepperC1, UARTTransport, TCPTransport

# UART
with PepperC1(UARTTransport('/dev/ttyUSB0', baudrate=115200)) as reader:
    print(reader.get_version())
    print(reader.get_uid().hex())

# TCP
with PepperC1(TCPTransport('192.168.1.100', 1234)) as reader:
    count = reader.get_tag_count()
    if count:
        uid = reader.activate_tag()
        print(f"Tag UID: {uid.hex()}")

MIFARE Classic example

from pepper_c1 import PepperC1, UARTTransport

with PepperC1(UARTTransport('/dev/ttyUSB0')) as reader:
    reader.activate_tag()
    block = reader.mf_read_block(4)
    print(f"Block 4: {block.hex()}")
    reader.mf_write_block(4, b'\x00' * 16)
    reader.halt()

MIFARE Ultralight example

from pepper_c1 import PepperC1, UARTTransport

with PepperC1(UARTTransport('/dev/ttyUSB0')) as reader:
    reader.activate_tag()
    page = reader.mfu_read_page(4)
    print(f"Page 4: {page.hex()}")

MIFARE DESFire example

from pepper_c1 import PepperC1, UARTTransport
from pepper_c1.commands import KEY_TYPE_AES128

with PepperC1(UARTTransport('/dev/ttyUSB0')) as reader:
    # DESFire does not need activate_tag
    reader.mfdf_select_app(bytes([0x00, 0x00, 0x00]))  # PICC master app
    # Load key into reader slot 0, then authenticate (key_no=0 on card, slot=0 in reader)
    reader.set_key(0, KEY_TYPE_AES128, bytes(16))       # all-zero AES key
    reader.mfdf_auth_aes(key_no=0, key_slot=0)
    data = reader.mfdf_read_data(file_no=1, offset=0, length=32)
    print(data.hex())

Polling / async events

from pepper_c1 import PepperC1, UARTTransport

with PepperC1(UARTTransport('/dev/ttyUSB0')) as reader:
    reader.set_polling(enable=True, interval_ms=500)
    # Async tag events accumulate in reader.async_events
    import time
    time.sleep(5)
    reader.set_polling(enable=False)
    for event in reader.async_events:
        print(f"Async event: {event.hex()}")

Error handling

from pepper_c1 import PepperC1, UARTTransport, CommandError, TransportError

try:
    with PepperC1(UARTTransport('/dev/ttyUSB0')) as reader:
        reader.get_uid()
except TransportError as e:
    print(f"Connection failed: {e}")
except CommandError as e:
    print(f"Device error: {e}")

Protocol

The Peeper C1 uses a binary framing protocol over serial or TCP:

[0xF5] [LEN_L] [LEN_H] [LEN_L^0xFF] [LEN_H^0xFF] [PAYLOAD...] [CRC_L] [CRC_H]

CRC is CCITT-16 computed over the payload only. Low-level access is available via PepperC1.send_command(cmd, data).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pepper_c1-0.1.0.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pepper_c1-0.1.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file pepper_c1-0.1.0.tar.gz.

File metadata

  • Download URL: pepper_c1-0.1.0.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.3

File hashes

Hashes for pepper_c1-0.1.0.tar.gz
Algorithm Hash digest
SHA256 17d9c0521ca2bae5803399a5f32b7b21b6632b3365fa4e93bb963dd8072b1388
MD5 6b61dda37bc2dd4ee2e00af1451afbd4
BLAKE2b-256 9f06a1dee914f8ca2237be0011d06dd51cd863f520115ad3fe6788b2493a0a7d

See more details on using hashes here.

File details

Details for the file pepper_c1-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pepper_c1-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.3

File hashes

Hashes for pepper_c1-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac0030b6fbd2a40c271f49e0d79225592e0637dafc1580051b4cef1599478fc2
MD5 6503884412cbdfce21841d92fc5b91cc
BLAKE2b-256 c673a20f3da2ee0fa46d99aaca2696dce4f9e9b7b95d7e5a2cf0657bb5e368da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page