Qwiic_RFID_Py

follow on Twitter

SparkFun Qwiic RFID Reader

Python module for the SparkFun RFID Qwiic Reader

This module is also compatible with the following products:

This python package is a port of the existing SparkFun Qwiic RFID Reader Arduino Library

This package can be used in conjunction with the overall SparkFun qwiic Python Package

New to qwiic? Take a look at the entire SparkFun qwiic ecosystem.

Supported Platforms

The Qwiic RFID Python package current supports the following platforms:

Dependencies

This driver package depends on the qwiic I2C driver: Qwiic_I2C_Py

Documentation

The SparkFun Qwiic RFID module documentation is hosted at ReadTheDocs

Installation

PyPi Installation

This repository is hosted on PyPi as the sparkfun-qwiic-rfid package. On systems that support PyPi installation via pip, this library is installed using the following commands

For all users (note: the user must have sudo privileges):

sudo pip install sparkfun-qwiic-rfid

For the current user:

pip install sparkfun-qwiic-rfid

To install, make sure the setuptools package is installed on the system.

Direct installation at the command line:

python setup.py install

To build a package for use with pip:

python setup.py sdist

A package file is built and placed in a subdirectory called dist. This package file can be installed using pip.

cd dist
pip install sparkfun-qwiic-rfid-<version>.tar.gz

Example Use

See the examples directory for more detailed use examples.

from __future__ import print_function
import qwiic_rfid
import time
import sys

def run_example():

    print("\nSparkFun Qwiic RFID Reader Example 1")
    my_RFID = qwiic_rfid.Qwiic_RFID()

    if my_RFID.begin() == False:
        print("\nThe Qwiic RFID Reader isn't connected to the system. Please check your connection", file=sys.stderr)
        return

    print("\nReady to scan some tags!")

    while True:
        val = input("\nEnter 1 to get tag ID and scan time: ")

        if int(val) == 1:
            print("\nGetting your tag ID...")
            tag = my_RFID.get_tag()
            print("\nTag ID: " + tag)

            scan_time = my_RFID.get_prec_req_time()
            # If this time is too precise, try:
            # scan_time = my_RFID.get_req_time()
            print("\nScan Time: " + str(scan_time))

        time.sleep(0.02)

if __name__ == '__main__':
    try:
        run_example()
    except (KeyboardInterrupt, SystemExit) as exErr:
        print("\nEnding Example 1")
        sys.exit(0)

SparkFun - Start Something

Table of Contents

API Reference

qwiic_rfid

Python module for the Qwiic RFID Reader.

