NAU7802
A typed, register-accurate Python driver for the NAU7802 24-bit ADC load-cell amplifier.
This library provides a clean, Pythonic interface to the NAU7802 while preserving a 1:1 mapping to the hardware register model. Every register is represented as a strongly-typed dataclass, enabling safe configuration, introspection, and debugging without hiding how the device actually works.
Designed primarily for Linux SBCs (Raspberry Pi, etc.) using I²C via smbus2.
Features
- ✅ Typed register definitions (dataclasses)
- ✅ Full register-level control
- ✅ Automatic byte packing/unpacking
- ✅ Signed 24-bit and 32-bit register support
- ✅ Minimal abstraction — hardware behavior stays visible
- ✅ CLI utility for quick testing and debugging
- ✅ Python 3.11+
Philosophy
Many ADC drivers hide device behavior behind opaque APIs.
nau7802 intentionally does the opposite:
The hardware register map is the API.
Each NAU7802 register is modeled explicitly:
- Bitfields become dataclass fields
- Reads return structured objects
- Writes serialize automatically
- Multi-byte registers behave naturally
This makes debugging with a datasheet straightforward — what you see in Python matches what exists on the chip.
Typed registers prevent invalid bit configurations and make register state inspectable during debugging.
Installation
pip install nau7802[cli]
Or from source:
git clone https://github.com/jbussdieker/nau7802
cd nau7802
pip install -e .
Requirements
- Python ≥ 3.11
- Linux I²C support enabled
smbus2
Example (Raspberry Pi):
sudo raspi-config
# Enable I2C
Quick Start
import smbus2
from nau7802 import NAU7802
bus = smbus2.SMBus(1)
adc = NAU7802(bus, addr=0x2A)
adc.power_on()
adc.set_gain(7)
adc.set_channel(1)
print(adc.ctrl2)
# REG_CTRL2(chs=False, crs=3, ...)
value = adc.adco.value
print(value)
Command Line Interface
A CLI tool is installed automatically:
nau7802 --help
Power On
nau7802 power_on
Initialize Device
nau7802 init --gain 7 --crs 3
Read ADC Value
nau7802 read
Dump All Registers
nau7802 dump
Example output:
NAU7802
PU_CTRL REG_PU_CTRL(...)
CTRL1 REG_CTRL1(...)
CTRL2 REG_CTRL2(...)
ADCO 123456
REV_ID REG_REV_ID(...)
Register Model
Registers are first-class objects.
Example:
from nau7802.registers import REG_CTRL1
ctrl1 = REG_CTRL1.read(bus, 0x2A)
ctrl1.pga = 7
ctrl1.write(bus, 0x2A)
Benefits
- No manual bit masking
- Self-documenting configuration
- Datasheet alignment
- Safe serialization
Supported Register Types
Byte Registers
Automatically mapped bitfields:
REG_CTRL2(
chs=False,
crs=3,
)
Multi-Byte Registers
Signed values handled automatically:
- 24-bit registers (ADCO, OCALx)
- 32-bit registers (GCALx)
Sign extension is applied transparently.
Device API
Power Control
adc.power_on()
adc.standby()
adc.resume()
Configuration
adc.set_gain(7)
adc.set_crs(3)
adc.set_channel(1)
Reading Data
value = adc.adco.value
Architecture Overview
nau7802/
├── device/
│ ├── power.py # power sequencing
│ └── setting.py # configuration helpers
│
├── register/
│ ├── _base.py # generic register interface
│ └── _byte.py # 8-bit register specialization
│
└── registers/
└── REG_* # typed register definitions
Layering
- Register layer — serialization + hardware truth
- Device layer — safe operations & sequencing
- CLI layer — human interaction
Example: Debugging With Registers
print(adc.ctrl2)
Instead of raw hex values, you see structured state:
REG_CTRL2(chs=False, crs=3, cal_err=False, ...)
Development
Install dev dependencies:
pip install -e .[dev]
Type checking:
mypy src/
Status
Development Status: Alpha
The API may change as hardware behavior and ergonomics are refined.
Contributing
Issues and pull requests are welcome:
https://github.com/jbussdieker/nau7802/issues
License
MIT License
Author
Joshua B. Bussdieker jbussdieker@gmail.com
Metadata
Release files for nau7802 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nau7802-0.7.0.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nau7802-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.8 kB
Release files / nau7802-0.7.0.tar.gz
| Download URL | nau7802-0.7.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
266aec6191051f994b8fac8119f6e4c43a072ed2299c4b58cf8ba270a3707440
|
|
BLAKE2b-256 checksum How to use checksums |
f5093462bb4a7ae1b7dc912e720ee637c2f3fcd4ffcca7ed3cbe474bb166f3f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / nau7802-0.7.0-py3-none-any.whl
| Download URL | nau7802-0.7.0-py3-none-any.whl |
|---|---|
| Size | 14.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9f433e8a2e7947715de5205282b8b178156d58ce92c51247fbdbbf41c19f129
|
|
BLAKE2b-256 checksum How to use checksums |
183470f720b89797175289411cf50d6e15e2d72773a6b8219d21bd2a53619e7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|