pamoja

Documentation

Hardware#

pamoja is a software library, so it runs on whatever its host runs on. This page is narrower and more useful than that: it lists the parts the drivers were written against, the buses and protocols the crates implement, the radios they budget airtime for, and the boards the project builds and tests on.

Nothing here is a compatibility promise. It is a record of what the code was written from, so you can tell at a glance whether a part you already have is one pamoja decodes byte for byte, one it reaches over a bus it speaks, or one you will be writing a driver for.

Where the figures come from. Every part links one document under "Read and build": the manufacturer's own datasheet, or the standard that defines the thing, or the maker's own documentation for a board. The figures on the card come from that document and nowhere else. There are no distributor listings, datasheet mirrors, or tutorial sites among them, and cargo xtask links fetches every one so a rotted link fails the build rather than sitting there looking authoritative. The exception is the handful of vendors whose sites refuse any scripted client; those entries say so in the data file, and a person opens them instead.

What the cost line means. A coarse band for a typical breakout module or board in USD, to tell a two dollar sensor from a two hundred dollar autopilot. It is not a quote, it is not a 1000-unit chip price, and it is not tracked against any vendor.

Where to buy. Each part lists two or three product pages from the makers' own stores and the larger distributors, the cheapest reputable option first, with the price each page listed on the day it was read. Those are places to buy, not sources: nothing on a card is taken from them. A workflow reads every page again each week, orders the offers cheapest first, and opens a pull request with what moved, so the day on the card is never more than a week old. A vendor whose site refuses scripted readers is priced from a listing of its page, and the card says so.

How this page stays honest. The entries are tied to the code. Adding a driver module under pamoja-sensors or pamoja-actuators without an entry here fails cargo xtask docs --check, and so does adding a LoRaWAN channel plan the page does not list.

Sensors#

Parts pamoja decodes byte for byte, each with a driver written from the datasheet linked beside it.

BME280

Bosch Sensortec

Reports humidity, pressure and temperature as raw counts plus per-chip calibration coefficients, which the driver compensates.

Interface
I2C up to 3.4 MHz, or SPI up to 10 MHz
Ranges
0 to 100 %RH, 300 to 1100 hPa, -40 to +85 °C
Accuracy
±3 %RH from 20 to 80 %RH at 25 °C, ±1.0 hPa, ±0.5 °C from 0 to 65 °C
Addresses
0x76 with SDO to ground, 0x77 with SDO to VDDIO; SDO must not float
Supply
1.71 to 3.6 V main, 1.2 to 3.6 V interface
Current
3.6 µA at 1 Hz for all three, 0.1 µA asleep
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$14.95 at Adafruit

DS18B20

Analog Devices, originally Maxim Integrated

A digital thermometer that returns Celsius over a single data line, each part carrying its own 64-bit serial code so a bus can hold many.

Interface
1-Wire, many devices on one pin
Range
-55 °C to +125 °C
Accuracy
±0.5 °C from -10 °C to +85 °C
Resolution
9 to 12 bits, user programmable
Conversion
750 ms maximum at 12 bits, halving with each bit dropped
Supply
3.0 to 5.5 V, or parasite power from the data line
Typical cost
under $5 for a breakout module or a board; the lowest listed price is US$3.95 at Adafruit

INA219

Texas Instruments

Measures the drop across an external shunt and the bus voltage, and reports current and power once its calibration register is set.

Interface
I2C, 16 addresses from two pins
Bus voltage
senses 0 to 26 V
Shunt full scale
±40, ±80, ±160 or ±320 mV by PGA setting
ADC
12-bit, selectable down to 9-bit or averaged
Registers
10 µV per shunt count, 4 mV per bus count
Supply
3 to 5.5 V, 0.7 mA typical
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$6.90 at DFRobot

ADS1115

Texas Instruments

A 16-bit delta-sigma ADC that digitises four single-ended or two differential inputs through a programmable gain amplifier.