This python package is a port of the existing [SparkFun Qwiic RFID Arduino Library](https://github.com/sparkfun/SparkFun_Qwiic_RFID_Arduino_Library)

This package can be used in conjunction with the overall [SparkFun qwiic Python Package](https://github.com/sparkfun/Qwiic_Py)

New to qwiic? Take a look at the entire [SparkFun qwiic ecosystem](https://www.sparkfun.com/qwiic).

class qwiic_rfid.QwiicRFID(address=None, i2c_driver=None)[source]
Parameters
  • address – The I2C address to use for the device. If not provied, the default address is used.

  • i2c_driver – An existing i2c driver object. If not provided a driver object is created.

Returns

The RFID device object.

Return type

Object

begin()[source]

Initialize the operation of the Qwiic GPIO

Returns

Returns true if the initialization was successful, otherwise False.

Return type

void

change_address(new_address)[source]

Changes the I2C address of the Qwiic RFID reader

Parameters

new_address – the new address to set the RFID reader to

Return type

bool

clear_tags()[source]

Reads and clears the tags from the buffer

Return type

void - does not return anything

get_all_prec_times(time_array)[source]

Gets all times in the buffer

Parameters

time_array – list of upto 20 times the RFID tag was read from the I2C bus

Return type

void - does not return anything

get_all_tags(tag_array)[source]

Gets all the tags in the buffer

Parameters

tag_array – list of upto 20 RFID tag numbers

Return type

void - does not return anything

get_prec_req_time()[source]

Gets the time when the RFID tag was last scanned

Returns

Returns time in seconds

Return type

int

get_req_time()[source]

Gets the time when when RFID tag was last scanned

Returns

Returns time in seconds

Return type

int

get_tag()[source]

Gets the current RFID tag

Returns

Returns the RFID tag

Return type

string

is_connected()[source]

Determine if a Qwiic RFID device is connected to the system.

Returns

True if the device is connected, otherwise False.

Return type

void

class qwiic_rfid.QwiicRFID(address=None, i2c_driver=None)[source]
Parameters
  • address – The I2C address to use for the device. If not provied, the default address is used.

  • i2c_driver – An existing i2c driver object. If not provided a driver object is created.

Returns

The RFID device object.

Return type

Object

begin()[source]

Initialize the operation of the Qwiic GPIO

Returns

Returns true if the initialization was successful, otherwise False.

Return type

void

change_address(new_address)[source]

Changes the I2C address of the Qwiic RFID reader

Parameters

new_address – the new address to set the RFID reader to

Return type

bool

clear_tags()[source]

Reads and clears the tags from the buffer

Return type

void - does not return anything

get_all_prec_times(time_array)[source]

Gets all times in the buffer

Parameters

time_array – list of upto 20 times the RFID tag was read from the I2C bus

Return type

void - does not return anything

get_all_tags(tag_array)[source]

Gets all the tags in the buffer

Parameters

tag_array – list of upto 20 RFID tag numbers

Return type

void - does not return anything

get_prec_req_time()[source]

Gets the time when the RFID tag was last scanned

Returns

Returns time in seconds

Return type

int

get_req_time()[source]

Gets the time when when RFID tag was last scanned

Returns

Returns time in seconds

Return type

int

get_tag()[source]

Gets the current RFID tag

Returns

Returns the RFID tag

Return type

string

is_connected()[source]

Determine if a Qwiic RFID device is connected to the system.

Returns

True if the device is connected, otherwise False.

Return type

void

Example 1

examples/qwiic_rfid_ex1_getTag.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# !/usr/bin/env python
# ----------------------------------------------------------------
# qwiic_rfid_ex1.py
#
# Basic example that reads tag and prints ID and the time requested
# when prompted by user.
# ----------------------------------------------------------------
#
# Written by Priyanka Makin @ SparkFun Electronics, January 2021
#
# This python library supports the SparkFun Electronics qwiic 
# sensor/board ecosystem on a Raspberry Pi (and compatible) single
# board computers.
#
# More information on qwiic is at https://www.sparkfun.com/qwiic
#
# Do you like this library? Help support SParkFun. Buy a board!
# https://www.sparkfun.com/products/15191
# 
# ================================================================
# Copyright (c) 2021 SparkFun Electronics
#
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal 
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE.
#==================================================================================
# Example 1
#
# This example gets the latest tag scanned and it's associated time from the
# Qwiic RFID Reader when the user enters "1" into the terminal. The
# "scan" time is not the time of the day the RFID card was scanned but rather the
# time between when the card was scanned and when you the user requested the RFID
# tag from the Qwiic RFID Reader.

from __future__ import print_function
import qwiic_rfid
import time
import sys

def run_example():

    print("\nSparkFun Qwiic RFID Reader Example 1")
    my_RFID = qwiic_rfid.QwiicRFID()

    if my_RFID.begin() == False:
        print("\nThe Qwiic RFID Reader isn't connected to the system. Please check your connection", file=sys.stderr)
        return
    
    print("\nReady to scan some tags!")
    
    while True:
        val = input("\nEnter 1 to get tag ID and scan time: ")

        if int(val) == 1:
            print("\nGetting your tag ID...")
            tag = my_RFID.get_tag()
            print("\nTag ID: " + tag)

            scan_time = my_RFID.get_prec_req_time()
            # If this time is too precise, try:
            # scan_time = my_RFID.get_req_time()
            print("\nScan Time: " + str(scan_time))
        
        time.sleep(0.02)

if __name__ == '__main__':
    try:
        run_example()
    except (KeyboardInterrupt, SystemExit) as exErr:
        print("\nEnding Example 1")
        sys.exit(0)

Example 2

examples/qwiic_rfid_ex2_getAllTags.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# !/usr/bin/env python
# ----------------------------------------------------------------
# qwiic_rfid_ex2.py
#
# Basic example that reads RFID tags and prints all the IDs and the 
# times requested in the buffer when prompted by user.
# ----------------------------------------------------------------
#
# Written by Priyanka Makin @ SparkFun Electronics, January 2021
#
# This python library supports the SparkFun Electronics qwiic 
# sensor/board ecosystem on a Raspberry Pi (and compatible) single
# board computers.
#
# More information on qwiic is at https://www.sparkfun.com/qwiic
#
# Do you like this library? Help support SParkFun. Buy a board!
# https://www.sparkfun.com/products/15191
# 
# ================================================================
# Copyright (c) 2021 SparkFun Electronics
#
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal 
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE.
#==================================================================================
# Example 2
#
# This example code demonstrates how to get every RFID card off of the Qwiic RFID
# reader. The Qwiic RFID reader can hold up to 20 cards and their scan times at a
# time. If more than 20 are read then the first card is overwritten. If you
# expect this to be the case then getting the scan time will help to see when the 
# RFID card was scanned. A brief note about time. This time is not the time when the
# RFID card was scanned but the time between when the RFID card was scanned and it 
# was requested by you, the user. There are two time functions available for large 
# reads: getAllTimes() and getAllPrecTimes(), both return time in seconds but the
# second option gives you a time with two decimal point precision (0.00)

from __future__ import print_function
import qwiic_rfid
import time
import sys

def run_example():
    
    print("\nSparkFun Qwiic RFID Example 2\n")
    my_RFID = qwiic_rfid.QwiicRFID()

    if my_RFID.begin() == False:
        print("The Qwiic RFID Reader isn't connected to the system. Please check your connection", \
            file=sys.stderr)
        return

    print("\nReady to scan some tags!")

    all_tags = [None] * my_RFID.MAX_TAG_STORAGE
    all_times = [None] * my_RFID.MAX_TAG_STORAGE

    while True:
        val = input("\nEnter 1 to get all ID's and scan times: ")

        if int(val) == 1:
            
            my_RFID.get_all_tags(all_tags)
            my_RFID.get_all_prec_times(all_times)

            for i in range(0, my_RFID.MAX_TAG_STORAGE):
                print("\nRIFD Tag: " + all_tags[i])
                print("\nScan Time: " + str(all_times[i]))
        
        time.sleep(0.02)

if __name__ == '__main__':
    try:
        run_example()
    except (KeyboardInterrupt, SystemExit) as exErr:
        print("\nEnding Example 2")
        sys.exit(0)

Example 3

examples/qwiic_rfid_ex3_changeI2Caddress.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# !/usr/bin/env python
# ----------------------------------------------------------------
# qwiic_rfid_ex3.py
#
# Example that takes user input to change the I2C address of Qwiic RFID
# ----------------------------------------------------------------
#
# Written by Priyanka Makin @ SparkFun Electronics, January 2021
#
# This python library supports the SparkFun Electronics qwiic 
# sensor/board ecosystem on a Raspberry Pi (and compatible) single
# board computers.
#
# More information on qwiic is at https://www.sparkfun.com/qwiic
#
# Do you like this library? Help support SParkFun. Buy a board!
# https://www.sparkfun.com/products/15191
# 
# ================================================================
# Copyright (c) 2021 SparkFun Electronics
#
# Permission is hereby granted, free of charge, to any person obtaining a copy 
# of this software and associated documentation files (the "Software"), to deal 
# in the Software without restriction, including without limitation the rights 
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the Software is 
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE.
#==================================================================================
# Example 3
#
# This example code demonstrates how to change the address of the Qwiic RFID Tag
# Reader to one of your choosing. There is a set range of available addresses from
# 0x07 to 0x78, so make sure your chosen address falls within this range.

from __future__ import print_function
import qwiic_i2c
import qwiic_rfid
import time
import sys

def run_example():

    print("\nSparkFun Qwiic RFID Reader Example 3")
    my_RFID = qwiic_rfid.QwiicRFID()

    if my_RFID.begin() == False:
        print("\nThe Qwiic RFID Reader isn't connected to the system. Please check your connection", file=sys.stderr)
        return

    print("\nReady!")

    print("\nEnter a new I2C address for the Qwiic RFID Reader to use.")
    print("\nDon't use the 0x prefix. For instance if you wanted to")
    print("\nchange the address to 0x5B, you would type 5B and hit enter.")

    new_address = raw_input("\nNew Address: ")
    new_address = int(new_address, 16)

    # Check if the user entered a valid address
    if new_address > 0x08 and new_address < 0x77:
        print("\nCharacters received and new address valid!")
        print("\nAttempting to set RFID reader address...")
        
        my_RFID.change_address(new_address)
        print("\nAddress successfully changed!")
        # Check that the RFID Reader acknowledges on new address
        time.sleep(0.02)
        if my_RFID.begin() == False:
            print("\nThe Qwiic RFID Reader isn't connected to the system. Please check your connection", file=sys.stderr)

        else:
            print("\nRFID Reader acknowledged on new address!")
    
    else: 
        print("\nAddress entered not a valid I2C address")

if __name__ == '__main__':
    try:
        run_example()
    except (KeyboardInterrupt, SystemExit) as exErr:
        print("\nEnding Example 3")
        sys.exit(0)

Indices and tables