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))  


     

  • 相关阅读:
    R语言代写模型中的加总偏误与内生性:一种数值模拟方法
    R语言代写NYPD纽约市警察局抢劫者数据分析
    R语言代写使用马尔可夫链Markov Chain, MC来模拟抵押违约
    BZOJ 2600: [Ioi2011]ricehub 双指针+贪心
    BZOJ 4903: [Ctsc2017]吉夫特 数论+dp
    BZOJ 4500: 矩阵 带权并查集
    草稿
    BZOJ 5082: 弗拉格 矩阵乘法
    BZOJ 4764: 弹飞大爷 LCT
    BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/9877734.html
Copyright © 2011-2022 走看看