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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17d9c0521ca2bae5803399a5f32b7b21b6632b3365fa4e93bb963dd8072b1388
|
|
| MD5 |
6b61dda37bc2dd4ee2e00af1451afbd4
|
|
| BLAKE2b-256 |
9f06a1dee914f8ca2237be0011d06dd51cd863f520115ad3fe6788b2493a0a7d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac0030b6fbd2a40c271f49e0d79225592e0637dafc1580051b4cef1599478fc2
|
|
| MD5 |
6503884412cbdfce21841d92fc5b91cc
|
|
| BLAKE2b-256 |
c673a20f3da2ee0fa46d99aaca2696dce4f9e9b7b95d7e5a2cf0657bb5e368da
|