Converting the VL53L01X Arduino Library
Posted: Wed May 10, 2017 12:16 am
Hi,
First time poster here and real newbie to micropython/python. I just picked up a OpenMV board that uses micropython but want to use a VL53L0X time of flight sensor. I made a good start but now trying to under stand i2c calls using machine.ic2. I get what needs to be supplied but what I don't get is what is the format and how to do it. In Arduino/c++ world I know just by passing the hex addresses and whatever data but I am lost at this point. There are other issues but I think I can work those once this is resolved. Here is what I am struggling with and what gets passed (format, etc):
def _set_reg8(self, reg_address, value):
#data = ustruct.pack('>HB', address, value)
self.i2c.writeto_mem(self._address, reg_address, value)
def _get_reg8(self, address, reg_address):
data = self.i2c.readfrom_mem(self._address, reg_address, 1)
return data
def _set_reg16(self, reg_address, value):
dst[0] = (value >> 8) & 0xFF ## value high byte
dst[1] = ( value & 0xFF) ## value low byte
#self.i2c.writeto_mem(self._address, reg_address, value, *, addrsize = 16 )
test = 1
def _get_reg16(self, reg_address):
data = bytearray[2]
self.i2c.readfrom_into(self._address, reg_address, data)
value = data[1] << 8 ## value high byte
value = value | data[0] ## value low byte
return value
def _set_reg32(self, reg_address, value):
data[3] = (value >> 24) & 0xFF ## value highest byte
data[2] = (value >> 16) & 0xFF
data[1] = (value >> 8) & 0xFF
data[0] = (value >> 8) & 0xFF ## value lowest byte
self.i2c.writeto_mem(self._address, reg_address, data)
return
def _get_reg32(self, reg_address):
data = bytearrar(4)
self.i2c.readfrom_into(self._address, reg_address, data)
value = data[3] << 24 ## value highest byte
value = value | data[2] << 16
value = value | data[1] << 8
value = value | data[0] ## value lowest byte
return value
# Read an arbitrary number of bytes from the sensor, starting at the given
# register, into the given array
def _readMulti(reg_address, count):
dst = bytearray(count)
self.i2c.readfrom_mem_into(self._address, reg_address, dst, count)
return dst
# Write an arbitrary number of bytes from the given array to the sensor,
# starting at the given register
def _writeMulti(reg_address, dst, count):
self.i2c.writeto_mem(self._address, reg_address, dst)
First time poster here and real newbie to micropython/python. I just picked up a OpenMV board that uses micropython but want to use a VL53L0X time of flight sensor. I made a good start but now trying to under stand i2c calls using machine.ic2. I get what needs to be supplied but what I don't get is what is the format and how to do it. In Arduino/c++ world I know just by passing the hex addresses and whatever data but I am lost at this point. There are other issues but I think I can work those once this is resolved. Here is what I am struggling with and what gets passed (format, etc):
def _set_reg8(self, reg_address, value):
#data = ustruct.pack('>HB', address, value)
self.i2c.writeto_mem(self._address, reg_address, value)
def _get_reg8(self, address, reg_address):
data = self.i2c.readfrom_mem(self._address, reg_address, 1)
return data
def _set_reg16(self, reg_address, value):
dst[0] = (value >> 8) & 0xFF ## value high byte
dst[1] = ( value & 0xFF) ## value low byte
#self.i2c.writeto_mem(self._address, reg_address, value, *, addrsize = 16 )
test = 1
def _get_reg16(self, reg_address):
data = bytearray[2]
self.i2c.readfrom_into(self._address, reg_address, data)
value = data[1] << 8 ## value high byte
value = value | data[0] ## value low byte
return value
def _set_reg32(self, reg_address, value):
data[3] = (value >> 24) & 0xFF ## value highest byte
data[2] = (value >> 16) & 0xFF
data[1] = (value >> 8) & 0xFF
data[0] = (value >> 8) & 0xFF ## value lowest byte
self.i2c.writeto_mem(self._address, reg_address, data)
return
def _get_reg32(self, reg_address):
data = bytearrar(4)
self.i2c.readfrom_into(self._address, reg_address, data)
value = data[3] << 24 ## value highest byte
value = value | data[2] << 16
value = value | data[1] << 8
value = value | data[0] ## value lowest byte
return value
# Read an arbitrary number of bytes from the sensor, starting at the given
# register, into the given array
def _readMulti(reg_address, count):
dst = bytearray(count)
self.i2c.readfrom_mem_into(self._address, reg_address, dst, count)
return dst
# Write an arbitrary number of bytes from the given array to the sensor,
# starting at the given register
def _writeMulti(reg_address, dst, count):
self.i2c.writeto_mem(self._address, reg_address, dst)