Python自动化编程-树莓派GPIO编程(二)
树莓派我们编程一般都直接用高效的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<dc<100.0)
Pwm.ChangeFrequency(freq) #改变PWM频率
Pwm.ChangeDutyCycle(dc) # 改变PWM的占空比0.0<=dc <=100.
Pwm.stop() #停止PWM
后面我们在说几个常用的函数,比如输出、等待,并写一个控制小灯闪烁的Demo
GPIO口输出值:
GPIO.output(pinx,1/0)
1对应GPIO.HIGH(高电平)0对应GPIO.LOW(低电平)
延时函数:
time.sleep(秒数)
此函数为time库里面的,你要想使用必须在之前import time
今天暂且介绍这么多,我们下面写一个控制LED小灯闪烁的实例:
import RPi.GPIO as GPIO //引入函数库
import time
RPi.GPIO.setmode(GPIO.BOARD) //设置引脚编号规则
RPi.GPIO.setup(11, RPi.GPIO.OUT) //将11号引脚设置成输出模式
while True
GPIO.output(channel, 1) //将引脚的状态设置为高电平,此时LED亮了
time.sleep(1) //程序休眠1秒钟,让LED亮1秒
GPIO.output(channel, 0) //将引脚状态设置为低电平,此时LED灭了
time.sleep(1) //程序休眠1秒钟,让LED灭1秒
Python自动化编程-树莓派GPIO编程(二)的更多相关文章
- 7、树莓派编程;gpio编程;led闪烁
本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ12226981 1.树莓派接口对照,一定要找到对应的引脚,不要接错了.我画上箭头. 2.安装 下载地址,https://git.drogon.n ...
- Python自动化运维开发实战 二、Python基本用法
导语: Python编程博大精深,知识点众多,需要先整体上了解python的一些基本用法之后再去对每一个知识点细细研究,这样学习的速度会快很多.所以下面就先看一些python事先需要知道的基本知识. ...
- Python自动化运维 - Django(二)Ajax基础 - 自定义分页
Ajax基础 AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. 什么是Ajax AJAX = 异步 Java ...
- python自动化之models 进阶操作二
################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...
- 【目录】Python自动化运维
目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...
- Selenium2+python自动化23-富文本(自动发帖)
前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴遇到了不知道无从下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容 一.加载配置 1.打开博客园写随笔,首先需要登录,这里为了 ...
- Selenium2+python自动化24-js处理富文本(带iframe)
前言 上一篇Selenium2+python自动化23-富文本(自动发帖)解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的 ...
- python自动化工具之pywinauto(一个实例)结合pyuserinput
以下是pywinauto使用指南.这个窗口句柄可以在Spy++中查看 (Microsoft Spy++(查看窗口句柄) 10.00.30319 官方最新绿色版) python自动化工具之pywinau ...
- Selenium2+python自动化39-关于面试的题
前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点. 一.selenium中如何判断元素是否存在? 首先selen ...
随机推荐
- php 处理上百万条的数据库如何提高处理查询速度
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- js----作用域链
作用域链是javascript的一个难点,要了解它就要了解作用域.变量.执行环境.生命周期等. 下面是找的资料加总结,加深理解. 作用域 变量的作用域可分为 A:全局作用域----最外层函数定义的变量 ...
- Django_Form验证(三)字段,字段的参数,widgets种类
Form工具是一个很强大的工具,所以他的功能不仅仅是上面2个例子,这里详细记录一下Form的其他功能 字段的一般参数,以CharFields为列子: user=fields.CharField( re ...
- Windbg驱动双机调试环境配置
[由于进入了Windows驱动编程领域第一步就是搭建环境,整个环境来说说难也不难,只是比较麻烦.文章有些地方比较繁琐的,而且别人写的比较好,作为引用参考直接贴连接了.如果你按照我写的一步步完成,很快就 ...
- 图像处理项目——生成csv文件提高读取效率
利用pyhton脚本生成csv文件 *开发环境为windows PyCharm*使用的是pyhton脚本*生成人脸和人脸对应的标签的csv文件 一:主要步骤 1.载入对应路径2.提取每一张图片对应的位 ...
- hdu 1277 AC自动机入门(指针版和数组版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1277 推荐一篇博客(看思路就可以,实现用的是java): https://www.cnblogs.co ...
- 网页屏蔽f12、右键菜单等操作
1.屏蔽f12 document.onkeydown = function(){ if(window.event && window.event.keyCode == 123) { a ...
- localStorage,sessionStorage,cookie使用场景和区别
localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...
- 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理
前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...
- 【开发工具】secureCRT的使用
总结自己平时使用secureCRT中遇到的问题 1.安装 2.secureCRT设置标签显示远程主机ip地址