基于树莓派的python GPIO编程 |
您所在的位置:网站首页 › gpio概述 › 基于树莓派的python GPIO编程 |
Hello,朋友们大家好,欢迎大家来到LIUSE网络。 随着Mini型PC越来越多,与之而来的创客也丰富起来,比如说Arduino就是一个非常好里例子。 不过,Arduino毕竟是一块适合入门型的基础开发板,无论是从性能上,还是处理复杂问题的实现上,其本身都是有限的。所以有些时候我们会考虑成本更高的卡片式PC,类似于树莓派、香蕉派、橙子派等等。 话虽然可以这么说,但作为PC跟GPIO一体的板卡,有些朋友刚拿到手确实是不知道何从下手,更不知道如何去控制各个GPIO引脚,那今天的文章,鄙人就综合的说一下常用的函数等等,其实好多地方跟Arduino的代码是很相似的。 在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴 先说库文件: 树莓派我们编程一般都直接用高效的python,针对于GPIO编程,python也是有这一方面的库的,这里最有名也是最常用的就是RPI.GPIO了。这个库是专门为树莓派GPIO编程所设计的,利用它你可以愉快的像Arduino那样轻松控制GPIO管脚。 安装: sudo apt-get -y python-pip #安装pip sudo pip install rpi.gpio #安装RPI.GPIO 安装完成后在实际运用的时候,我们也会像arduino那样去设置输入输出,设置高低电平,获取针脚值等等,那下面我就把整理的内容函数都贴出来。 在这说一下管脚,拿到树莓派之后你会发现板子上有两排管脚,这对应这什么呢?请看下图: (管脚对应) 当然如果说你的版本不同可能会略有差别,你同样可以使用gpio readall命令来打印出所有管脚: (打印管脚) 好,做完上面的拓扑,我们来讲一下关于GPIO编程的一些常用函数。 1.导入库: import RPi.GPIO as GPIO 2.设置引脚模式: GPIO.setmode(GPIO.BMC/BOARD) #BMC或者BOARD模式 3.设置引脚为输入: GPIO.setup(pin,GPIO.IN) 4.设置引脚为输出: GPIO.setup(pin,GPIO.OUT) 5.设置初始化高电平: GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH) 6.设置初始化为低电平: GPIO.setup(pin,GPIO.OUT,initial=GPIO.LOW) 当然python的好处是可以创建一个列表,然后将列表带入函数中,使其一次性执行多个针脚的输入输出,如: PinList=[pin1,pin2,pin3] GPIO.setup(PinList,GPIO.IN) 通过创建一个列表将列表中加入引脚的定义,实现多引脚同时设定为输入。 读取输入值: GPIO.input(pinx) #input()方法可以读取pinx引脚的值 当然前提是你的引脚接了一些传感器,比如温度传感器,光线传感器等等。 上下拉: 先说什么是上下拉 上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。下拉就是输入低电平,然后接一个下拉电阻。 我们在做管脚的上下拉时,在电路设计上一般都是加上下拉电阻,但在树莓派身上如何不改变电路通过python去控制呢? 在python的GPIO初始化上可以用GPIO.setup(pinx,GPIO.IN,pull_up_down=GPIO.PUD_UP/GPIO.DOWN)来控制上下拉。 设置中断: 设置终端通常有两种方法,一种是wait_for_edge(),另一种为add_event_detect(),我们下面来介绍一下这两个中断。 1.wait_for_edge():用于检测到边沿之前阻止程序运行 举个例子: channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000) if channel is None: print('Timeout occurred') else: print('Edge detected on channel', channel) 延时5秒,如果超时,程序继续执行,如果没有超时将继续等待。 2.add_event_detect():对一个引脚进行监听,一旦引脚输入发生了改变,调用event_detected()函数会返回True 举个例子: GPIO.add_event_detect(channel, GPIO.RISING) do_something() if GPIO.event_detected(channel): print('Button pressed') add_event_detect()多用于循环状态,并且它不会错过循环中输入状态的改变,多用在PyQt上。 PWM脉冲调节: PWM这个多用在控制电机上,特别是对我们做树莓派小车对小车的控制上有很大的帮助。 我们用一个实例去说明: Pwm=GPIO.PWM(pin,frequence) #创建PWM实例 Pwm.start(dc) #启动PWM dc值(0.0 Pwm.ChangeFrequency(freq) #改变PWM频率 Pwm.ChangeDutyCycle(dc) # 改变PWM的占空比0.0 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |