zoukankan      html  css  js  c++  java
  • 树莓派GPIO口的使用

     

    树莓派的优势在于Liunx操作系统加GPIO口,其中IO口时物联网组成中不可缺少的,高低电平的控制是很有必要的存在,再加有python的支持,玩转GPIO相对就容易多了

     

    管脚编号

    BCM: 编号侧重 CPU 寄存器,根据 BCM2835 的 GPIO 寄存器编号。

    wpi: 编号侧重实现逻辑,把扩展 GPIO 端口从 0 开始编号,这种编号方便编程。正如下图 WiringPi 栏。

    引脚物理编号排序:方形焊接口为1脚,两两为序,先短后长

      配置GIPO为输出

    1、首先对 RPi.GPIO 进行设置

     

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BOARD) #物理引脚编码

    GPIO.setup(12, GPIO.OUT)

    2、设置某个输出针脚状态为高电平:

     

    GPIO.output(12, GPIO.HIGH)

    # 或者

    GPIO.output(12, 1)

    # 或者

    GPIO.output(12, True)

    3、设置某个输出针脚状态为低电平:

     

    GPIO.output(12, GPIO.LOW)

    # 或者

    GPIO.output(12, 0)

    # 或者

    GPIO.output(12, False)

     

    4、程序结束后进行清理

     

    GPIO.cleanup()

    注意,您可以读取使用 input() 函数设置的输出通道的当前状态。例如对输出进行切换:

     

    GPIO.output(12, not GPIO.input(12))#输出电平取反

     

     配置GIPO为输入:

    1、首先对 RPi.GPIO 进行设置:

     

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BOARD)#物理引脚编码

    GPIO.setup(12, GPIO.IN)

    2、判断输入电平状态:

      GPIO.input(12)#返回0/GPIO.LOW/False/1/GPIO.HIGH/True


    3
    、上下拉配置:

     

    GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)//上拉

      # 或者

    GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)//下拉

    4、轮询检测:

     

    while GPIO.input(12) == GPIO.LOW:

    time.sleep(0.01)

     5、边缘检测1: GPIO.RISING(上升)、GPIO.FALLING(下降)、GPIO.BOTH(两者均可)

     

    #在规定时间内等待电平变化,占用主线程

    channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

    if channel is None:    #无变化

        print('Timeout occurred')

    else:     #上升沿变化

        print('Edge detected on channel', channel)

    6、边缘检测2:

     

    #程序运行周期内,捕捉和处理都是独立线程,不占用主线程,推荐

    def my_callback_one(channel):#channel传递的值为引脚编号

        print('Callback one')

     

    def my_callback_two(channel):

        print('Callback two')

     

    GPIO.add_event_detect(channel, GPIO.RISING)

    GPIO.add_event_callback(channel, my_callback_one)

    GPIO.add_event_callback(channel, my_callback_two)

    7、程序结束后进行清理

      GPIO.cleanup()  #释放引脚

     

     配置GIPO的PWM输出:

    1、首先对 RPi.GPIO 进行设置:

     

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BOARD)

    GPIO.setup(12, GPIO.OUT)#输出

    p = GPIO.PWM(12, 50)     #创建一个 PWM 实例:通道,频率(一般为50HZ,可为100HZ)

     2、启用 PWM:

      p.start(dc)   # dc 代表占空比(范围:(熄灭)0.0 <= dc >= 100.0(最亮))

     3、更改频率:

      p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

    4、更改占空比:

      p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc >= 100.0

     5、停止PWM:

     

    p.stop() #停止 PWM

    GPIO.cleanup()#释放

    一次性设置多个引脚

     

    chan_list = [11,12]

    GPIO.output(chan_list, GPIO.LOW)

    GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))  


     

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/9877734.html
Copyright © 2011-2022 走看看