Interface
I2C, four addresses from one pin
Resolution
16 bits
Inputs
four single-ended or two differential
Full scale
±0.256 V to ±6.144 V in six PGA steps
Rate
8 to 860 samples per second
Supply
2.0 to 5.5 V, 150 µA in continuous conversion
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$12.00 at Seeed Studio

SHT3x-DIS

Sensirion

Reports humidity and temperature as calibrated 16-bit words, each followed by a CRC-8, which the driver checks and converts with the fixed linear formulas.

Interface
I2C up to 1 MHz, with optional clock stretching
Ranges
0 to 100 %RH, -40 to +125 °C
Accuracy
typical ±2 %RH and ±0.2 °C (SHT30, SHT31), ±1.5 %RH and ±0.1 °C (SHT35)
Repeatability
0.08 to 0.21 %RH and 0.04 to 0.15 °C across the three modes, measured in 15, 6, or 4 ms
Addresses
0x44 with ADDR to logic low, 0x45 with ADDR to logic high; ADDR must not float
Supply
2.15 to 5.5 V
Current
0.2 µA idle in single-shot mode, 600 µA measuring, 1.7 µA average at one low-repeatability measurement per second
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$9.90 at Seeed Studio

SCD40 and SCD41

Sensirion

A photoacoustic NDIR CO2 sensor with a built-in humidity and temperature sensor; every word it sends carries a CRC-8 the driver checks.

Interface
I2C at 0x62, up to 100 kHz
CO2 range
0 to 40000 ppm output; specified 400 to 2000 ppm (SCD40) and 400 to 5000 ppm (SCD41)
CO2 accuracy
±(50 ppm + 5 %) for the SCD40, ±(40 ppm + 5 %) for the SCD41
Humidity and temperature
0 to 100 %RH within ±6 %RH, -10 to 60 °C within ±0.8 °C
Update interval
5 s periodic, about 30 s low power, single shot on the SCD41
Supply
2.4 to 5.5 V, 15 mA average and 175 mA peak at 3.3 V in periodic measurement
Typical cost
$20 to $60 for a breakout module or a board; the lowest listed price is US$44.95 at Adafruit

TMP117

Texas Instruments

A 16-bit digital thermometer accurate to ±0.1 °C with no calibration, with programmable alert limits, a user offset, and 48 bits of EEPROM.

Interface
I2C and SMBus, 1 kHz to 400 kHz, four addresses from one pin
Range
-55 °C to +150 °C
Accuracy
±0.1 °C from -20 °C to 50 °C, ±0.3 °C over the full range
Resolution
16 bits, 7.8125 m°C per count
Addresses
0x48 to 0x4B with ADD0 tied to GND, V+, SDA, or SCL
Conversion
15.5 ms typical one-shot, 1 s cycle with 8 averages at reset
Supply
1.7 to 5.5 V up to 70 °C, 1.8 to 5.5 V to 150 °C
Current
3.5 µA typical at a 1 Hz cycle, 150 nA in shutdown
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$11.50 at Adafruit

HDC1080

Texas Instruments

Reports humidity and temperature as 16-bit fractions of full scale with no per-chip calibration, which the driver decodes in exact integer arithmetic alongside the configuration register.

Interface
I2C, 10 to 400 kHz
Ranges
0 to 100 %RH; temperature sensor -40 to +125 °C, humidity sensor -20 to +70 °C (functional to +85 °C)
Accuracy
±2 %RH typical; ±0.2 °C typical, ±0.4 °C max from 5 to 60 °C
Resolution
14, 11, or 8 bit humidity in 6.50, 3.85, or 2.50 ms; 14 or 11 bit temperature in 6.35 or 3.65 ms
Address
fixed 0x40; manufacturer id 0x5449, device id 0x1050, 40-bit serial number
Supply
2.7 to 5.5 V; 1.3 µA average at 1 sample/s for 11-bit humidity and temperature, 100 nA asleep
Typical cost
under $5 for a breakout module or a board; the lowest listed price is US$1.46 at LCSC

