树莓派的优势在于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))#输出电平取反
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、程序结束后进行清理
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:
3、更改频率:
4、更改占空比:
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))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)