树莓派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,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))  

 

 

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...