The CC1101 Wireless RF Transceiver is a wireless transceiver designed for low power wireless applications, capable of reliable transmissions both short and long range. In this guide, we’ll be going over the basics of how the 433 MHz CC1101 RF transceiver works and provide sample code to help get you started.
Features:
- Input voltage - 1.8-3.6V. 3.3V recommended for best performance.
- Maximum transmit power - +10 dBm (10 mW)
- Operating frequency - The CC1101 chip supports multiple ISM bands including 315, 433, 868 and 915 MHz. Common versions of the CC1101 transceiver kits use a SMA antenna tuned to different frequencies. Here we’ll be referring to the 433 MHz version. When operating at 433 MHz, certain regulations must be followed.
- Modulation Support - Supports OOK, ASK, 2-FSK, GFSK, and MSK modulation schemes.
- Maximum transfer speed - 500kbps
- Error detection - CRC error detection and built-in hardware address multipoint communication control
- Signal monitoring - RSSI and carrier sense functions for improved network stability.
- Transmission distance - The RF module is capable of up to 1km of transmission assuming perfect conditions, including line of sight, but is capable of 200-500 metres with minimal obstructions.
Hardware Overview:

- GND - Ground
- VCC - Power input (3.3V)
- GDO0 - General digital output
- CSN - Chip select.
- SCK - SPI clock line
- MOSI - Digital input
- MISO - Digital output
- GPO2 - Second digital output
Important: The CC1101 is a 3.3V only device. Both VCC and all I/O pins are not 5 V tolerant. Supplying 5 V to any pin will permanently damage the chip.
When using a 5V microcontroller (Arduino Uno/Nano/Mega), you must:
- Power the CC1101 from a 3.3 V regulator (or the board’s 3.3 V rail).
- Use logic level shifters for the SPI lines.
The MOSI, MISO, SCK, and CSN pins form the standard 4-wire SPI interface used to configure the chip and exchange packets. GDO0 and GDO2 are programmable outputs commonly used for packet received or transmit complete interrupts.
All C++ examples in this guide run without modification on Arduino, ESP32, Raspberry Pi Pico, STM32 and other platforms, only the pin assignments need to be changed to suit your board.
Packet Structure Basics:
Messages sent using the transceiver are stored in pieces of data called packets. These packets are made up of several parts, which are used by the receiver to better lock onto the signal, identify valid data (filtering noise), and detect errors. The overall structure of the packet can be adjusted but the order and length in bits of the data must be consistent. Packets contain the following data:
- Preamble - Short sequence of bits sent at the beginning of every transmission. It allows the receiver to detect that a signal is present and synchronise with the incoming data stream
- Sync word - Follows the preamble and acts as a unique identifier for the transmission. This helps the receiver determine when a valid packet begins and ignore unrelated RF noise.
- Address byte - This allows for the receiver to only accept packets addressed to it. This is optional but important as it can reduce issues caused by other devices using the same frequency, such as RC toys, garage remotes, older car key fobs, etc.
- Payload - The actual data being transmitted. The data can be fixed or variable depending on configuration. There are limits to the size but generally enough for simple commands.
- CRC - Used to verify that the received packet has not been corrupted.
Figure – Example CC1101 packet structure showing preamble, sync word, payload, and CRC.
Source An 868 MHz 7.5 µW wake up receiver with -60 dBm sensitivity. Scientific figure on ResearchGate. Available from ResearchGate
Libraries & Setup:
For code examples and practical use of the CC1101 transceiver module, we’ll be using the library made by pkarsy on github. This library supports multiple modulation modes (ASK/OOK, 2-FSK, GFSK, 4-FSK, MSK) and a wide frequency range, which is dependent on the internal crystal and antenna used (300-348 MHz, 387-464 MHz, 779-928 MHz). While this library is capable of more advanced applications, such as different modulations, custom packet formats and power tuning, we’ll be using a minimal “hello world” example.
Installing the Library
- Download the zip file by clicking here
- Open your IDE of choice. We’ll be using Arduino IDE.
- Import the library. In Arduino IDE, click sketch > Include Library > Add .ZIP Library… Click on the previously downloaded .zip file and click open. The library should then be uploaded to your IDE.
- Open the HelloWorld example within the CC1101 library. In the Arduino IDE, this can be found by clicking File > Examples then scroll down to the Examples from Custom Libraries section and look for CC1101.
- Once located the example files, open and modify the pin assignments in the Receive and Transmit files to suit your board.
- Upload the updated Receive file to one microcontroller and Transmit to the other. Once done so, the program should automatically run.
Improving Range & Reliability:
Even though the CC1101 is capable of long range communications, real world performance depends heavily on antenna quality, power settings, interference and hardware layout. We’ve conducted a list of simple, but effective ways to improve range and stability.
- Use a properly tuned antenna - The most important factor towards improving range and reliability is to use a correctly tuned antenna for your required frequencies. The CC1101 module is generally capable of 300-900 MHz, however most retail modules include an antenna usually tuned for 433 MHz or 915 MHz. Using an antenna tuned for a different frequency range can provide poor performance, leading to worse experience.
- Avoid long jumper wires - SPI is sensitive to noise. Wires longer than about 10 to 15 cm can cause misreads in some setups. In our testing, we originally used 20cm ribbon cables to test different libraries but experienced errors when reading from the module. Switching to separated 10cm jumper wires alleviated this issue.
- Increase transmit power - Adjusting the output power can improve range but also increases current draw. This can reduce battery life in battery powered applications.
- Lower the data rate - Slower data rates provide longer range because the receiver has an easier time keeping the signal locked. For long distance, data rates between 1 kbps and 10 kbps usually give the best performance.
- Use GFSK or 2-FSK modulation for stability - OOK and ASK are simple but more sensitive to noise. FSK based modes provide better reliability in poor environments.
- Keep the module away from noise sources - DC motors, switching power supplies, WiFi modules and high current traces can all affect RF performance. Try to keep the CC1101 physically separated from noisy components and use different power sources when possible.
Security & Safe Use:
The RF module operates within the ISM bands, meaning anyone can receive or transmit on the same frequency as the module operates on within that band. When using the CC1101 RF module, assume that communication is not private or secure, unless you implement strong encryption yourself.
Security Considerations:
- No build in encryption - The CC1101 does not provide hardware-level encryption or authentication. Sensitive data should be encrypted in software before transmission.
- Transmission restrictions - Continuous transmission is not allowed on 433 MHz ISM bands. Devices should transmit in short bursts with pauses between transmissions to remain compliant.
- Address filtering - The CC1101 supports hardware packet filtering by address. This prevents devices from processing packets not intended for them, reducing accidental interference.
- CRC checking - CRC verification rejects corrupted packets caused by noise. CRC does not prevent an attacker or another device from sending a valid but incorrect payload. It only confirms that the packet arrived intact.
- Regulatory compliance - Even though the module is licence-free in most regions, including Australia, it is subject to power limits and duty cycle restrictions. Operating outside these limits may violate local laws. In Australia, the limit is 25 mW of transmit power.
With all of the information above, you now have everything you need to begin your RF journey! You can purchase the CC1101 RF transceiver by clicking here. We recommend you purchase a pair of these transceivers so you can test both transmitting and receiving.