You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派/香橙派GPIO控制代码未按预期执行,需排查原因

树莓派GPIO无响应:硬件排查方向

问题背景

我编写了用于树莓派GPIO交互的Python代码,预期无输入时输出引脚为高电平,有输入时为低电平,但开发板GPIO未执行设定逻辑。修正代码后,GPIO依然无响应,请问需要考虑哪些硬件方面的问题?

原始代码

def gpio_control_on():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(10, GPIO.OUT)
    GPIO.setup(12, GPIO.OUT)
    GPIO.setup(16, GPIO.OUT)

    GPIO.output(10, GPIO.LOW)

    # Delay only once when transitioning to ON state for GPIO 16 and GPIO 18
    if not GPIO.input(10):  # Check if GPIO 15 is LOW (was OFF)
        GPIO.output(12, GPIO.HIGH)  # Set GPIO 18 to HIGH
        GPIO.output(16, GPIO.HIGH)  # Set GPIO 19 to HIGH
        time.sleep(0.5)  # Delay
        GPIO.output(12, GPIO.LOW)  # Set GPIO 18 to LOW
        GPIO.output(16, GPIO.LOW)  # Set GPIO 19 to LOW

    GPIO.cleanup()

def gpio_control_off():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(10, GPIO.OUT)
    GPIO.setup(12, GPIO.OUT)
    GPIO.setup(16, GPIO.OUT)

    GPIO.output(10, GPIO.HIGH)

    # Delay only once when transitioning to OFF state for GPIO 16 and GPIO 18
    if GPIO.input(10):  # Check if GPIO 112 is HIGH (was ON)
        GPIO.output(12, GPIO.HIGH)  # Set GPIO 18 to HIGH
        GPIO.output(16, GPIO.HIGH)  # Set GPIO 19 to HIGH
        time.sleep(0.5)  # Delay
        GPIO.output(12, GPIO.LOW)  # Set GPIO 18 to LOW
        GPIO.output(16, GPIO.LOW)  # Set GPIO 19 to LOW

    GPIO.cleanup()

def gpio_control():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(24, GPIO.IN)

    pin5_value = GPIO.input(5)

    if pin5_value == GPIO.HIGH:
        gpio_control_on()
    else:
        gpio_control_off()

    time.sleep(1)

    GPIO.cleanup()

修正后的代码

import OPi.GPIO as GPIO
import time

def gpio_control_on():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(10, GPIO.OUT)
    GPIO.setup(12, GPIO.OUT)
    GPIO.setup(16, GPIO.OUT)

    GPIO.output(10, GPIO.LOW)

    # Delay only once when transitioning to ON state for GPIO 16 and GPIO 18
    if not GPIO.input(24):  # Check if GPIO 8 is LOW (was OFF)
        GPIO.output(12, GPIO.HIGH)  # Set GPIO 12 to HIGH
        GPIO.output(16, GPIO.HIGH)  # Set GPIO 16 to HIGH
        time.sleep(0.5)  # Delay
        GPIO.output(12, GPIO.LOW)  # Set GPIO 12 to LOW
        GPIO.output(16, GPIO.LOW)  # Set GPIO 16 to LOW

    GPIO.cleanup()

def gpio_control_off():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(10, GPIO.OUT)
    GPIO.setup(12, GPIO.OUT)
    GPIO.setup(16, GPIO.OUT)

    GPIO.output(10, GPIO.HIGH)

    # Delay only once when transitioning to OFF state for GPIO 16 and GPIO 18
    if GPIO.input(24):  # Check if GPIO 8 is HIGH (was ON)
        GPIO.output(12, GPIO.HIGH)  # Set GPIO 12 to HIGH
        GPIO.output(16, GPIO.HIGH)  # Set GPIO 16 to HIGH
        time.sleep(0.5)  # Delay
        GPIO.output(12, GPIO.LOW)  # Set GPIO 12 to LOW
        GPIO.output(16, GPIO.LOW)  # Set GPIO 16 to LOW

    GPIO.cleanup()

def gpio_control():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(24, GPIO.IN)

    pin24_value = GPIO.input(24)

    if pin24_value == GPIO.HIGH:
        gpio_control_on()
    else:
        gpio_control_off()

    time.sleep(1)

    GPIO.cleanup()

# Call the gpio_control function
gpio_control()

硬件排查方向

  • 引脚连接错误:确认BOARD编号对应的物理引脚是否与实际接线一致,逐一核对引脚10、12、16、24的物理位置,排查是否接错引脚。
  • 输入引脚浮空问题:引脚24作为输入,若未外接上拉/下拉电阻,可能处于浮空状态导致电平不稳定。可外接10kΩ上拉电阻到3.3V,或尝试在代码中配置内部上拉(如果库支持pull_up_down参数)。
  • 输出负载过载:检查引脚10、12、16连接的设备是否超出GPIO驱动能力(树莓派单GPIO最大输出电流约16mA,总电流有限制),负载过重会导致电平异常。
  • GPIO硬件损坏:用万用表测量引脚输出电平,或更换其他GPIO引脚测试,排查是否因静电、过流导致引脚烧坏。
  • 电源供应不足:确认开发板电源适配器的输出电压、电流符合要求,供电不稳定会导致GPIO模块工作异常。
  • 接线接触不良:检查所有杜邦线、端子连接是否牢固,排查有无松动、氧化情况,尤其是输入引脚24的接线,接触不良会导致输入信号错误。

内容的提问来源于stack exchange,提问作者Wan Ammar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:55:54