
1、Einführung
Der Hx711-Waagesensor ist ein Gerät, das mechanische Größen (wie Gewicht, Druck) in elektrische Signale umwandelt, der häufigste Typ, der durch die Deformation eines elastischen Körpers und die Änderung des Widerstands der auf ihn geklebten Widerstandsverspannungen verursacht wird, indem der Widerstandsverlauf in einen Spannungssignal umgewandelt wird, das durch einen Wheatstone-Brücke, dann durch Verstärkung und Analog-Digital-Wandlung in ein digitales Signal umgewandelt wird.
2、Schemazeichnung
Gewichtssensormodul-HS-S46P SchemaKlicken Sie zum Anzeigen
3、Modulparameter
Pinbezeichnung | Beschreibung |
|---|---|
G | GND(Spannungsversorgungsminus) |
V | VCC(Spannungsversorgungsplus) |
D | Datenpin |
S | Zeitpin |
Spannungsversorgung: 3.3V-5V
Verbindungsmethode: PH2.0 4P Steckerkabel
Montageart: Schraubenfestigung
4, Platinegröße

5、Arduino IDE Beispielprogramm
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
Anleitung zum Herunterladen und Importieren der Bibliotheksdateien für das Arduino IDE:Klicken Sie zum Anzeigen
Beispielprogramm (UNO-Entwicklerboard):
#include <Hx711.h>
Hx711 scale6_5(6,5);
void setup(){
scale6_5.setOffset(scale6_5.getAverageValue(30));
scale6_5.setScale(363.47);
Serial.begin(9600);
}
void loop(){
Serial.println(scale6_5.getWeight(10));
}6、ESP32 Python Beispiel (für Mixly IDE /米思齐)
Entwicklungsboard auswählen Python ESP32 [ESP32 Generic(4MB)] auf den Code-Modus umschalten und hochladen
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:Klicken Sie zum Anzeigen
示例程序(ESP32-Python):
from machine import Pin
from utime import sleep_us, sleep_ms, time
import ujson
from micropython import const
class HX711Exception(Exception):
pass
class InvalidMode(HX711Exception):
pass
class DeviceIsNotReady(HX711Exception):
pass
class HX711:
CHANNEL_A_128 = const(1)
CHANNEL_A_64 = const(3)
CHANNEL_B_32 = const(2)
DATA_BITS = const(24)
MAX_VALUE = const(0x7fffff)
MIN_VALUE = const(0x800000)
READY_TIMEOUT_SEC = const(5)
SLEEP_DELAY_USEC = const(80)
def __init__(self, d_out: int, pd_sck: int, channel: int = CHANNEL_A_128, config_file="hx711setting.json"):
self.d_out_pin = Pin(d_out, Pin.IN)
self.pd_sck_pin = Pin(pd_sck, Pin.OUT, value=0)
self._channel = channel
self.offset = 0
self.scale = 1.0
self.config_file = config_file
self.load_offset_scale()
def _convert_from_twos_complement(self, value: int) -> int:
if value & (1 << (self.DATA_BITS - 1)):
value -= 1 << self.DATA_BITS
return value
def _set_channel(self):
for i in range(self._channel):
self.pd_sck_pin.value(1)
self.pd_sck_pin.value(0)
def _wait(self):
t0 = time()
while not self.is_ready():
if time() - t0 > self.READY_TIMEOUT_SEC:
raise DeviceIsNotReady()
@property
def channel(self) -> tuple:
if self._channel == self.CHANNEL_A_128:
return 'A', 128
if self._channel == self.CHANNEL_A_64:
return 'A', 64
if self._channel == self.CHANNEL_B_32:
return 'B', 32
@channel.setter
def channel(self, value):
if value not in (self.CHANNEL_A_128, self.CHANNEL_A_64, self.CHANNEL_B_32):
raise InvalidMode('Gain should be one of HX711.CHANNEL_A_128, HX711.CHANNEL_A_64, HX711.CHANNEL_B_32')
self._channel = value
if not self.is_ready():
self._wait()
for i in range(self.DATA_BITS):
self.pd_sck_pin.value(1)
self.pd_sck_pin.value(0)
self._set_channel()
def is_ready(self) -> bool:
return self.d_out_pin.value() == 0
def power_off(self):
self.pd_sck_pin.value(0)
self.pd_sck_pin.value(1)
sleep_us(self.SLEEP_DELAY_USEC)
def power_on(self):
self.pd_sck_pin.value(0)
self.channel = self._channel
def read_raw(self):
if not self.is_ready():
self._wait()
raw_data = 0
for i in range(self.DATA_BITS):
self.pd_sck_pin.value(1)
self.pd_sck_pin.value(0)
raw_data = (raw_data << 1) | self.d_out_pin.value()
self._set_channel()
return self._convert_from_twos_complement(raw_data)
def tare(self, samples=50):
total = sum(self.read_raw() for _ in range(samples))
self.offset = total / samples
return self.offset
def set_scale(self, known_weight, samples=50):
raw_total = sum(self.read_raw() for _ in range(samples))
raw_avg = raw_total / samples
self.scale = (raw_avg - self.offset) / known_weight
if self.scale == 0:
self.scale = 1
return self.scale
def get_weight(self, samples=25, filter_type="mean"):
values = [self.read_raw() for _ in range(samples)]
if filter_type == "median":
values.sort()
raw = values[len(values)//2]
else:
raw = sum(values)/len(values)
return (raw - self.offset)/self.scale
def save_offset_scale(self):
with open(self.config_file, "w") as f:
ujson.dump({'offset': self.offset, 'scale': self.scale}, f)
def load_offset_scale(self):
try:
with open(self.config_file, "r") as f:
data = ujson.load(f)
self.offset = data.get("offset", 0)
self.scale = data.get("scale", 1.0)
except:
self.offset = 0
self.scale = 1.0
hx = HX711(d_out=17, pd_sck=16)
print("=== HX711 自动校准程序 ===")
print("1. 请确保秤上没有物体...")
sleep_ms(3000)
hx.tare()
print("去皮完成,offset =", hx.offset)
known_weight = 199
print("2. 请放入 %.2f g 重量的物品..." % known_weight)
sleep_ms(5000)
scale = hx.set_scale(known_weight)
print("校准完成,scale =", scale)
hx.save_offset_scale()
print("参数已保存,可以直接开始测量。")
while True:
print(hx.get_weight(samples=50, filter_type="mean"))
7、米思齐 Mixly 示例程序(图形化语言) in Deutsch
Beispielprogramm (UNO-Board):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE Arduino库文件下载及导入教程:Klicken Sie zum Anzeigen

Beispielprogramm (ESP32-Entwicklungsboard):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:Klicken Sie zum Anzeigen

8、Testumgebung Einrichtung
Testumgebung für Arduino UNO einrichten
Vorbereiten Sie die Komponenten:
UNO-R3 Entwicklungsboard *1
UNO-R3 EXP-Erweiterungsplatte *1
USB type-c Datenkabel *1
HS-S46P Gewichtssensor*1
PH2.0 4P-Doppelkopfsteckerleitung *1
Schaltplan der Leitung:

ESP32 Testumgebung einrichten
Vorbereiten Sie die Komponenten:Wird aktualisiert...
Schaltplan der Leitung:Wird aktualisiert...
9、Video-Tutorial
Arduino UNO Videoanleitung:Klicken Sie zum Anzeigen
ESP32 Python Videoanleitung:Klicken Sie zum Anzeigen
10、Testergebnis
Arduino UNO Testergebnis:
Eingeben Sie den Code, legen Sie das Objekt dann auf die Induktionswaage und Sie können das Gewicht über den Computer-Serialport lesen.


ESP32 Testergebnis:
Wird aktualisiert...