OPT3001

Texas Instruments

A single-chip lux meter filtered to the human eye's response that reports illuminance as a 4-bit exponent and 12-bit mantissa, ranging itself across twelve full-scale settings.

Interface
I2C or SMBus up to 2.6 MHz, four addresses from the ADDR pin, INT pin
Range
0.01 to 83865.6 lux, 12 binary-weighted full-scale ranges or automatic ranging
Resolution
0.01 lux per LSB at the lowest range, 23-bit effective dynamic range
Accuracy
2000 lux reads 1800 to 2200 lux, 0.2 % matching between ranges, 0.2 % response at 850 nm
Conversion
100 ms or 800 ms, 720 to 880 ms in the 800 ms setting
Addresses
0x44 to 0x47 with ADDR to GND, VDD, SDA, or SCL
Supply
1.6 to 3.6 V, 1.8 µA active and 0.3 µA shutdown typical, I/O 5.5 V tolerant
Temperature
-40 to +85 °C
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$3.60 at RAKwireless

INA226

Texas Instruments

Measures the drop across a shunt and the bus voltage on either side of the load, reports current and power once calibrated, and drives an alert pin from one programmable limit.

Interface
I2C or SMBus up to 2.94 MHz, 16 addresses from two pins
Bus voltage
senses 0 to 36 V, 1.25 mV per count
Shunt full scale
±81.92 mV, 2.5 µV per count
ADC
16-bit, 140 µs to 8.244 ms per conversion, 1 to 1024 samples averaged
Accuracy
0.1 % gain error and 10 µV shunt offset, maximum
Alert
open-drain pin on a shunt, bus, or power limit, or conversion ready
Supply
2.7 to 5.5 V, 330 µA typical, 2 µA maximum powered down
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$2.66 at Mouser

BMP280

Bosch Sensortec

Reports barometric pressure and temperature as 20-bit raw counts plus per-chip calibration coefficients, which the driver compensates; the BME280 without the humidity element.

Interface
I2C up to 3.4 MHz, or SPI (3 or 4 wire) up to 10 MHz
Ranges
300 to 1100 hPa, -40 to +85 °C (full accuracy 0 to +65 °C)
Accuracy
±1.0 hPa absolute from 0 to 65 °C, ±0.12 hPa relative from 700 to 900 hPa, ±0.5 °C at 25 °C
Resolution
0.16 Pa and 0.0003 °C at ×16 oversampling; 1.3 Pa RMS noise unfiltered, 0.2 Pa with the IIR filter
Addresses
0x76 with SDO to ground, 0x77 with SDO to VDDIO; SDO must not float
Supply
1.71 to 3.6 V main, 1.2 to 3.6 V interface
Current
2.8 µA at 1 Hz forced mode, lowest power; 0.1 µA asleep
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$9.80 at Seeed Studio

Actuators#

Parts pamoja drives: a PWM generator for servos, and the step-and-direction carriers a stepper sequence walks.

PCA9685

NXP Semiconductors

A 16-channel PWM generator that produces servo and dimming pulses; each output sinks 25 mA, so load current is switched by an external driver.

Interface
I2C, up to 62 devices per bus
Channels
16, all sharing one frequency
Resolution
12-bit, 4096 steps per output
Frequency
typically 24 Hz to 1526 Hz, 200 Hz at reset
Supply
2.3 to 5.5 V, inputs and outputs 5.5 V tolerant
Drive
sinks 25 mA, sources 10 mA at 5 V; larger loads need external drivers
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$13.95 at SparkFun

ULN2003A

Texas Instruments

A Darlington array that switches the coil current directly, for the four-wire steppers the coil sequencer walks a pattern across.

