@@ -183,7 +183,7 @@ def discover(self, default_addresses: list[int]) -> int | None:
183183 if len (default_addresses ) == 0 :
184184 return None
185185
186- devices_on_bus = self . i2c_bus . scan ()
186+ devices_on_bus = Modulino . scan (self . i2c_bus )
187187 for addr in default_addresses :
188188 if addr in devices_on_bus :
189189 return addr
@@ -207,7 +207,7 @@ def connected(self) -> bool:
207207 """
208208 if not bool (self ):
209209 return False
210- return self .address in self . i2c_bus . scan ()
210+ return self .address in Modulino . scan (self . i2c_bus )
211211
212212 @property
213213 def pin_strap_address (self ) -> int | None :
@@ -314,6 +314,18 @@ def has_default_address(self) -> bool:
314314 """
315315 return self .address in self .default_addresses
316316
317+ @staticmethod
318+ def scan (bus : I2C ) -> list [int ]:
319+ addresses = bytearray () # Use 8bit data type
320+ # Skip general call address (0x00)
321+ for address in range (1 ,128 ):
322+ try :
323+ bus .writeto (address , b'' )
324+ addresses .append (address )
325+ except OSError :
326+ pass
327+ return list (addresses )
328+
317329 @staticmethod
318330 def available_devices (bus : I2C = None ) -> list [Modulino ]:
319331 """
@@ -327,7 +339,7 @@ def available_devices(bus: I2C = None) -> list[Modulino]:
327339 """
328340 if bus is None :
329341 bus = _I2CHelper .get_interface ()
330- device_addresses = bus .scan ()
342+ device_addresses = Modulino .scan (bus )
331343 devices = []
332344 for address in device_addresses :
333345 if address == _BOOTLOADER_ADDRESS :
0 commit comments