Get free delivery on all orders over £20!

วิธีใช้ตัวขยาย I/O PCF8575 กับ Arduino

How to Use the PCF8575 I/O Expander with Arduino

PCF8575 เป็นตัวขยาย I/O 16 บิตที่สื่อสารกับไมโครคอนโทรลเลอร์ผ่านอินเตอร์เฟส I2C ช่วยให้คุณสามารถขยายจำนวนหมุดอินพุต/เอาต์พุตบน Arduino ของคุณทำให้สมบูรณ์แบบสำหรับโครงการที่ต้องการเซ็นเซอร์ปุ่มหรือ LED จำนวนมาก บทช่วยสอนนี้จะแนะนำคุณผ่านการเชื่อมต่อและใช้ PCF8575 กับ Arduino


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

  1. PCF8575 โมดูล Expander I/O
  2. คณะกรรมการ Arduino (เช่น Uno, Mega, Nano)
  3. เซ็นเซอร์ปุ่มหรือไฟ LED สำหรับการทดสอบ
  4. เครื่องหั่นขนมปังและสายจัมเปอร์
  5. คอมพิวเตอร์ที่ติดตั้ง Arduino IDE

ขั้นตอนที่ 1: ทำความเข้าใจโมดูล PCF8575

PCF8575 มีหมุด GPIO เพิ่มเติม 16 ตัวที่สามารถกำหนดค่าเป็นอินพุตหรือเอาต์พุต มันสื่อสารผ่านโปรโตคอล I2C และมีที่อยู่ I2C ที่ปรับได้สำหรับการเชื่อมต่อหลายโมดูลเข้ากับบัสเดียวกัน

ปัก

เข็มหมุด การทำงาน
VCC แหล่งจ่ายไฟ (3.3V/5V)
gnd พื้น
SDA สายข้อมูล i2c
SCL สายนาฬิกา i2c
P0-P15 พิน I/O วัตถุประสงค์ทั่วไป

การกำหนดค่าที่อยู่ I2C

  • ที่อยู่ I2C ถูกกำหนดโดยหมุด A0, A1 และ A2:
    • หมุดทั้งหมดไปยัง GND: 0x20 (ที่อยู่เริ่มต้น)
    • หมุดทั้งหมดไปยัง VCC: 0x27

ขั้นตอนที่ 2: เดินสาย PCF8575 ถึง Arduino

นี่คือวิธีการเชื่อมต่อ PCF8575 กับ Arduino:

PCF8575 PIN พิน Arduino
VCC 5V
gnd gnd
SDA A4 (SDA)
SCL A5 (SCL)

เชื่อมต่ออุปกรณ์ต่อพ่วงของคุณ (เช่นไฟ LED หรือปุ่ม) กับพิน P0-P15

บันทึก: สำหรับบอร์ด Arduino อื่น ๆ ให้แน่ใจว่าคุณใช้พิน I2C ที่ถูกต้อง


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

เพื่อให้การทำงานกับ PCF8575 ง่ายขึ้นให้ติดตั้งไลบรารี "PCF8575"

ขั้นตอนในการติดตั้ง:

  1. เปิด Arduino IDE
  2. ไป ร่าง > รวมห้องสมุด > จัดการห้องสมุด.
  3. ค้นหา "PCF8575" แล้วคลิก ติดตั้ง.

ขั้นตอนที่ 4: อัปโหลดรหัส

ตัวอย่าง: การควบคุมไฟ LED

รหัสนี้แสดงวิธีเปิดและปิดไฟ LED โดยใช้ PCF8575:

#include <Wire.h>
#include <PCF8575.h>

PCF8575 pcf8575(0x20); // Initialize with the default I2C address

void setup() {
  Serial.begin(9600);

  // Set all pins as outputs
  for (int i = 0; i < 16; i++) {
    pcf8575.pinMode(i, OUTPUT);
  }

  Serial.println("PCF8575 initialized.");
}

void loop() {
  // Turn all LEDs on
  for (int i = 0; i < 16; i++) {
    pcf8575.digitalWrite(i, HIGH);
  }
  delay(1000);

  // Turn all LEDs off
  for (int i = 0; i < 16; i++) {
    pcf8575.digitalWrite(i, LOW);
  }
  delay(1000);
}

