Blog

HX711 Load Cell Amplifier Module – Complete Guide

Load Cell Amplifier

HX711 Load Cell Amplifier Module

24-Bit Precision ADC for Weight & Force Sensing

A load cell is a metal bar with strain gauges bonded to it, wired into a Wheatstone bridge configuration - when weight bends the bar by a genuinely microscopic amount, the strain gauges' resistance shifts by a similarly tiny fraction, producing an output signal in the microvolt-to-millivolt range that a standard microcontroller ADC, with roughly 10-12 bits of usable resolution and no dedicated amplification, simply cannot resolve usefully on its own. The HX711 exists specifically to solve this: it combines a fixed-gain instrumentation amplifier - selectable 32x, 64x, or 128x gain depending on which input channel you use - with a 24-bit ADC in one chip, so it can pick up that faint bridge signal and convert it into a clean, high-resolution digital reading. It communicates over a simple 2-wire synchronous serial interface (clock plus data) rather than I2C or SPI, and because raw HX711 output is a relative ADC count rather than a calibrated weight, your code needs a one-time calibration step - reading a known reference weight - to convert those raw counts into actual grams or kilograms.

24-bit
ADC Resolution
10 or 80 SPS
Sample Rate
32x / 64x / 128x
Gain

Key features

24-Bit ADC Resolution

Resolves the microvolt-level signals a load cell bridge produces.

Selectable Gain Channels

128x or 64x gain on channel A, 32x on channel B.

Simple 2-Wire Interface

Clock and data only - no I2C address or SPI chip-select pin needed.

Low Noise, High Precision

Onboard amplification minimizes signal loss before conversion.

Low Power Consumption

Draws under 1.5mA, suitable for battery-powered scales.

Wide Compatibility

Works with virtually any 4-wire Wheatstone-bridge load cell.

Technical specifications

Supply Voltage 2.6V – 5.5V
ADC Resolution 24-bit
Sample Rate 10 SPS or 80 SPS (selectable)
Gain (Channel A) 128x or 64x
Gain (Channel B) 32x (fixed)
Interface 2-wire synchronous serial (clock + data)
Operating Current <1.5 mA
Input Type 4-wire Wheatstone bridge load cell
Package Breakout module with load-cell screw terminal

Pinout

PinFunction
VCC 2.6V – 5.5V power supply
GND Ground
DT Serial data output
SCK Serial clock input
E+ / E- / A+ / A- Load cell bridge excitation and signal wires

Applications

DIY kitchen and postal scales Industrial weighing platforms Force and load measurement in machine builds Filament-level monitoring for 3D printers Tank or silo level-by-weight sensing Robotic gripper force feedback

What's in the box

1x HX711 amplifier module

Downloads

Datasheet (PDF) Arduino HX711 Library Example
🔌
Pin Connections
1 Table
Pin Connections Table 1
BoardSensor PinConnection
HX711VCC/GND/DT/SCK3.3-5V / GND / board DT pin / board SCK pin
📟
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor
7 Examples • C/C++ | Boards: Arduino Uno, Arduino Nano, Arduino Mega, ESP32, ESP8266, STM32, Raspberry Pi Pico
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - Arduino Uno
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - Arduino Nano
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - Arduino Mega
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - ESP32
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - ESP8266
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - STM32
HX711 Dual-Channel 24 Bit Precision A/D weight Pressure Sensor - Raspberry Pi Pico
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_arduino_uno.inoArduino Uno
806 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=3, SCK=2 on Arduino Uno
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN 3
9#define LOADCELL_SCK_PIN 2
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_arduino_nano.inoArduino Nano
807 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=3, SCK=2 on Arduino Nano
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN 3
9#define LOADCELL_SCK_PIN 2
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_arduino_mega.inoArduino Mega
807 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=3, SCK=2 on Arduino Mega
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN 3
9#define LOADCELL_SCK_PIN 2
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_esp32.inoESP32
802 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=16, SCK=4 on ESP32
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN 16
9#define LOADCELL_SCK_PIN 4
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_esp8266.inoESP8266
806 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=D2, SCK=D1 on ESP8266
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN D2
9#define LOADCELL_SCK_PIN D1
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_stm32.inoSTM32
808 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=PB6, SCK=PB7 on STM32
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN PB6
9#define LOADCELL_SCK_PIN PB7
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
📄 File: hx711_dual-channel_24_bit_precision_a/d_weight_pressure_sensor_-_raspberry_pi_pico.inoRaspberry Pi Pico
812 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// DT=6, SCK=7 on Raspberry Pi Pico
6#include <HX711.h>
7
8#define LOADCELL_DOUT_PIN 6
9#define LOADCELL_SCK_PIN 7
10
11HX711 scale;
12
13void setup() {
14 Serial.begin(115200);
15 scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
16 scale.set_scale(); // replace with your own calibration factor once known
17 scale.tare(); // zero the scale with no load on it
18 Serial.println("Scale ready - place a known weight and adjust the calibration factor.");
19}
20
21void loop() {
22 if (scale.is_ready()) {
23 float reading = scale.get_units(10); // average of 10 readings
24 Serial.print("Weight: "); Serial.print(reading); Serial.println(" (raw scale units - calibrate to grams/kg)");
25 } else {
26 Serial.println("HX711 not found.");
27 }
28 delay(300);
29}
24-bit ADC amplifier module purpose-built for load cells.
Always calibrate against a known real weight rather than trusting any ”typical” scale factor found online - the raw-counts-per-gram ratio varies between individual load cells and even shifts slightly with temperature, which is why the standard library examples are built around a simple two-point calibration: zero offset with nothing on the scale, then one known reference weight. Load cell wire colors are not fully standardized across manufacturers - red/black/white/green is common for excitation+/excitation-/signal+/signal-, but always check the specific load cell's own datasheet rather than assuming. Mechanically, the load cell must be free to flex along its intended bending axis; rigidly clamping both ends or letting a stiff platform bind against the frame suppresses the strain gauge deflection and produces inaccurate, non-linear readings.