Once you've finished setting up your Trinkey with CircuitPython and have it plugged into your computer and the Tiny Code Reader, you can access the code and necessary libraries by downloading the Project Bundle.
To do this, click on the Download Project Bundle button in the window below. It will download to your computer as a zipped bundle.
# SPDX-FileCopyrightText: 2023 Pete Warden # SPDX-License-Identifier: Apache-2.0 # # Example of accessing the Tiny Code Reader from Useful Sensors on a Trinkey # using CircuitPython. See https://usfl.ink/tcr_dev for the full developer guide. import struct import time import board import usb_hid from adafruit_hid.keyboard import Keyboard from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS # The code reader has the I2C ID of hex 0c, or decimal 12. TINY_CODE_READER_I2C_ADDRESS = 0x0C # How long to pause between sensor polls. TINY_CODE_READER_DELAY = 0.2 TINY_CODE_READER_LENGTH_OFFSET = 0 TINY_CODE_READER_LENGTH_FORMAT = "H" TINY_CODE_READER_MESSAGE_OFFSET = TINY_CODE_READER_LENGTH_OFFSET + \ struct.calcsize(TINY_CODE_READER_LENGTH_FORMAT) TINY_CODE_READER_MESSAGE_SIZE = 254 TINY_CODE_READER_MESSAGE_FORMAT = "B" * TINY_CODE_READER_MESSAGE_SIZE TINY_CODE_READER_I2C_FORMAT = TINY_CODE_READER_LENGTH_FORMAT + TINY_CODE_READER_MESSAGE_FORMAT TINY_CODE_READER_I2C_BYTE_COUNT = struct.calcsize(TINY_CODE_READER_I2C_FORMAT) i2c = board.I2C() # Wait until we can access the bus. while not i2c.try_lock(): pass # For debugging purposes print out the peripheral addresses on the I2C bus. # 98 (0x62 in hex) is the address of our person sensor, and should be # present in the list. Uncomment the following three lines if you want to see # what I2C addresses are found. # while True: # print(i2c.scan()) # time.sleep(TINY_CODE_READER_DELAY) # Create a keyboard device so we can send the screen lock command. keyboard = Keyboard(usb_hid.devices) layout = KeyboardLayoutUS(keyboard) last_message_string = None last_code_time = 0.0 while True: read_data = bytearray(TINY_CODE_READER_I2C_BYTE_COUNT) i2c.readfrom_into(TINY_CODE_READER_I2C_ADDRESS, read_data) message_length, = struct.unpack_from(TINY_CODE_READER_LENGTH_FORMAT, read_data, TINY_CODE_READER_LENGTH_OFFSET) message_bytes = struct.unpack_from(TINY_CODE_READER_MESSAGE_FORMAT, read_data, TINY_CODE_READER_MESSAGE_OFFSET) if message_length > 0: message_string = bytearray(message_bytes)[0:message_length].decode("utf-8") is_same = (message_string == last_message_string) last_message_string = message_string current_time = time.monotonic() time_since_last_code = current_time - last_code_time last_code_time = current_time # Debounce the input by making sure there's been a gap in time since we # last saw this code. if (not is_same) or (time_since_last_code > 1.0): print(message_string) try: layout.write(message_string) except ValueError as e: pass layout.write("\n")
Upload the Code and Libraries to the Trinkey
After downloading the Project Bundle, plug your Trinkey into the computer's USB port with a known good USB data+power cable. If your computer only has USB C ports, you will need a USB A to C adapter. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called CIRCUITPY. Unzip the folder, and copy the following items from the CircuitPython 8.x folder to the Trinkey's CIRCUITPY drive.
- lib folder
- code.py
Your Trinkey CIRCUITPY drive should look like this after copying the lib folder and the code.py file.
Text editor powered by tinymce.