'''
Baseado na biblioteca de:
https://github.com/bogde/HX711
'''
from machine import Pin
import time
from utime import sleep
class HX711:
def __init__(self, dout, pd_sck, gain=128):
self.PD_SCK = Pin(pd_sck, Pin.OUT)
self.DOUT = Pin(dout, Pin.IN, Pin.PULL_UP)
self.GAIN = 0
self.set_gain(gain)
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()
def is_ready(self):
return self.DOUT.value() == 0
def read(self):
while not self.is_ready():
pass
data = [0x00] * 3
for j in range(3):
for i in range(8):
self.PD_SCK.value(1)
data[j] <<= 1
self.PD_SCK.value(0)
if self.DOUT.value():
data[j] |= 0x01
for i in range(self.GAIN):
self.PD_SCK.value(1)
self.PD_SCK.value(0)
value = data[0] << 16 | data[1] << 8 | data[2]
if value & 0x800000:
value |= ~0xffffff
return value
def read_average(self, times=3):
sum = 0
for _ in range(times):
sum += self.read()
return sum / times
def get_value(self, times=3):
return self.read_average(times)
def get_units(self, times=3):
return self.get_value(times)
def tare(self, times=15):
sum = self.read_average(times)
self.set_offset(sum)
def set_offset(self, offset):
self.OFFSET = offset
def set_scale(self, scale):
self.SCALE = scale
def power_down(self):
self.PD_SCK.value(0)
self.PD_SCK.value(1)
def power_up(self):
self.PD_SCK.value(0)
# Exemplo de uso
hx = HX711(dout=21, pd_sck=22)
hx.set_scale(2280)
hx.tare()
while (True):
print("Peso: ", hx.get_units(), "g")
sleep(2)