ใช้ TCA9548A กับ Raspberry Pi

Using the TCA9548A with the Raspberry Pi

TCA9548A เป็นมัลติเพล็กเซอร์ I2C ที่ช่วยให้คุณเชื่อมต่ออุปกรณ์หลายตัวกับที่อยู่ I2C เดียวกันกับ Raspberry Pi เดียว มันใช้งานได้โดยการแยกอุปกรณ์ I2C แต่ละตัวบนรถบัสของตัวเองทำให้ Raspberry Pi สามารถสื่อสารกับพวกเขาได้ทีละครั้ง สิ่งนี้มีประโยชน์อย่างยิ่งในโครงการที่ซับซ้อนซึ่งอาจเกิดความขัดแย้ง


สิ่งที่คุณต้องการ

  1. Raspberry Pi (รุ่นใด ๆ ที่มีการสนับสนุน GPIO เช่น PI 3, PI 4)
  2. TCA9548A I2C MULTERXER MODULE
  3. อุปกรณ์ I2C (เช่นเซ็นเซอร์หรืออุปกรณ์ต่อพ่วง)
  4. เครื่องหั่นขนมปังและสายจัมเปอร์
  5. ติดตั้ง Python บนราสเบอร์รี่ pi

ขั้นตอนที่ 1: เดินสาย TCA9548A ไปยังราสเบอร์รี่ pi

TCA9548A เชื่อมต่อกับ Raspberry Pi โดยใช้โปรโตคอล I2C

การเชื่อมต่อ

tca9548a pin Raspberry Pi Pin
vin 3.3V (พิน 1)
gnd พื้นดิน (พิน 6)
SDA SDA (พิน 3, GPIO2)
SCL SCL (PIN 5, GPIO3)

เชื่อมต่ออุปกรณ์ I2C ของคุณเข้ากับรถบัส I2C หมายเลขของ TCA9548A (เช่น SD0/SCL0, SD1/SCL1).


ขั้นตอนที่ 2: เปิดใช้งานอินเตอร์เฟส I2C

  1. เปิดเครื่องมือกำหนดค่า Raspberry Pi:
    sudo raspi-config
    
  2. นำทางไปยัง ตัวเลือกอินเตอร์เฟส> i2c และเปิดใช้งาน
  3. รีบูตราสเบอร์รี่ pi:
    sudo reboot
    

ขั้นตอนที่ 3: ติดตั้งไลบรารีที่ต้องการ

  1. อัปเดตรายการแพ็คเกจ Raspberry Pi ของคุณ:

    sudo apt update && sudo apt upgrade -y
    
  2. ติดตั้งเครื่องมือ I2C และไลบรารี Python:

    sudo apt install -y i2c-tools python3-pip
    pip3 install adafruit-circuitpython-tca9548a
    
  3. ตรวจสอบว่าตรวจพบ TCA9548A บนรถบัส I2C:

    sudo i2cdetect -y 1
    

    โดยทั่วไปมัลติเพล็กเซอร์จะปรากฏตามที่อยู่ 0x70.


ขั้นตอนที่ 4: รหัส Python เพื่อใช้ TCA9548A

นี่คือสคริปต์ Python เพื่อเปิดใช้งานช่อง I2C เฉพาะบน TCA9548A และอ่านข้อมูลจากเซ็นเซอร์ที่เชื่อมต่อ

ตัวอย่างรหัส Python

import board
import busio
from adafruit_tca9548a import TCA9548A

# Initialize I2C and TCA9548A multiplexer
i2c = busio.I2C(board.SCL, board.SDA)
tca = TCA9548A(i2c)

# Access a specific I2C channel (e.g., channel 0)
channel_0 = tca[0]

# Example: Interfacing with an I2C device on channel 0
import adafruit_bme280  # Replace with your sensor library
sensor = adafruit_bme280.Adafruit_BME280_I2C(channel_0)

# Read data from the sensor
print(f"Temperature: {sensor.temperature:.2f} °C")
print(f"Humidity: {sensor.humidity:.2f} %")

คำอธิบาย:

  • tca[0] หมายถึงช่อง I2C แรกบน TCA9548A
  • แทนที่ไลบรารีเซ็นเซอร์ (เช่น adafruit_bme280) ด้วยไลบรารีสำหรับเซ็นเซอร์หรืออุปกรณ์เฉพาะของคุณ

ขั้นตอนที่ 5: สลับระหว่างช่อง

TCA9548A ช่วยให้คุณสามารถสลับระหว่างอุปกรณ์ I2C หลายตัวที่เชื่อมต่อกับช่องต่าง ๆ นี่คือตัวอย่างของการวนซ้ำผ่านช่องทางเพื่ออ่านจากอุปกรณ์หลายเครื่อง:

for i in range(8):  # TCA9548A has 8 channels (0-7)
    if tca[i].try_lock():
        print(f"Accessing device on channel {i}")
        tca[i].unlock()

คุณสามารถใช้วิธีนี้เพื่อจัดการเซ็นเซอร์หลายตัวหรืออุปกรณ์ต่อพ่วงที่เชื่อมต่อกับมัลติเพล็กเซอร์


แอปพลิเคชันของ TCA9548A

  1. การหลีกเลี่ยงความขัดแย้งที่อยู่ I2C: ใช้มัลติเพล็กเซอร์เพื่อแยกอุปกรณ์ที่มีที่อยู่ I2C เดียวกัน
  2. ขยายอุปกรณ์ I2C: เชื่อมต่อรถบัสได้สูงสุด 8 คันแต่ละเครื่องรองรับหลายอุปกรณ์
  3. โครงการ IoT: ใช้ TCA9548A ในระบบตรวจสอบบ้านอัจฉริยะหรือสิ่งแวดล้อมที่จำเป็นต้องใช้เซ็นเซอร์หลายตัว
  4. หุ่นยนต์ที่ซับซ้อน: จัดการเซ็นเซอร์หรือแอคทูเอเตอร์หลายตัวในโครงการหุ่นยนต์ขั้นสูง

การแก้ไขปัญหา

  1. ไม่พบอุปกรณ์:

    • ตรวจสอบการเดินสายและตรวจสอบให้แน่ใจว่ามีการเชื่อมต่อพิน SDA/SCL อย่างเหมาะสม
    • ยืนยันว่า TCA9548A ใช้พลังงานและที่อยู่ (0x70 โดยค่าเริ่มต้น) จะปรากฏในการสแกน I2C
  2. ข้อมูลช่องไม่ถูกต้อง:

    • ตรวจสอบให้แน่ใจว่าเซ็นเซอร์เชื่อมต่อกับช่องทางที่ถูกต้องและใช้ไลบรารีที่เหมาะสมในสคริปต์ Python ของคุณ
  3. ข้อผิดพลาดในการสื่อสาร I2C:

    • ตรวจสอบการเชื่อมต่อแบบหลวมหรือที่อยู่ที่ขัดแย้งกัน I2C ในช่องเดียวกัน

บทสรุป

Multiplexer TCA9548A I2C เป็นเครื่องมือที่หลากหลายสำหรับการขยายขีดความสามารถ I2C ของ Raspberry Pi ของคุณและแก้ไขความขัดแย้งที่อยู่ โดยทำตามคำแนะนำนี้คุณสามารถจัดการอุปกรณ์ I2C หลายตัวในโครงการที่ซับซ้อนเช่นระบบตรวจสอบสภาพอากาศบ้านอัจฉริยะและหุ่นยนต์ ทดลองกับอุปกรณ์และช่องทางที่แตกต่างกันเพื่อสำรวจความสามารถอย่างเต็มที่!

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.