介绍
最新旗舰单板计算机,搭载BCM2712四核Cortex-A76 2.4GHz、VideoCore VII GPU、4GB/8GB LPDDR4X RAM、双4Kp60 HDMI输出、PCIe 2.0 x1接口、千兆以太网、双频WiFi 5/BT 5.0、USB 3.0×2+USB 2.0×2、40Pin GPIO、支持RTC电池供电
最新旗舰单板计算机,搭载BCM2712四核Cortex-A76 2.4GHz、VideoCore VII GPU、4GB/8GB LPDDR4X RAM、双4Kp60 HDMI输出、PCIe 2.0 x1接口、千兆以太网、双频WiFi 5/BT 5.0、USB 3.0×2+USB 2.0×2、40Pin GPIO、支持RTC电池供电
| 参数 | 值 |
|---|---|
| CPU | BCM2712 四核 Cortex-A76 @ 2.4GHz |
| GPU | VideoCore VII @ 800MHz |
| RAM | 4GB/8GB LPDDR4X-4267 |
| USB | 2×USB 3.0 (5Gbps) + 2×USB 2.0 |
| GPIO | 40Pin标准树莓派排针 |
| PCIe | PCIe 2.0 x1 (FPC连接器) |
| 存储 | MicroSD卡槽,支持高速SDR104模式 |
| 尺寸 | 85×56mm |
| 电源 | 5V/5A (USB-PD),主动散热风扇接口 |
| 网络 | 千兆以太网 + 双频802.11ac WiFi 5 + BT 5.0/BLE |
| 实时时钟 | 内置RTC,支持外接电池 |
| 视频输出 | 双micro-HDMI 4Kp60 |
# 树莓派 5 GPIO 编程例程
树莓派 5 使用 RP1 南桥控制 GPIO,推荐使用 **libgpiod** 或 **gpiozero**(底层已适配 RP1)。传统 RPi.GPIO 可能不完全兼容。
---
## 示例 1:Python gpiozero — LED 闪烁
```python
#!/usr/bin/env python3
"""树莓派5 LED闪烁 — gpiozero版"""
from gpiozero import LED
from time import sleep
import signal
led = LED(17) # BCM编号 GPIO17 (Pin 11)
try:
print("LED开始闪烁,Ctrl+C 退出")
while True:
led.on()
sleep(0.5)
led.off()
sleep(0.5)
except KeyboardInterrupt:
print("\n退出")
finally:
led.close()
```
## 示例 2:Python libgpiod — GPIO 控制(原生 RP1 支持)
```python
#!/usr/bin/env python3
"""树莓派5 GPIO控制 — libgpiod(推荐)"""
import gpiod
import time
CHIP = "/dev/gpiochip4" # RP1 的 gpiochip,Pi5 上固定为 gpiochip4
LINE = 17 # BCM GPIO17
chip = gpiod.Chip(CHIP)
line = chip.get_line(LINE)
line.request(consumer="blink", type=gpiod.LINE_REQ_DIR_OUT)
try:
print(f"GPIO{LINE} 闪烁中...")
while True:
line.set_value(1)
time.sleep(0.5)
line.set_value(0)
time.sleep(0.5)
except KeyboardInterrupt:
print("\n退出")
finally:
line.set_value(0)
line.release()
chip.close()
```
## 示例 3:Shell — gpioset/gpioget 命令行控制
```bash
#!/bin/bash
# 树莓派5 命令行 GPIO 控制
CHIP="gpiochip4"
PIN=17
# 设置 GPIO17 为输出、高电平
gpioset $CHIP $PIN=1
echo "GPIO$PIN → HIGH"
sleep 2
# 低电平
gpioset $CHIP $PIN=0
echo "GPIO$PIN → LOW"
# 读 GPIO27(Pin 13),先设为输入
gpioget $CHIP 27
echo "GPIO27 输入值: $?"
```
## 示例 4:C 语言 — libgpiod 读取按键
```c
/*
* 树莓派5 按键读取 — libgpiod C API
* 编译: gcc -o button button.c -lgpiod
* 运行: ./button
*/
#include <gpiod.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CHIP_NAME "/dev/gpiochip4"
#define BUTTON_PIN 27 // BCM 27 (Pin 13)
#define LED_PIN 17 // BCM 17 (Pin 11)
int main() {
struct gpiod_chip *chip;
struct gpiod_line *btn_line, *led_line;
int btn_val, last_val = 1;
chip = gpiod_chip_open(CHIP_NAME);
if (!chip) { perror("打开 gpiochip 失败"); return 1; }
btn_line = gpiod_chip_get_line(chip, BUTTON_PIN);
led_line = gpiod_chip_get_line(chip, LED_PIN);
gpiod_line_request_input(btn_line, "button");
gpiod_line_request_output(led_line, "led", 0);
printf("等待按键按下(BCM GPIO%d)...\n", BUTTON_PIN);
while (1) {
btn_val = gpiod_line_get_value(btn_line);
if (btn_val == 0 && last_val == 1) { // 下降沿(按键按下)
printf("按键按下!LED 翻转\n");
gpiod_line_set_value(led_line, 1);
} else if (btn_val == 1 && last_val == 0) {
gpiod_line_set_value(led_line, 0);
}
last_val = btn_val;
// 简单去抖延时
struct timespec ts = {0, 5000000}; // 5ms
nanosleep(&ts, NULL);
}
gpiod_line_release(btn_line);
gpiod_line_release(led_line);
gpiod_chip_close(chip);
return 0;
}
```
## 示例 5:Python — PWM 控制(硬件 PWM)
```python
#!/usr/bin/env python3
"""树莓派5 硬件PWM — gpiozero"""
from gpiozero import PWMLED
from time import sleep
# GPIO18 (Pin 12) 和 GPIO19 (Pin 35) 支持硬件PWM
led = PWMLED(18)
try:
print("PWM 呼吸灯效果...")
while True:
# 渐亮
for duty in range(0, 101, 2):
led.value = duty / 100.0
sleep(0.02)
# 渐暗
for duty in range(100, -1, -2):
led.value = duty / 100.0
sleep(0.02)
except KeyboardInterrupt:
print("\n退出")
finally:
led.close()
```
## 示例 6:I²C 扫描总线
```python
#!/usr/bin/env python3
"""树莓派5 I2C总线扫描 — 查找设备地址"""
import smbus2
# Pi5 默认I2C总线: /dev/i2c-1 (GPIO2=SDA, GPIO3=SCL)
bus = smbus2.SMBus(1)
print("扫描 I²C 总线...")
devices = []
for addr in range(0x03, 0x78):
try:
bus.read_byte(addr)
devices.append(hex(addr))
print(f" 发现设备: 0x{addr:02X}")
except:
pass
if not devices:
print(" 未发现设备,请检查接线和 i2c_detect")
else:
print(f"扫描完成,共 {len(devices)} 个设备")
bus.close()
```
## 示例 7:SPI 回环测试
```python
#!/usr/bin/env python3
"""树莓派5 SPI回环测试 — 将MOSI短接MISO进行测试"""
import spidev
spi = spidev.SpiDev()
spi.open(0, 0) # SPI0, CE0
spi.max_speed_hz = 1000000
spi.mode = 0
# 发送数据并接收(需将MOSI(GPIO10)与MISO(GPIO9)短接)
tx_data = [0xAA, 0x55, 0x12, 0x34]
rx_data = spi.xfer2(tx_data)
print(f"发送: {[hex(x) for x in tx_data]}")
print(f"接收: {[hex(x) for x in rx_data]}")
if tx_data == rx_data:
print("✅ SPI 回环测试通过")
else:
print("❌ SPI 回环测试失败,检查接线")
spi.close()
```
---
## ⚠️ 树莓派 5 编程要点
1. **gpiochip 编号**:Pi5 使用 `/dev/gpiochip4`(RP1),而 Pi4/3 使用 `/dev/gpiochip0`。
2. **避免 RPi.GPIO**:该库未适配 RP1,推荐使用 `gpiozero`(>=2.0)或 `libgpiod`。
3. **I²C/SPI/UART**:通过 `raspi-config` 启用后,设备路径与 Pi4 一致(`/dev/i2c-1`, `/dev/spidev0.x`, `/dev/ttyAMA0`)。
4. **PWM**:硬件 PWM 仅限 GPIO12/13/18/19,共 2 通道(PWM0: GPIO12+18, PWM1: GPIO13+19)。
5. **Python 环境**:Pi5 预装 Python 3.11+,建议使用 `venv` 隔离包环境。
暂无参考文献