linux如何读取gpio数据
linux如何读取gpio数据详细介绍
在 Linux 系统中读取 GPIO 数据通常有两种主流方式:通过 sysfs 接口(传统方法)和使用 libgpiod 库(现代方法)。以下分别说明实现方式。
一、通过
sysfs 接口读取 GPIO(适合简单场景)
sysfs 是 Linux 内核提供的虚拟文件系统,可通过操作文件的方式控制 GPIO。
操作步骤(以读取 GPIO17 为例,需 root 权限):
- 导出 GPIO
向gpio_export文件写入 GPIO 编号(如 17),将其暴露到用户空间:
bash/sys/class/gpio/export执行后会生成
/sys/class/gpio/gpio17目录。 - 设置 GPIO 方向为输入
向direction文件写入in(输入模式):
bash/sys/class/gpio/gpio17/direction - 读取 GPIO 数值
读取value文件(返回0或1,分别表示低 / 高电平):
bash/sys/class/gpio/gpio17/value - 清理(可选)
若不再使用,向gpio_unexport文件写入 GPIO 编号释放资源:
bash/sys/class/gpio/unexport
二、通过
libgpiod 库读取 GPIO(推荐现代开发)
libgpiod 是 Linux 官方推荐的 GPIO 操作库,支持更灵活的编程控制(如批量读取、事件监听)。需先安装库:
bash
gpiod libgpiod-dev
以下是 Python 示例代码(需 gpiod 库,Python 3.9+):
V1
说明
sysfs优缺点:简单易用,但性能较低(每次操作需读写文件),适合临时或简单场景。libgpiod优缺点:支持高效编程(如异步事件监听),适合复杂应用(如嵌入式设备控制),但需要一定编程基础。- 注意:不同硬件平台的 GPIO 编号可能不同(如树莓派、STM32 等),需根据具体硬件文档确认
gpiochip名称和line_offset(即 GPIO 编号)。