
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

3、Modulparameter
Pinbezeichnung | Beschreibung |
|---|---|
G | GND(Spannungsversorgungsminus) |
V | VCC(Spannungsversorgungsplus) |
D | Datenpin |
S | Zeitpin |
Spannungsversorgung: 3.3V-5V
Verbindungsmethode: PH2.0 4P Steckerkabel
Montageart: Bausteine fest
4, Platinegröße

5、Arduino Bibliothek hinzufügen
Hier ist der Bezug für die Verwendung der Bibliothek:Bibliothek installieren und verwenden
Bibliothek herunterladen: 2、第二步将UNO开发板的库文件下载后解压在桌面。
6、添加MicroPython环境库文件
库文件安装不会的请点击这里:参考链接
7、Arduino IDE Beispielprogramm
Beispielprogramm (UNO-Entwicklungsboard): Klicken Sie zum Herunterladen
#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));
}Beispielprogramm (ESP32-Entwicklungsboard - basierend auf Python, kann nicht mit Arduino IDE hochgeladen werden):
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"))
8, Mixly-Beispielprogramm (Graphische Sprache)
Beispielprogramm (UNO-Board):2、第二步将UNO开发板的库文件下载后解压在桌面。

示例程序(ESP32开发板):2、第二步将UNO开发板的库文件下载后解压在桌面。

9, Testumgebung aufbauen
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-S46-L Waage-Sensor*1
PH2.0 4P-Doppelkopfsteckerleitung *1
Schaltplan der Leitung:

ESP32 Python Testumgebung Einrichtung
10、Video-Tutorial
Arduino UNO Video-Tutorial:Klicken, um anzuzeigen
ESP32 Python Videoanleitung:
11、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.

