Skip to content
Back to skills

Raspberry Pi Gpio

ASecurity

在树莓派中配置和使用GPIO. 何时触发: 需要对 LED, Button 这类简单外设进行控制时, 需要对 Servo, Motors 进行简单控制时, 或需要直接控制GPIO时. 不要触发: 当硬件载体不是树莓派时, 当需要精确控制 Servo, Motors时.

  • 33 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 30, 2026
documentationpythonbashapi

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 30, 2026

npx -y skills add dvcrn/openclaw-skills-marketplace --skill raspberry-pi-gpio --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Raspberry Pi Gpio?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Raspberry Pi Gpio
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dvcrn-raspberry-pi-gpio/badge)](https://www.skillsdirectory.com/skills/dvcrn-raspberry-pi-gpio)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: raspberry-pi-gpio
description: "在树莓派中配置和使用GPIO. 何时触发: 需要对 LED, Button 这类简单外设进行控制时, 需要对 Servo, Motors 进行简单控制时, 或需要直接控制GPIO时. 不要触发: 当硬件载体不是树莓派时, 当需要精确控制 Servo, Motors时."
---

# Raspberry Pi GPIO Skill

如果需要了解有关 GPIO 硬件的信息, 请参阅 [GPIO 硬件](references/raspberry-pi-gpio.md).

使用 gpiozero 库可以轻松地用 Python 控制 GPIO 设备.  
gpiozero 是其他 GPIO 库(RPi.GPIO, pigpio, lgpio)的封装。它提供了一个通用的 API,这样就可以使用任何适合的后端库,而无需更改代码。

随着树莓派硬件(特别是 Raspberry Pi 5)的架构演变, lgpio 正在逐渐取代 RPi.GPIO 成为新的标准.  
自 Release 2.0 (2023-09-12) 起, lgpio 是 gpiozero 的默认后端.

RPi.GPIO 是树莓派早期的经典 GPIO 库, 直接通过访问硬件寄存器(/dev/mem)来控制引脚.  
而 lgpio 是基于现代 Linux 内核的 gpiochip 接口开发的库, 不依赖特定的硬件地址.

## 首次使用前检查

### gpiozero 

gpiozero 在树莓派操作系统中已经默认安装.  
如果发现没有安装, 则执行下列命令进行安装: 

```bash
sudo apt update
sudo apt install python3-gpiozero
```

### rpi-lgpio

rpi-lgpio 在莓派操作系统中已经默认安装.  
如果发现没有安装, 则需要检查 RPi.GPIO 是否已经安装了。
**因为不能在同一 Python 环境中同时安装 rpi-lgpio 和 rpi-gpio, 因为这两个包都试图安装一个名为 RPi.GPIO 的模块**

如果硬件是 **Raspberry Pi 5** 之前的系列, 可以直接使用 RPi.GPIO.  
否则需要先卸载 RPi.GPIO: 

```bash
sudo apt remove python3-rpi.gpio
```

再执行下列命令进行安装 rpi-lgpio: 

```bash
sudo apt update
sudo apt install python3-rpi-lgpio
```

### RPi.GPIO

如果硬件是 **Raspberry Pi 5** 或之后的系列, 则 RPi.GPIO 已经不能使用, 必须需要安装 rpi-lgpio

RPi.GPIO 在旧版的莓派操作系统中已经默认安装. 

如果发现没有安装, 因为 RPi.GPIO 已经不推荐使用,如果 Linux 内核支持 gpiochip, 则直接安装 rpi-lgpio.  
否则执行下列命令进行安装 RPi.GPIO: 

```bash
sudo apt update
sudo apt install python3-rpi.gpio
```

## 使用 gpiozero

gpiozero 是一个用于树莓派 GPIO 设备的简单接口.  
该库包含了许多简单日常组件的接口,还有一些更复杂的东西,比如传感器、模数转换器、全彩 LED、机器人套件等等.

### GPIO输入 - 读取按钮

```python
from gpiozero import Button
from time import sleep

button = Button(17, pull_up=True)

while True:
    if button.is_pressed:
        print("按钮被按下!")
    sleep(0.1)
```

### GPIO输出 - 控制LED

```python
from gpiozero import LED
from time import sleep

led = LED(18)

# LED闪烁
try:
    while True:
        led.on()
        sleep(0.5)
        led.off()
        sleep(0.5)
except KeyboardInterrupt:
    pass
```

### 事件处理 - 按钮回调

```python
from gpiozero import Button, LED
from signal import pause

button = Button(17)
led = LED(18)

# 按下开灯,松开关灯
button.when_pressed = led.on
button.when_released = led.off

pause()  # 保持程序运行,等待事件
```

### PWM控制

```python
from gpiozero import PWMLED, Servo
from time import sleep

# LED亮度渐变
led = PWMLED(18)
for b in range(0, 101, 5):
    led.value = b / 100
    sleep(0.1)

# 舵机控制
servo = Servo(18)
servo.value = -1   # 0度
sleep(0.5)
servo.value = 0    # 90度
sleep(0.5)
servo.value = 1    # 180度
servo.detach()  # 停止脉冲
```

## 使用 lgpio

lgpio 是树莓派的现代GPIO库, 使用 `/dev/gpiochip` Linux标准接口, 是gpiozero的默认后端.  
仅当遇到 gpiozero 实现不了的复杂需求时, 才能使用它. 

### GPIO基础操作

```python
import lgpio

# 打开 gpiochip0
h = lgpio.gpiochip_open(0)

# 配置GPIO12为输出
lgpio.gpio_claim_output(h, 12)
lgpio.gpio_write(h, 12, 1)  # 高电平
lgpio.gpio_write(h, 12, 0)  # 低电平

# 配置GPIO17为输入(带内部上拉)
lgpio.gpio_claim_input(h, 17, lgpio.SET_PULL_UP)
value = lgpio.gpio_read(h, 17)

# 释放资源
lgpio.gpio_free(h, 12)
lgpio.gpiochip_close(h)
```

### PWM控制

```python
import lgpio

h = lgpio.gpiochip_open(0)

# 在GPIO12上启动PWM: 50Hz, 7.5%占空比
lgpio.tx_pwm(h, 12, 50, 7.5)

# 停止PWM
lgpio.tx_pwm(h, 12, 0, 0)

lgpio.gpiochip_close(h)
```

### 舵机控制

```python
import lgpio
import time

h = lgpio.gpiochip_open(0)

# 脉宽对应角度: 500us=0°, 1500us=90°, 2500us=180°
lgpio.tx_servo(h, 12, 1500)   # 90度
time.sleep(1)
lgpio.tx_servo(h, 12, 500)    # 0度
time.sleep(1)
lgpio.tx_servo(h, 12, 2500)   # 180度

# 停止发送脉冲
lgpio.tx_servo(h, 12, 0)
lgpio.gpiochip_close(h)
```

⚠️ **注意**: `tx_servo` 使用软件定时,会有轻微抖动,仅适合测试。长期使用建议配置硬件PWM。

### 中断/回调

```python
import lgpio

def callback(chip, gpio, level, timestamp):
    """
    中断回调函数
    level: 0=低电平, 1=高电平, 2=边沿变化
    """
    print(f"GPIO {gpio} 状态变为 {level}")

h = lgpio.gpiochip_open(0)

# 配置GPIO17为输入
lgpio.gpio_claim_input(h, 17, lgpio.SET_PULL_UP)

# 添加边沿检测回调
# BOTH_EDGES: 双边沿触发
# RISING_EDGE: 上升沿触发
# FALLING_EDGE: 下降沿触发
cb = lgpio.callback(h, 17, lgpio.BOTH_EDGES, callback)

# 程序运行中...
# 停止回调: cb.cancel()

lgpio.gpiochip_close(h)
```

## 更多示例与故障排错

- 尝试通过 `web_search` 获取更多信息
- 尝试通过 `web_fetch` 访问官方文档来获取精确信息

参考文档:

- [gpiozero](https://gpiozero.readthedocs.io)
- [rpi-lgpio](https://rpi-lgpio.readthedocs.io)

Files in this skill

  • SKILL.md5.7 KB
  • references/raspberry-pi-gpio.md7.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…