ตัวอย่าง: การอ่านปุ่ม

รหัสนี้แสดงวิธีการอ่านอินพุตจากปุ่มที่เชื่อมต่อกับ PCF8575:

#include <Wire.h>
#include <PCF8575.h>

PCF8575 pcf8575(0x20); // Initialize with the default I2C address

void setup() {
  Serial.begin(9600);

  // Set all pins as inputs
  for (int i = 0; i < 16; i++) {
    pcf8575.pinMode(i, INPUT);
  }

  Serial.println("PCF8575 initialized.");
}

void loop() {
  for (int i = 0; i < 16; i++) {
    int state = pcf8575.digitalRead(i);
    Serial.print("Pin ");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(state);
  }
  delay(500);
}

ขั้นตอนที่ 5: ทดสอบการตั้งค่า

  1. เชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณผ่าน USB
  2. เปิด Arduino IDE และเลือกที่ถูกต้อง กระดาน และ ท่าเรือ ภายใต้ เครื่องมือ เมนู.
  3. อัปโหลดรหัสไปยัง Arduino โดยคลิก อัพโหลด.
  4. สำหรับตัวอย่าง LED สังเกตไฟ LED เปิดและปิด สำหรับตัวอย่างปุ่มปุ่มมอนิเตอร์จะระบุสถานะของจอภาพอนุกรม

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

  1. ขยายพิน GPIO สำหรับโครงการ Arduino
  2. การสร้างเมทริกซ์ LED ที่ซับซ้อน
  3. การอ่านเซ็นเซอร์หลายตัวหรืออาร์เรย์ปุ่ม
  4. การควบคุมรีเลย์และแอคทูเอเตอร์

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

  • ไม่มีการตอบสนองจากโมดูล: ตรวจสอบการเชื่อมต่อ I2C และการกำหนดค่าที่อยู่
  • การอ่านที่ไม่สอดคล้องกัน: ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟที่เสถียรและตัวต้านทานแบบดึงขึ้นที่เหมาะสมสำหรับสาย I2C
  • พฤติกรรมพินไม่ถูกต้อง: โหมด PIN ตรวจสอบสองครั้ง (อินพุต/เอาต์พุต) ในรหัส

บทสรุป

คุณสามารถเชื่อมต่อ PCF8575 I/O expander กับ Arduino ได้สำเร็จช่วยให้คุณสามารถควบคุมหรืออ่านจากหมุด GPIO เพิ่มเติม 16 ตัว ทดลองกับอุปกรณ์ต่อพ่วงที่แตกต่างกันและขยายโครงการของคุณด้วยโมดูลอเนกประสงค์นี้!

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.

2 ความคิดเห็น

Hallo Bruce,

benutze das Library von Renzo Mischianti (kannste nach googlen uind dort auch runterladen) und benenne den Folder in “PCF8575” um. Das Repository von Rob Tillaart hat andere Befehle und passt nicht zu dem o.g. Beispiel.

Ich hoffe das bringt dich weiter.

Gruß

Jochen

Jochen,

I copy the code and get a coplilation error:
C:\Users\Bruce\AppData\Local\Temp\.arduinoIDE-unsaved2025104-14104-1wy2nav.zi0f\sketch_nov4a\sketch_nov4a.ino: In function ‘void setup()’:
C:\Users\Bruce\AppData\Local\Temp\.arduinoIDE-unsaved2025104-14104-1wy2nav.zi0f\sketch_nov4a\sketch_nov4a.ino:11:13: error: ‘class PCF8575’ has no member named ‘pinMode’
pcf8575.pinMode(i, INPUT);
^~~~~~~
C:\Users\Bruce\AppData\Local\Temp\.arduinoIDE-unsaved2025104-14104-1wy2nav.zi0f\sketch_nov4a\sketch_nov4a.ino: In function ‘void loop()’:
C:\Users\Bruce\AppData\Local\Temp\.arduinoIDE-unsaved2025104-14104-1wy2nav.zi0f\sketch_nov4a\sketch_nov4a.ino:19:25: error: ‘class PCF8575’ has no member named ‘digitalRead’
int state = pcf8575.digitalRead(i);
^~~~~~~~~~~
exit status 1

Compilation error: ‘class PCF8575’ has no member named ‘pinMode’

Bruce Pedersen,

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