#!/usr/bin/env python # -*- coding: utf-8 -*- ''' # @Time : 2025/2/18 17:49 # @Author : hjw # @File : export_pin.py ''' import os import time class GPIOChipController: def __init__(self, chip_path="/sys/class/gpio/gpiochip0"): # 注意引脚分组 # 读取GPIO控制器信息 self.base = int(self._read_file(os.path.join(chip_path, "base"))) self.ngpio = int(self._read_file(os.path.join(chip_path, "ngpio"))) self.label = self._read_file(os.path.join(chip_path, "label")) print(f"GPIO控制器信息: {self.label} (base={self.base}, ngpio={self.ngpio})") def _read_file(self, path): with open(path, 'r') as f: return f.read().strip() def _write_file(self, path, value): with open(path, 'w') as f: f.write(str(value)) def export_gpio(self, offset): """导出指定控制器的GPIO引脚""" if offset < 0 or offset >= self.ngpio: raise ValueError(f"偏移量必须在0-{self.ngpio - 1}范围内") gpio_number = self.base + offset export_path = "/sys/class/gpio/export" if not os.path.exists(f"/sys/class/gpio/gpio{gpio_number}"): try: self._write_file(export_path, gpio_number) time.sleep(0.1) # 等待系统创建目录 except IOError as e: if "Device or resource busy" in str(e): print(f"GPIO{gpio_number} 已经导出") else: raise return gpio_number def setup_gpio(self, gpio_number, direction='out'): """配置GPIO方向""" direction_path = f"/sys/class/gpio/gpio{gpio_number}/direction" self._write_file(direction_path, direction) def set_gpio(self, gpio_number, value): """设置GPIO电平""" value_path = f"/sys/class/gpio/gpio{gpio_number}/value" self._write_file(value_path, 1 if value else 0) def read_gpio(self, gpio_number): """读取GPIO电平""" value_path = f"/sys/class/gpio/gpio{gpio_number}/value" return int(self._read_file(value_path)) if __name__ == "__main__": """ rk3506导出引脚 该脚本导出扩展口引脚 SAI1_SDO0(17) 对应 GPIO0_B4_d 8 + 4 = 12 """ try: # 初始化GPIO控制器 ctrl = GPIOChipController() # 导出并配置GPIO (假设控制器的base=0,偏移量B4即12) gpio_num = ctrl.export_gpio(12) ctrl.setup_gpio(gpio_num, 'out') # 引脚高低电平测试 for _ in range(10): ctrl.set_gpio(gpio_num, 1) print(f"GPIO{gpio_num} 置高") time.sleep(10) ctrl.set_gpio(gpio_num, 0) print(f"GPIO{gpio_num} 置低") time.sleep(1) except PermissionError: print("需要root权限!请使用sudo运行") except Exception as e: print(f"发生错误: {str(e)}")