Just so I understand everything properly.
In your example i2c_control1.py you use the code
from pyb import I2C
i2c = I2C(2, I2C.MASTER) # The i2c bus must always be 2.
mem = i2c.mem_read(256, 0x50, 0) # The eeprom slave address is 0x50.
But nowhere do you use the Pin class to set the SDA and SCL lines as pullups. R you relying on external pullsups pullups??
I asked on the official MicroPython forum about the I2C pullups for the pyboard and they said they are not done by the software but rather the pyboard has external pullups on the PCB. This is different to all the other ports of micropython that I have used where there isn’t any external pullups and they are done in software automatically by the machine.I2C class.
If your using the official micro-python port without any modification to the pyb.I2C class or machine.I2C class or any external pullups on the PCB then this means the user will have ensure that there is pullups on the other device.