NAU7802 Driver
Project description
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: Pre-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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nau7802-0.5.2.tar.gz.
File metadata
- Download URL: nau7802-0.5.2.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90c225b5fdf91e95bfcf2e326ea4b1e73c3709f8212dc43a2ddaec17a95a60fe
|
|
| MD5 |
df6a90381fe1f9bcc56adaad2795e42c
|
|
| BLAKE2b-256 |
f1f4e569d4eaf5e352a19ca467602984e70a5df9b0b700703e46f7f88808a108
|
File details
Details for the file nau7802-0.5.2-py3-none-any.whl.
File metadata
- Download URL: nau7802-0.5.2-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46ba7ef764b27ed7f6256e2b86b7f975b6473c59224ddb449dc7b7c9667a176a
|
|
| MD5 |
41d2fe6322032c4ea64cdc87c95ce5a0
|
|
| BLAKE2b-256 |
1a8469b22be914b7ff6cd31eb1a599092af74e637e027fe2c49883f7d9146f1a
|