คำตอบสั้น ๆ
ไม่คุณ (เกือบ) ไม่ จริง ๆ แล้วมันเป็นวิธีอื่น ๆ - คุณต้องตั้งค่าให้ไม่ใช่ GPIO แต่เพื่อให้บริการตามวัตถุประสงค์พิเศษของพวกเขา ข้อยกเว้นเพียงอย่างเดียวคือพิน UART นอกจากนี้และI²Cหมุดพิเศษอย่างใด
หมุด UART
พิน UART ถูกใช้โดยเคอร์เนลสำหรับคอนโซล คุณจะต้องกำหนดค่าระบบเพื่อไม่ให้ใช้หากคุณต้องการให้ระบบพร้อมใช้งาน:
ตอนนี้ระบบไม่ควรใช้พินและคุณสามารถใช้พินได้
I²Cพิน
หมุดI²Cติดตั้งตัวต้านทานแบบดึงขึ้นบน 1.8k พวกเขาไม่สามารถปิดการใช้งาน สิ่งนี้ จำกัด การใช้งานพินเหล่านั้นในบางสถานการณ์ (แต่อาจมีประโยชน์ในบางกรณี)
โซลูชั่นเพิ่มเติม
หากใช้พิน GPIO ต่ำบางครั้งคุณสามารถขยายจำนวนได้อย่างง่ายดายโดยใช้ฮาร์ดแวร์เพิ่มเติม (แต่ง่าย) สำหรับตัวอย่างผลลัพธ์คุณสามารถใช้shift registers
หรือI²C I/O expanders
( หรือเรียกอีกอย่างว่า `ตัวขยายบัสI²C) ซึ่งทั้งง่ายต่อการซื้อและใช้ คุณสามารถหาตัวอย่างของการใช้งานมันนี่
PFC8574
(หรือคล้ายกันจากตระกูลนี้) ได้รับความนิยมมากจนมีโมดูลเคอร์เนลที่พร้อมใช้งานสำหรับจัดการการสื่อสารทั้งหมดสำหรับคุณ ( ไม่ได้เปิดใช้งานในเคอร์เนล RaspberryPi อย่างเป็นทางการคุณจะต้องรวบรวมเคอร์เนลของคุณเองเพื่อใช้ ) โมดูลนี้เรียกว่าgpio_pcf857x
โดยที่คุณโหลดด้วยmodprobe
(พร้อมกับไดรเวอร์I²C) และคุณมีชิปที่เชื่อมต่อกับI²C
บัสคุณสามารถเปิดใช้งานได้ดังนี้:
echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device
ที่pcf8574
เป็นชื่อชิปจริงของคุณ (โมดูลนี้สามารถจัดการชิปที่แตกต่างกันเช่นpca967x
และmax732x
) และ0x27
เป็นที่อยู่I²C
(คุณสามารถกำหนดค่าที่อยู่ของชิปเมื่อเดินสายได้)
สิ่งนี้จะสร้างรายการใน/sys/class/gpio/
ไดเรกทอรีที่จะช่วยให้คุณใช้งานได้เช่นเดียวกับพอร์ต GPIO อื่น ๆ ใน RaspberryPi ซึ่งจะให้คุณใช้sys
อินเทอร์เฟซ (ตัวอย่างเช่นwiringPiSetupSys()
wiringPi) น่าเสียดายที่RPi.GPIO
โมดูลPython ไม่รองรับโหมดนี้ดังนั้นจึงไม่สามารถใช้พินนี้กับห้องสมุดนี้ได้ หมุดจะมีตัวเลขสูงเช่น 248-255 หรือคล้ายกัน
หมายเหตุ: PCF8574
คือsinking current
- สามารถให้ไดรฟ์ซิงค์ (ยอมรับในสถานะต่ำ) มากถึง 20mA แต่สามารถแหล่ง 0.1mA ในสถานะสูงเท่านั้น +3.3V -> LED -> RESISTOR -> PCF8574_PIN
ซึ่งหมายความว่าคุณมักจะไปใช้ในตรรกะย้อนกลับคือ