Interface
seven logic inputs, one per channel
Channels
seven NPN Darlington pairs
Collector current
500 mA rated, single output
Output voltage
50 V maximum
Inductive loads
common-cathode output clamp diodes included
Typical cost
under $5 for a breakout module or a board; the lowest listed price is US$0.97 at Digi-Key

A4988

Allegro MicroSystems

A bipolar stepper driver that turns one pulse on STEP into one microstep, sequencing the coils and regulating current in hardware.

Interface
step and direction, with three mode pins
Motor supply
8 to 35 V
Output current
±2 A maximum
Steps
full, 1/2, 1/4, 1/8 and 1/16
Logic supply
3 to 5.5 V
Note
The datasheet states no continuous per-phase current against a cooling condition
Typical cost
under $5 for a breakout module or a board; the lowest listed price is US$6.95 at Adafruit

DRV8825

Texas Instruments

A bipolar stepper driver with two H-bridges and an indexer, taking step and direction down to 1/32 step.

Interface
step and direction, with three mode pins
Motor supply
8.2 to 45 V
Output current
up to 2.5 A per output at 24 V and 25 °C, with heat sinking
Steps
full, 1/2, 1/4, 1/8, 1/16 and 1/32
Decay
slow, fast or mixed
Protection
overcurrent, thermal shutdown and undervoltage lockout, reported on nFAULT
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$8.95 at M5Stack

Buses and field protocols#

The wires between a gateway and the parts above, and the framing each one carries.

I2C

NXP Semiconductors

The two-wire addressable bus that hangs sensors and peripherals off one controller; the address a chip answers on is what the gpio crate carries.

Interface
two open-drain lines, SDA and SCL
Rates
100 kbit/s standard, 400 kbit/s fast, 1 Mbit/s fast-mode plus, 3.4 Mbit/s high speed
Addressing
7-bit and 10-bit targets, which may share a bus in every speed mode
Lines
SDA and SCL, both bidirectional, pulled up and driven open-drain for wired-AND
Loading
bus capacitance, not a device count, limits how many hang on it

SPI

No standards body; described from Microchip's reference manual

A full-duplex synchronous link between a controller and one selected peripheral at a time; no standard defines it, so pin names, timing and rate come from each device's own datasheet.

Interface
four wires: data in, data out, clock, select
Signals
serial data in, serial data out, a shift clock, and an active-low select
Clock
driven by the controller, and only while there is data to move
Modes
four combinations of clock polarity and clock edge, any of which may be chosen
Rate
set by the controller's clock prescalers; no standard fixes one
Words
8 or 16 bits per transfer

Modbus RTU over RS-485

Modbus Organization

Request and reply in binary frames over a two-wire trunk, the way meters, drives and PLCs are wired along one cable.

Interface
RS-485 balanced pair, half duplex
Physical layer
a two-wire EIA/TIA-485 interface, terminated at both ends of the trunk
Devices
32 on a segment without a repeater
Addresses
1 to 247, with 0 as broadcast
Rates
9600 and 19200 bit/s required, 19200 the default; 1200 to 115200 optional
Length
1000 m at 9600 baud on AWG26 or heavier; drops no more than 20 m
Framing
address, function, data and a 16-bit CRC in at most 256 bytes; frames separated by 3.5 character times, and a gap over 1.5 discards one

CAN 2.0 and CAN FD

ISO

The multi-master vehicle bus whose identifier both labels a message and arbitrates access. The standard itself is paid, so the figures below are what its catalogue page states and what the crate implements.

Interface
differential bus
Document
ISO 11898-1:2024, edition 3, published May 2024
Scope
the data link layer and the physical coding sublayer
pamoja-can
standard 11-bit and extended 29-bit identifiers, always masked to their width
pamoja-can
classic frames up to 8 bytes, and CAN FD frames up to 64 bytes at the discrete FD lengths

SAE J1939

SAE International

The higher-layer protocol trucks, buses and off-highway machines run over CAN, defined as a set of SAE documents under one top-level recommended practice.

