PCF8575 เป็นตัวขยาย I/O 16 บิตที่สื่อสารกับไมโครคอนโทรลเลอร์ผ่านอินเตอร์เฟส I2C ช่วยให้คุณสามารถขยายจำนวนหมุดอินพุต/เอาต์พุตบน Arduino ของคุณทำให้สมบูรณ์แบบสำหรับโครงการที่ต้องการเซ็นเซอร์ปุ่มหรือ LED จำนวนมาก บทช่วยสอนนี้จะแนะนำคุณผ่านการเชื่อมต่อและใช้ PCF8575 กับ Arduino
สิ่งที่คุณต้องการ
- PCF8575 โมดูล Expander I/O
- คณะกรรมการ Arduino (เช่น Uno, Mega, Nano)
- เซ็นเซอร์ปุ่มหรือไฟ LED สำหรับการทดสอบ
- เครื่องหั่นขนมปังและสายจัมเปอร์
- คอมพิวเตอร์ที่ติดตั้ง 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
- หมุดทั้งหมดไปยัง GND:
ขั้นตอนที่ 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"
ขั้นตอนในการติดตั้ง:
- เปิด Arduino IDE
- ไป ร่าง > รวมห้องสมุด > จัดการห้องสมุด.
- ค้นหา "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: ทดสอบการตั้งค่า
- เชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณผ่าน USB
- เปิด Arduino IDE และเลือกที่ถูกต้อง กระดาน และ ท่าเรือ ภายใต้ เครื่องมือ เมนู.
- อัปโหลดรหัสไปยัง Arduino โดยคลิก อัพโหลด.
- สำหรับตัวอย่าง LED สังเกตไฟ LED เปิดและปิด สำหรับตัวอย่างปุ่มปุ่มมอนิเตอร์จะระบุสถานะของจอภาพอนุกรม
แอปพลิเคชันของ PCF8575
- ขยายพิน GPIO สำหรับโครงการ Arduino
- การสร้างเมทริกซ์ LED ที่ซับซ้อน
- การอ่านเซ็นเซอร์หลายตัวหรืออาร์เรย์ปุ่ม
- การควบคุมรีเลย์และแอคทูเอเตอร์
การแก้ไขปัญหา
- ไม่มีการตอบสนองจากโมดูล: ตรวจสอบการเชื่อมต่อ I2C และการกำหนดค่าที่อยู่
- การอ่านที่ไม่สอดคล้องกัน: ตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟที่เสถียรและตัวต้านทานแบบดึงขึ้นที่เหมาะสมสำหรับสาย I2C
- พฤติกรรมพินไม่ถูกต้อง: โหมด PIN ตรวจสอบสองครั้ง (อินพุต/เอาต์พุต) ในรหัส
บทสรุป
คุณสามารถเชื่อมต่อ PCF8575 I/O expander กับ Arduino ได้สำเร็จช่วยให้คุณสามารถควบคุมหรืออ่านจากหมุด GPIO เพิ่มเติม 16 ตัว ทดลองกับอุปกรณ์ต่อพ่วงที่แตกต่างกันและขยายโครงการของคุณด้วยโมดูลอเนกประสงค์นี้!





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
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’