Hi @xpackers,
i can help you with the micropython code for the miniScale unit.
regarding the accuracy of the unit i have the same problem, its drifts a lot over time with or without calibration, i try to use the set_offset() function before each use but its useless over time.
tried to take it a part and tighten the screws a little but also the same problem

this is the miniUnit.py

from machine import I2C, Pin
import time
import struct

Constants

DEVICE_DEFAULT_ADDR = 0x26

Scale Registers

UNIT_SCALES_RAW_ADC_REG = 0x00
UNIT_SCALES_CAL_DATA_REG = 0x10
UNIT_SCALES_BUTTON_REG = 0x20
UNIT_SCALES_RGB_LED_REG = 0x30
UNIT_SCALES_SET_GAP_REG = 0x40
UNIT_SCALES_SET_OFFSET_REG = 0x50
UNIT_SCALES_CAL_DATA_INT_REG = 0x60
UNIT_SCALES_CAL_DATA_STRING_REG = 0x70
UNIT_SCALES_FILTER_REG = 0x80
JUMP_TO_BOOTLOADER_REG = 0xFD
FIRMWARE_VERSION_REG = 0xFE
I2C_ADDRESS_REG = 0xFF

class UnitScales:
def init(self, sda=21, scl=22, addr=DEVICE_DEFAULT_ADDR):
self._i2c = I2C(0, scl=Pin(scl), sda=Pin(sda), freq=400000)
self._addr = addr

def write_bytes(self, reg, data): self._i2c.writeto(self._addr, bytes([reg]) + data) def read_bytes(self, reg, length): self._i2c.writeto(self._addr, bytes([reg])) return self._i2c.readfrom(self._addr, length) def begin(self): try: self._i2c.readfrom(self._addr, 1) return True except OSError: return False def get_btn_status(self): data = self.read_bytes(UNIT_SCALES_BUTTON_REG, 1) return data[0] def set_led_color(self, color_hex): color = bytearray(3) color[0] = (color_hex >> 16) & 0xff # RED color[1] = (color_hex >> 8) & 0xff # GREEN color[2] = color_hex & 0xff # BLUE self.write_bytes(UNIT_SCALES_RGB_LED_REG, color) def get_led_color(self): color = self.read_bytes(UNIT_SCALES_RGB_LED_REG, 3) return (color[0] << 16) | (color[1] << 8) | color[2] def get_weight(self): data = self.read_bytes(UNIT_SCALES_CAL_DATA_REG, 4) return struct.unpack('<f', data)[0] def get_weight_int(self): data = self.read_bytes(UNIT_SCALES_CAL_DATA_INT_REG, 4) return int.from_bytes(data, 'little') def get_weight_string(self): data = self.read_bytes(UNIT_SCALES_CAL_DATA_STRING_REG, 16) return ''.join([chr(b) for b in data if b != 0]) def get_gap_value(self): data = self.read_bytes(UNIT_SCALES_SET_GAP_REG, 4) return struct.unpack('<f', data)[0] def set_gap_value(self, offset): data = struct.pack('<f', offset) self.write_bytes(UNIT_SCALES_SET_GAP_REG, data) def set_offset(self): self.write_bytes(UNIT_SCALES_SET_OFFSET_REG, bytearray([1])) def get_raw_adc(self): data = self.read_bytes(UNIT_SCALES_RAW_ADC_REG, 4) return int.from_bytes(data, 'little') def set_i2c_address(self, addr): self.write_bytes(I2C_ADDRESS_REG, bytearray([addr])) self._addr = addr return self._addr def get_i2c_address(self): data = self.read_bytes(I2C_ADDRESS_REG, 1) return data[0] def get_firmware_version(self): data = self.read_bytes(FIRMWARE_VERSION_REG, 1) return data[0] def jump_bootloader(self): self.write_bytes(JUMP_TO_BOOTLOADER_REG, bytearray([1]))