Interface
CAN
Top-level document
J1939_202603, revised March 2026, first issued April 2000
Structure
the top-level document describes the subordinate documents and defines the terms they share
Committee
Truck and Bus Control and Communications Network

Reaching a network that is not there: the transceivers, the channel plans they must obey, and the short-range meshes.

SX1276

Semtech

The sub-GHz LoRa and FSK transceiver on most 137 to 1020 MHz end devices, and the radio a pamoja airtime budget is computed for.

Interface
SPI
Coverage
137 MHz to 1020 MHz
Modulation
LoRa, FSK, GFSK, MSK, GMSK and OOK
Transmit power
+20 dBm at 100 mW, with a separate +14 dBm high efficiency amplifier
Sensitivity
down to -148 dBm, for a maximum link budget of 168 dB
Receive current
9.9 mA, with 200 nA register retention
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$14.95 at SparkFun

SX1262

Semtech

The later sub-GHz LoRa transceiver, covering 150 to 960 MHz with a higher power amplifier and a much lower receive current.

Interface
SPI
Coverage
150 MHz to 960 MHz, continuous
Modulation
LoRa, LR-FHSS, FSK, GFSK, MSK and GMSK
Transmit power
+22 dBm high efficiency amplifier
Sensitivity
down to -148 dBm, for a maximum link budget of 170 dB
Receive current
4.6 mA, with an integrated DC-DC converter and LDO
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$4.99 at Seeed Studio

LoRaWAN Regional Parameters

LoRa Alliance

The document that fixes the channel plan, data rates, transmit limits and maximum payload a LoRaWAN device must obey in each regulatory region.

Interface
LoRaWAN over sub-GHz LoRa
Revision cited
RP002-1.0.5, October 2025, Final
Fixes per region
channel frequencies, data rates, output power encoding, join CFList, receive windows and maximum payload
Limits
duty cycle in the dynamic-plan regions, dwell time where frequency-hopping rules apply
EU863-870
at least 24 stored channels, with 868.1, 868.3 and 868.5 MHz at DR0 to DR5 mandatory
pamoja implements nine of its plans
EU863-870, US902-928, EU433, AU915-928, CN470-510, AS923, KR920-923, IN865-867 and RU864-870

ESP-NOW

Espressif Systems

Espressif's connectionless protocol: short packets straight between Wi-Fi devices with no access point and no association step.

Interface
Wi-Fi PHY, vendor-specific action frames
Payload
250 bytes on v1.0 devices, 1470 bytes on v2.0
Default bit rate
1 Mbps
Peers
20 paired devices, of which at most 17 encrypted, 7 by default
Security
CCMP per IEEE 802.11-2012, with a 16-byte primary master key and per-peer local keys
Interfaces
sends over either the station or the SoftAP interface
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$4.99 at Seeed Studio

Boards, targets and autopilots#

Where pamoja itself runs, and what it has been built and tested against.

Raspberry Pi 5

Raspberry Pi Ltd

The gateway-class Linux board: the full std build, every transport, and the dashboard.

SoC
Broadcom BCM2712, quad-core 64-bit Arm Cortex-A76 at 2.4 GHz
Memory
LPDDR4X, in 1, 2, 4, 8 and 16 GB
Connectivity
gigabit Ethernet with PoE+ via a HAT, dual-band 802.11ac, Bluetooth 5.0
I/O
the standard 40-pin header, two USB 3.0 and two USB 2.0 ports, a UART debug port
Note
The page lists the 16 GB model at $305, above the band for the smaller ones
Typical cost
$60 to $200 for a breakout module or a board; the lowest listed price is US$110.00 at PiShop.us

Raspberry Pi Zero 2 W

Raspberry Pi Ltd

The small, low-cost Linux board, running the same std build as the Pi 5 on the same 40-pin footprint.

