我刚刚开始学习如何使用树莓派。我在使用树莓派时遇到的第一个问题是,由于硬件变化,最常见的库(所有教程都使用的库)RPi.GPIO 无法与树莓派 5 一起使用。这意味着我必须使用支持新硬件(例如 gpiod 或 GPIOZERO)的库。我被告知使用 GPIOZERO,因为它对初学者更友好,并且具有更多功能,如 pwm 和内置上拉电阻。
在尝试使用 GPIOZERO 库打开 LED 时,我遇到了一个问题,我的代码没有使 GPIO 引脚输出任何电压(我用万用表进行了测试)。这是我的Python代码:
from gpiozero import LED
led = LED(17)
led.on()
当我尝试使用 gpiod 库时,它工作得很好: 这是代码:
import gpiod
LED_PIN = 17
chip = gpiod.Chip('gpiochip4')
led_line = chip.get_line(LED_PIN)
led_line.request(consumer="LED", type=gpiod.LINE_REQ_DIR_OUT)
led_line.set_value(1)
我长期不想使用gpiod库的原因是我很确定它不支持内部上拉电阻或pwm。
我想知道这是否是树莓派5上的新芯片系统的问题。有谁知道我该如何解决这个问题?
我尝试将 gpio 引脚从 17 切换到 11,没有任何变化,我尝试研究这是否与新芯片系统有关,但我发现这个确切的代码和接线适用于其他 Pi 5 用户。
经过多次尝试解决这个问题,我发现解决方案在 猫/系统/内核/调试/gpio 这将显示 pi5 的引脚排列 这是一个例子
GPIO-586(GPIO15) GPIO-587(GPIO16) GPIO-588(GPIO17) GPIO-589 (GPIO18) GPIO-590(GPIO19) GPIO-591(GPIO20) GPIO-592(GPIO21) GPIO-593(GPIO22) 所以你可以看到GPIO17是gpio-588 所以当我在代码中使用它时它工作得很好 这是我的代码
const Gpio = require('onoff').Gpio; // Import the onoff library
const led = new Gpio(17, 'out'); // Set GPIO pin 588 instead of 17
// Turn the LED on
led.writeSync(1);
console.log('LED ON');
// Wait for 1 second, then turn the LED off
setTimeout(() => {
led.writeSync(0); // Turn the LED off
console.log('LED OFF');
led.unexport(); // Clean up GPIO
}, 1000);
所以这条线将是
const led = new GPIO(588, 'out');
而不是 const led = new GPIO(27, 'out');