Files
2026-02-24 18:30:51 +09:00

75 lines
1.9 KiB
Python

import lgpio
import time
class HX711:
def __init__(self, dout, pd_sck, gain=128):
self.DOUT = dout
self.PD_SCK = pd_sck
self.chip = lgpio.gpiochip_open(0)
lgpio.gpio_claim_input(self.chip, self.DOUT)
lgpio.gpio_claim_output(self.chip, self.PD_SCK)
self.GAIN = 1 if gain == 128 else 3 if gain == 64 else 2
self.OFFSET = 0
self.REFERENCE_UNIT = 1
self.set_gain(gain)
def is_ready(self):
return lgpio.gpio_read(self.chip, self.DOUT) == 0
def set_gain(self, gain):
if gain == 128:
self.GAIN = 1
elif gain == 64:
self.GAIN = 3
elif gain == 32:
self.GAIN = 2
self.read_raw()
def read_raw(self):
while not self.is_ready():
pass
data = 0
for _ in range(24):
lgpio.gpio_write(self.chip, self.PD_SCK, 1)
data = (data << 1) | lgpio.gpio_read(self.chip, self.DOUT)
lgpio.gpio_write(self.chip, self.PD_SCK, 0)
for _ in range(self.GAIN):
lgpio.gpio_write(self.chip, self.PD_SCK, 1)
lgpio.gpio_write(self.chip, self.PD_SCK, 0)
if data & 0x800000:
data -= 0x1000000
return data
def set_offset(self, offset):
self.OFFSET = offset
def set_reference_unit(self, value):
self.REFERENCE_UNIT = value
def get_value(self, times=5):
return sum(self.read_raw() for _ in range(times)) / times
def get_weight(self, times=5):
value = self.get_value(times) - self.OFFSET
return value / self.REFERENCE_UNIT
def power_down(self):
lgpio.gpio_write(self.chip, self.PD_SCK, 0)
lgpio.gpio_write(self.chip, self.PD_SCK, 1)
time.sleep(0.0001)
def power_up(self):
lgpio.gpio_write(self.chip, self.PD_SCK, 0)
time.sleep(0.0001)