如何在Raspberry Pi 2中使用后释放频道?

时间:2015-10-15 14:34:27

标签: python raspberry-pi raspberry-pi2

我是Raspberry Pi的新手,我正试图通过打开和关闭引脚来使电机正常工作。它运行正常,但是当我尝试设置引脚时,我收到了这些警告:

test2.py:17: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(pin1,GPIO.OUT)
test2.py:18: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(pin2,GPIO.OUT)
test2.py:19: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(pin3,GPIO.OUT)

由于电机仍在工作,似乎没有引起任何问题,但是如果可能的话我想摆脱它们。

我想我需要在程序结束时以某种方式释放pin频道,但我该怎么办呢?

有关信息,这是我的完整程序:

import RPi.GPIO as GPIO
import time
import sys

pin1=17
pin2=18
pin3=27
pin4=22

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin1,GPIO.OUT)
GPIO.setup(pin2,GPIO.OUT)
GPIO.setup(pin3,GPIO.OUT)
GPIO.setup(pin4,GPIO.OUT)

Apin1=[0,1,0,0,1]
Apin2=[0,1,1,0,0]
Apin3=[0,0,1,1,0]
Apin4=[0,0,0,1,1]
current=0
target=0

def GO_THERE(target,current):
    if current<target:
        while current<target:
            i=current&2 + 1
            GPIO.output(pin1,Apin1[i])
            GPIO.output(pin2,Apin2[i])
            GPIO.output(pin3,Apin3[i])
            GPIO.output(pin4,Apin4[i])
            time.sleep(.003)
            current= current + 1
    else:
        while current>target:
            i=current&2 + 1
            GPIO.output(pin1,Apin1[i])
            GPIO.output(pin2,Apin2[i])
            GPIO.output(pin3,Apin3[i])
            GPIO.output(pin4,Apin4[i])
            time.sleep(.003)
            current= current - 1
    print current,target
    return current;

target=4096
current=GO_THERE(target,current)

1 个答案:

答案 0 :(得分:3)

您应该在程序结束时致电GPIO.cleanup()

import RPi.GPIO as GPIO  

# your init code 
try:  
    # your main loop

except KeyboardInterrupt:  
    #  handle ctrl-c

except:  
    #  other exceptions


finally:  
    GPIO.cleanup()

正如RPi.GPIO basics 3 – How to Exit GPIO programs cleanly, avoid warnings and protect your Pi所述:

  

RPi.GPIO提供内置函数GPIO.cleanup()来清理所有内容   您使用过的端口。但要清楚这是做什么的。它只是   影响您在当前程序中设置的任何端口。它重置任何   您在此程序中使用的端口返回输入模式。这可以防止   例如,您将端口设置为HIGH的情况下的损坏   输出,你不小心将它连接到GND(低),这将   将端口短路并可能将其煎炸。输入可以处理   0V(低电平)或3.3V(高电平),因此将端口作为输入更安全。

并且GPIO.cleanup()无法清除所有端口,因为:

  

如果它确实清理了所有端口,这意味着你可以拥有专业   不同程序之间的冲突,甚至可能都没有尝试   使用相同的端口。显然,这不是一个理想的情况!


P.S。:有Raspberry Pi StackExchange