Skip to content
IEEE 802.15.4 ZigBee Transceiver
Branch: maint-3.8
Clone or download
Latest commit 7b5067b Jun 6, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
apps adapt script to new flow graph name Apr 3, 2015
cmake port to 3.8 Jun 6, 2019
contiki contiki example: update Apr 11, 2019
examples port to 3.8 Jun 6, 2019
grc port to 3.8 Jun 6, 2019
include/ieee802_15_4 port to 3.8 Jun 6, 2019
lib port to 3.8 Jun 6, 2019
python port to 3.8 Jun 6, 2019
swig port to 3.8 Jun 6, 2019
utils add util scripts Jun 25, 2013
.gitignore update gitignore Dec 17, 2015
CMakeLists.txt port to 3.8 Jun 6, 2019
COPYING update to GNU Radio v3.6 Mar 5, 2013 manifest debugging... Apr 9, 2015 update readme Jun 6, 2019


This is an IEEE802.15.4 O-QPSK transceiver for GNU Radio, based on Thomas Schmid's implementation.


Like GNU Radio, this module uses master and maint branches for development. These branches are supposed to be used with the corresponding GNU Radio branches. This means: the maint-3.7 branch is compatible with GNU Radio 3.7, maint-3.8 is compatible with GNU Radio 3.8, and master is compatible with GNU Radio master, which tracks the development towards GNU Radio 3.9.


  • The O-QPSK PHY encapsulated in a hierarchical block.
  • The CSS PHY, also encapsulated in a hierarchical block (Limitation: Packets need to have a fixed length).
  • A block that implements the Rime communication stack. Rime is a lightweight communication stack designed for Wireless Sensor Networks and is part of the Contiki Operating System.
  • A transceiver flow graph with USRP <-> PHY <-> MAC <-> Network layer (Rime) <-> UDP Socket / APP which resembles pretty well the ISO/OSI structure.
  • A sample application which visualizes sensor values. The application shows how easy it is to connect an external program to the flow graph by using Socket PDU blocks.
  • An IEEE 802.15.4 and Rime dissector for Wireshark.

Some interesting properties:

  • Packets can be piped to Wireshark.
  • The complete physical modulation is done with plain GNU Radio blocks.
  • It is interoperable with TelosB sensor motes.
  • It is interoperable with Contiki.
  • It uses a block to tag packet bursts with tx_sob and tx_eob tags. This tags are understood by the UHD blocks and allow fast switching between transmission and reception.

You can find the firmware that I used to test interoperability with TelosB motes in the contiki folder. The firmware is based on Contiki v2.6. There is another README file in the Contiki folder that describes how to compile and use the firmware.


  • GNU Radio

  • gr-foo (Wireshark Connector, Packet Pad and Burst Tagger blocks)

  • python-matplotlib (if you want to run the GUI sample application)
    sudo apt-get install python-matplotlib


Please see for installation instructions.


Open the examples/transceiver_*.grc flow graph with gnuradio-companion and check if all blocks are connected. Enable either the UHD blocks to interface with real hardware or the Packet Pad block to loop back the samples. Open some Rime connections and connect messages sources or Socket PDUs. You can easily connect to the Socket PDU blocks with netcat. Netcat can be started for example with

nc -u localhost 52001

There are also startup scripts in the apps folder.

Have fun!

You can’t perform that action at this time.