SoC
RP3A0, quad-core 64-bit Arm Cortex-A53 at 1 GHz
Memory
512 MB
Wireless
2.4 GHz 802.11 b/g/n, Bluetooth 4.2 and BLE, onboard antenna
I/O
HAT-compatible 40-pin header footprint, unpopulated; micro USB OTG
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$17.25 at PiShop.us

ESP32

Espressif Systems

The Wi-Fi and Bluetooth microcontroller behind most small sensor nodes, with the buses above and a CAN controller on chip.

CPU
Xtensa 32-bit LX6, single or dual core, up to 240 MHz
Memory
448 KB ROM, 520 KB SRAM, 16 KB RTC SRAM
Wireless
802.11 b/g/n up to 150 Mbit/s, Bluetooth 4.2 BR/EDR and LE
Peripherals
four SPI, two I2C, three UART, 34 GPIO
CAN
a TWAI controller compatible with ISO 11898-1
pamoja
not a CI target; Xtensa needs Espressif's own Rust toolchain
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$10.00 at Digi-Key

ArduPilot

ArduPilot Dev Team

Open autopilot firmware for copters, planes, rovers and submarines; the firmware is free, and the flight controller it runs on is what costs money.

Interface
MAVLink
Vehicles
multicopters, helicopters, fixed wing, rovers, submarines and antenna trackers
Protocol
MAVLink between ground station, flight controller and peripherals
Licence
GPL v3 or later
Verified
the SITL interop job in CI flies it in simulation against pamoja-mavlink
Typical cost
$60 to $200 for a breakout module or a board; the lowest listed price is US$130.99 at Holybro

PX4 Autopilot

Dronecode Foundation

Open autopilot firmware for multirotors, fixed wing, VTOL, helicopters and rovers, under a permissive licence; again, the board is the cost.

Interface
MAVLink
Vehicles
multirotors, fixed wing, VTOL, helicopters and rovers
Protocol
MAVLink for the ground station link
Licence
BSD 3-clause
Verified
the SITL interop job in CI flies it in simulation against pamoja-mavlink
Typical cost
$60 to $200 for a breakout module or a board; the lowest listed price is US$130.99 at Holybro

Pixhawk standard

Dronecode Foundation

The open hardware standard that fixes flight controller pin-outs, connectors and layout so boards from different vendors interchange; a board built to it is what costs money.

Interface
standardised connectors and pin-outs
Autopilot standards listed
v5X (DS-011), v6X (DS-012), v6U (DS-016) and v6C (DS-018)
Also
the connector standard (DS-009), the autopilot bus standard (DS-010) and the payload bus standard (DS-014); a smart battery standard is in draft
Note
Each fixes pin-outs, block diagrams, PCB layout guidelines and connector specifications
Typical cost
$60 to $200 for a breakout module or a board; the lowest listed price is US$130.99 at Holybro

Cortex-M4 with FPU, bare metal

Arm

The bare-metal target: CI cross-compiles every no_std crate for thumbv7em-none-eabihf, which is this core with its floating-point unit and no operating system.

Architecture
Armv7-M
Floating point
a built-in single-precision FPU, credited with 10x on single-precision operations
DSP
integrated DSP, SIMD and MAC instructions
Use cases the page names
industrial control, IoT sensors, AI and ML, audio
pamoja
the bare-metal job in CI builds pamoja-core, security, audit, update, zenoh, ros2 and mavlink for this target
Typical cost
$5 to $20 for a breakout module or a board; the lowest listed price is US$9.99 at Seeed Studio

Anything else with a driver#

The four sensors and two actuator families above are the parts pamoja decodes itself. They are not the limit of what it can talk to. Everything below the driver is a trait: implement Sensor or Actuator for your own part and the rest of the library, the profiles, the ladder, the dashboard, treats it exactly like the ones here. The sensor drivers guide and the actuator drivers guide show what that takes.

The same holds for transports. A part reachable over I2C, SPI, a serial line, RS485, or CAN is reachable through the crates listed under Buses, whether or not its decoder ships here.

Edit this page on GitHub