Aquí está la solución de transistor. Debe asegurarse de que SEL_1 y SEL_2 no sean altos al mismo tiempo. Debes asegurarte de que uno de ellos esté alto todo el tiempo (porque los controles están en el otro lado del FET). Si no está seguro de administrar eso en el software, tal vez use un inversor. La entrada al inversor será un GPIO y también será SEL_1. La salida del inversor será SEL_2.
simular este circuito : esquema creado usando CircuitLab
I2C_DA es la línea de datos I2C del procesador. SEL_1 es un GPIO. Cuando está alto, selecciona el esclavo 1. Esto significa que el esclavo 1 podrá ver los datos enviados por el maestro de bus. Cuando SEL_1 está bajo, el esclavo 1 solo verá que la línea de datos está alta, por lo que nunca responderá.
SEL2 es un GPIO diferente. Cuando SEL_2 es alto, selecciona el esclavo 2. Debe evitar que ambos sean altos. No creará contención (línea de datos del colector abierto) pero si envía una lectura en la dirección del esclavo, y ambas selecciones son altas, obtendrá el tipo de colisión de bus que está tratando de evitar. Y puede que no te des cuenta de inmediato. Los datos no aparecerían obviamente dañados.