I don't think the ENODOV error means a problem in the code
(I'm using micropython btw)
I noticed something odd
>>> i2c.scan()
[81]
>>> i2c.scan()
[]
>>> i2c.scan()
[]
>>> i2c.scan()
[81, 82]
>>> i2c.scan()
[81]
>>> i2c.scan()
[]
>>> i2c.scan()
[]
>>> i2c.scan()
[]
>>> i2c.scan()
[]
>>> i2c.scan()
[]
>>> i2c.scan()
[81]
>>> i2c.scan()
[]
>>> i2c.scan()
[81]
>>> i2c.scan()
[]
When successively scanning, sometimes it sees nothing... Something's wrong here I guess?