Skip to main content

Python runtime and flashing tools for FlexiTac tactile sensors

Project description

flexitac

Python interface for FlexiTac tactile sensors. Allows you to easily flash Arduino firmware and read framed sensor data over serial.

Defaults target the standard FlexiTac 12x32 sensor (12 rows wired to mux channels 4-15). Override --rows, --cols, and --mux-offset for variants.

Install

# recommended
uv sync            # core deps only
uv sync --extra examples  # include matplotlib for the heatmap CLI
uv sync --extra dev       # dev tooling (ruff, mypy, pytest)

# or with pip
pip install flexitac
pip install 'flexitac[examples]'  # include matplotlib

Reading frames

from flexitac import FlexiTacSensor

with FlexiTacSensor("/dev/ttyUSB0") as sensor:  # rows=12, cols=32 by default
    for frame in sensor:
        print(frame.normalized.shape, frame.normalized.max())

sensor.read() returns a FlexiTacFrame(seq, timestamp_s, raw, normalized). The first read auto-calibrates by collecting init_frames (default 30) and storing the per-pixel median as the baseline. Call sensor.calibrate() to recalibrate.

CLI tools

All CLI commands are installed as entry points:

flexitac-stream  --port /dev/ttyUSB0               # stream frames & print stats
flexitac-heatmap --port /dev/ttyUSB0               # live matplotlib heatmap
flexitac-flash                                      # flash firmware (auto-detects board)
flexitac-find-port                                  # identify sensor port by unplug

# with uv (no install needed)
uv run flexitac-stream  --port /dev/ttyUSB0
uv run flexitac-heatmap --port /dev/ttyUSB0

flexitac-find-port

Not sure which /dev/tty* your sensor is on? Run:

flexitac-find-port

It snapshots ports, asks you to unplug the sensor, then reports whichever port disappeared.

flexitac-stream

Stream frames and print FPS / signal stats:

flexitac-stream --port /dev/ttyUSB0 --frames 3000
frame=    10 fps=  85.3 raw_max=104 norm_max=0.000
frame=    20 fps=  87.1 raw_max=109 norm_max=0.123

What to check:

  • fps stabilizes near your expected rate (~100+ fps for a 12x32 sensor at 2 Mbps). If it's 0 or you get TimeoutError, the firmware isn't sending framed data -- confirm --rows/--cols/--baud match what you flashed.
  • raw_max is in [0, 255] and changes when you press the sensor. A flat 0 or flat 255 indicates a wiring issue, not a flashing issue.
  • norm_max rises toward 1.0 under contact and stays near 0 at rest.

flexitac-heatmap

Live heatmap visualization (requires matplotlib -- install with the examples extra):

flexitac-heatmap --port /dev/ttyUSB0

Press the sensor pad -- bright spots should track your touch.

flexitac-flash

Requires arduino-cli. First-time setup:

brew install arduino-cli
# or use the upstream install script:
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh

# then install the Arduino AVR core
arduino-cli core update-index
arduino-cli core install arduino:avr  # AVR core for Uno/Nano/Mega/etc.
# auto-detects the port + FQBN if exactly one Arduino is plugged in
flexitac-flash

# override geometry / wiring for non-standard sensors
flexitac-flash --rows 16 --cols 32 --mux-offset 0

# if unable to autodetect, pass --port and --fqbn explicitly:
flexitac-flash --port /dev/ttyUSB0 --fqbn arduino:avr:uno

Defaults: rows=12, cols=32, baud=2000000, mux-offset=4 (standard FlexiTac 12x32 sensor wired to mux channels 4-15). The firmware is generated from flexitac/firmware/template.ino by substituting ROW_COUNT, COLUMN_COUNT, BAUD_RATE, and MUX_CHANNEL_OFFSET. To customize pin assignments, edit the template directly.

Wire protocol

Each frame: marker 0xAA 0x55 followed by rows * cols uint8 ADC samples, streamed continuously at the configured baud rate.

Development

uv sync --extra dev

make format         # ruff format + autofix
make static-checks  # ruff + mypy
make test           # pytest

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

flexitac-0.2.2.tar.gz (14.9 kB view details)

Uploaded Source

File details

Details for the file flexitac-0.2.2.tar.gz.

File metadata

  • Download URL: flexitac-0.2.2.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for flexitac-0.2.2.tar.gz
Algorithm Hash digest
SHA256 35b2f66235c2c5dcdf14b95870f315ef6c7f192ed8095af774bfab7d8191b0f0
MD5 6e1d1bdcba8b59cd56d0176f1eb8b953
BLAKE2b-256 e9b1f3049cd42787a731fe64cdea3a07236e27fefd7bbbb739a4f859ce48e531

See more details on using hashes here.

Provenance

The following attestation bundles were made for flexitac-0.2.2.tar.gz:

Publisher: publish.yml on WT-MM/PyFlexiTac

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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