Skip to main content

cc1101-python

This project provides an interface to the CC1101 Linux Driver to allow receiving and transmitting packets from Python.

Setup

pip3 install cc1101-python

Command Line

python3 -m cc1101 {tx,rx,config,reset}

config

Retreive the current configuration from the driver.

rx and tx print the human-readable configuration options.

rx_raw and tx_raw print the register values of the CC1101 for the current RX and TX configs.

dev_raw prints the current register values of the hardware.

reset

Clear the RX and TX configs and reset the radio hardware.

tx/rx

Transmits or receives packets.

Common Options

device

The path to a /dev/cc1101.x.x interface provided by the driver.

frequency

The frequency to receive/transmit on. Valid values are 300-348, 387-464 and 779-928 MHz.

modulation

The modulation scheme to use. Valid values are OOK, FSK_2, FSK_4, GFSK, MSK.

baud_rate

The data rate in kBaud to receive/transmit packets. Valid values are within the range 0.6-500 and depend on modulation:

Modulation Baud Rate
OOK / GFSK 0.6 - 250
2FSK 0.6 - 500
4FSK 0.6 - 300
MSK 26 - 500

--sync_word

The Sync Word to use, specified as a two or four byte hexadecimal value (e.g 0f0f). If four bytes are used, the upper and lower two bytes must be the same (e.g 0f0f0f0f)

In RX, the device searches for the specified sync word to begin reception. Set 0x00 to disable the sync word.

In TX, the sync word is preprended to each packet.

--deviation

When using an FSK modulation, sets the deviation in kHz either side of the provided frequency to use for modulation.

rx Options

packet_length

The number of bytes the radio will receive once RX is triggered, either via sync word or carrier sense threshold.

--bandwidth

Sets the receive bandwidth in kHz. Valid values are

58,67,81,101,116,135,162,203,232,270,325,406,464,541,650,812

--carrier-sense

Sets the carrier sense threshold in dB required to begin RX. Carrier sense can be set to a relative or an absolute value. When a sync word is provided, RX only begins when the carrier sense is above the threshold and the sync word has been received.

Not specifying a value disables carrier sense.

Relative values are +6, +10 and +14. These cause the radio to begin RX when the Received Signal Strength Indicator (RSSI) suddenly increases by this value. This is the easiest mode to use for basic RX.

Absolute values are -7 to 7 dB. These values cause the radio to begin RX when the RSSI exceeds the absolute value specified by --magn-target +/- the carrier-sense value. Using absolute carrier sense will likely require adjusting the --magn-target, --max-lna-gain and --max-dvga-gain experimentally until the required RSSI range is reached. --out-format rssi can be used to help find this. See Section 17.4 of the CC1101 Datasheet for examples.

--magn-target

Sets the target channel filter amplitude in dB. Valid values are:

24, 27, 30, 33, 36, 38, 40, 42

--max-lna-gain

Decreases the maximum LNA gain by approximately the specified amount in dB.

Valid values are:

0, 3, 6, 7, 9, 12, 15, 17

--max-dvga-gain

Decreases the maximum DVGA gain by approximately the specified amount in dB.

Valid values are:

0, 6, 12, 18

--block

Hold the device handle open while receiving. This prevents another process from using or reconfiguring the device, but prevents multiplexing of RX/TX on a single device between two processes.

--out-format

Set the output format.

info prints the packet received count, Received Signal Strength Indictator (RSSI) and the hexadecimal representation of each packet as it is received.

hex prints the packet as hexadecimal.

bin outputs the raw packet bytes to stdout. This is useful for piping into other tools.

rssi continually outputs the current value of RSSI.

tx Options

frequency

Frequency to transmit on. In TX mode, frequencies are by default restricted to 315/433/868/915 MHz +/- 1MHz, which allows specifying TX Power as one of the dBm values listed in TI DN013. This checking can be disabled by using the --raw flag.

tx_power

The power in dBm to use for transmission. Values must match one of the values in the appropriate frequency table of TI DN013.

packet

A sequence of bytes in hexadecimal form to transmit using the CC1101.

--raw

In --raw mode, tx_power is provided as a single byte in hexadecimal, which will be directly set in the CC1101's PATABLE. Any valid frequency value can be used.

RX Example

python3 -m cc1101 rx /dev/cc1101.0.0 433 OOK 1 64

TX Example

python3 -m cc1101 tx /dev/cc1101.0.0 433 OOK 1 1.4 0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f

Python Library

These examples show how to integrate the CC1101 into Python programs.

Receive

from time import sleep
from binascii import hexlify

from cc1101.config import RXConfig, Modulation
from cc1101 import CC1101

rx_config = RXConfig.new(frequency=434, modulation=Modulation.OOK, baud_rate=1, sync_word=0x0000, packet_length=64)
radio = CC1101("/dev/cc1101.0.0", rx_config, blocking=True)

while True:
    packets = radio.receive()

    for packet in packets:
        print(f"Received - {hexlify(packet)}")
    
    sleep(0.1)

Transmit

from binascii import unhexlify

from cc1101.config import TXConfig, Modulation
from cc1101 import CC1101

tx_config = TXConfig.new(frequency=434, modulation=Modulation.OOK, baud_rate=1, tx_power=0.1)
radio = CC1101("/dev/cc1101.0.0")

radio.transmit(tx_config, unhexlify("0f0f0f0f0f0f0f0f0f0f0f"))

Release files for cc1101-python 1.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cc1101-python 1.3.1
File Size Uploaded
cc1101-python-1.3.1.tar.gz 18.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cc1101-python 1.3.1
File Interpreter ABI Platform
cc1101_python-1.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 36.5 kB

Release files / cc1101-python-1.3.1.tar.gz

Download URL cc1101-python-1.3.1.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
418ba28405139ed5ee073ba594e9593bf9f5be17cc103c335914d9188f81b749
BLAKE2b-256 checksum
How to use checksums
e9a70d18f4e6a910210b1f3a6237015fd3f61d1e68b88ada6623e11c8b594edb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.2

Release files / cc1101_python-1.3.1-py3-none-any.whl

Download URL cc1101_python-1.3.1-py3-none-any.whl
Size 17.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
66606575757603528fa18b190d9c38477d24d7cbc9626f3f99813c227045b589
BLAKE2b-256 checksum
How to use checksums
f9886e335587f08dfb438fe3ed8265e7a6a835d37e509993d923841e4b6b4500
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.2

Release history Release notifications | RSS feed

This release

1.3.1 This release

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page