Bird
Raised Fist0
Raspberry Piprogramming~5 mins

Multiple I2C devices on same bus in Raspberry Pi - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the I2C bus and how can multiple devices share it?
The I2C bus is a communication system that uses two wires: one for data (SDA) and one for clock (SCL). Multiple devices can share the same bus because each device has a unique address, allowing the master to talk to one device at a time.
Click to reveal answer
beginner
How do devices on the same I2C bus avoid communication conflicts?
Each device has a unique address. The master sends the address before data. Only the device with the matching address responds, so devices don't talk over each other.
Click to reveal answer
intermediate
What should you check if two I2C devices have the same address?
If two devices share the same address, they will conflict. You can change the address if the device supports it or use an I2C multiplexer to separate them.
Click to reveal answer
beginner
How do you scan for I2C devices connected to the Raspberry Pi bus?
You can use the command 'sudo i2cdetect -y 1' in the terminal. It shows a grid with addresses where devices respond, helping you find all connected devices.
Click to reveal answer
intermediate
Why is it important to use pull-up resistors on the I2C bus?
Pull-up resistors keep the SDA and SCL lines at a high voltage when no device is pulling them low. This ensures clear signals and proper communication between devices.
Click to reveal answer
What allows multiple I2C devices to share the same bus without interfering?
ADevices take turns randomly
BEach device has a unique address
COnly one device is powered at a time
DDevices use different wires
Which command helps you find all I2C devices connected to a Raspberry Pi?
Agpio readall
Blsusb
Cifconfig
Dsudo i2cdetect -y 1
What happens if two I2C devices have the same address on the bus?
AThey will both respond and cause conflicts
BOnly one device will work, the other is ignored
CThe bus automatically changes one address
DThey communicate without problems
Why are pull-up resistors needed on the I2C bus?
ATo keep the lines high when idle
BTo speed up communication
CTo power the devices
DTo ground the signals
What tool can help separate devices with the same I2C address?
AEthernet switch
BUSB hub
CI2C multiplexer
DGPIO expander
Explain how multiple I2C devices communicate on the same bus without interfering with each other.
Think about how a mailman delivers letters to specific houses.
You got /3 concepts.
    Describe what to do if two I2C devices have the same address and you want to use them on one Raspberry Pi bus.
    Consider how to separate devices that look the same to the bus.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What is the main requirement to connect multiple I2C devices on the same bus?

      Choose the best answer.

      easy
      A. Each device must have a unique I2C address.
      B. Each device must use a different bus.
      C. Devices must be connected with separate wires.
      D. Devices must have the same address to communicate.

      Solution

      1. Step 1: Understand I2C bus addressing

        I2C devices share the same two wires but must have unique addresses to avoid conflicts.
      2. Step 2: Identify the correct requirement

        Since devices share the bus, unique addresses allow the master to select each device individually.
      3. Final Answer:

        Each device must have a unique I2C address. -> Option A
      4. Quick Check:

        Unique addresses = multiple devices on one bus [OK]
      Hint: Remember: unique addresses prevent device conflicts on I2C [OK]
      Common Mistakes:
      • Thinking devices need separate wires
      • Assuming devices can share the same address
      • Believing each device needs its own bus
      2.

      Which Python code snippet correctly initializes communication with two I2C devices at addresses 0x20 and 0x21 on the same bus?

      import smbus2
      bus = smbus2.SMBus(1)
      
      # What comes next?
      easy
      A. device1 = smbus2.SMBus(0x20) device2 = smbus2.SMBus(0x21)
      B. device1 = bus.read_byte(0x20) device2 = bus.read_byte(0x21)
      C. device1 = 0x20 device2 = 0x21
      D. device1 = bus device2 = bus

      Solution

      1. Step 1: Understand bus and device addressing

        The bus object is created once; devices are identified by their addresses.
      2. Step 2: Assign device addresses as variables

        Assigning device addresses to variables allows easy communication calls later.
      3. Final Answer:

        device1 = 0x20\ndevice2 = 0x21 -> Option C
      4. Quick Check:

        Bus once, devices by address [OK]
      Hint: Create one bus object; use addresses to identify devices [OK]
      Common Mistakes:
      • Trying to create multiple bus objects for each device
      • Calling read_byte immediately without setup
      • Assigning bus object directly to devices
      3.

      Given this Python code snippet on a Raspberry Pi with two I2C devices at addresses 0x20 and 0x21:

      import smbus2
      bus = smbus2.SMBus(1)
      
      value1 = bus.read_byte(0x20)
      value2 = bus.read_byte(0x21)
      print(value1, value2)

      What will be the output if device 0x20 returns 10 and device 0x21 returns 20?

      medium
      A. 10 20
      B. 20 10
      C. 0 0
      D. Error: Address not found

      Solution

      1. Step 1: Read bytes from each device address

        The code reads one byte from address 0x20 and one from 0x21.
      2. Step 2: Print the values in order

        Since value1 reads from 0x20 (returns 10) and value2 from 0x21 (returns 20), print outputs "10 20".
      3. Final Answer:

        10 20 -> Option A
      4. Quick Check:

        Read from 0x20 then 0x21 = 10 20 [OK]
      Hint: Read bytes by address order matches output order [OK]
      Common Mistakes:
      • Mixing up device addresses and values
      • Assuming output is reversed
      • Expecting error without checking device presence
      4.

      Consider this Python code snippet intended to read from two I2C devices on the same bus:

      import smbus2
      bus = smbus2.SMBus(1)
      
      value1 = bus.read_byte(0x20)
      value2 = bus.read_byte(0x20)
      print(value1, value2)

      Why might this code cause a problem when trying to read two different devices?

      medium
      A. The code is missing pull-up resistors on the bus.
      B. Both reads use the same address, so the second device is never accessed.
      C. The addresses 0x20 and 0x20 are invalid on the bus.
      D. The bus object is created twice, causing conflict.

      Solution

      1. Step 1: Check device addresses used in reads

        Both read_byte calls use address 0x20, so only one device is accessed twice.
      2. Step 2: Understand impact on multiple devices

        To read two different devices, their unique addresses must be used; otherwise, the second device is ignored.
      3. Final Answer:

        Both reads use the same address, so the second device is never accessed. -> Option B
      4. Quick Check:

        Same address twice = one device only [OK]
      Hint: Use different addresses to access multiple devices [OK]
      Common Mistakes:
      • Assuming bus object creation causes error
      • Thinking addresses 0x20 are invalid
      • Confusing hardware wiring issues with code errors
      5.

      You have three I2C sensors connected to the same Raspberry Pi bus with addresses 0x20, 0x21, and 0x20. You want to read data from all three devices. What is the best way to fix this setup?

      hard
      A. Use separate I2C buses for devices with the same address.
      B. Use software to ignore address conflicts and read anyway.
      C. Connect devices with the same address to different GPIO pins.
      D. Change the address of one device so all three have unique addresses.

      Solution

      1. Step 1: Identify address conflict

        Two devices share address 0x20, causing bus conflicts and communication errors.
      2. Step 2: Resolve conflict by changing address

        Most I2C devices allow changing their address via hardware pins or software configuration to ensure uniqueness.
      3. Step 3: Alternative solutions

        Using separate buses or GPIO pins is complex; ignoring conflicts causes errors.
      4. Final Answer:

        Change the address of one device so all three have unique addresses. -> Option D
      5. Quick Check:

        Unique addresses fix conflicts [OK]
      Hint: Ensure all devices have unique addresses to avoid conflicts [OK]
      Common Mistakes:
      • Trying to read devices with duplicate addresses
      • Assuming software can fix hardware address conflicts
      • Using separate GPIO pins without separate buses
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard