树莓派python gpio_经验-树莓派Python控制GPIO-电路城论坛 - 电子工程师学习交流园地...

树莓派之所以这么成功,除了超高性价比和完善的生态系统外,其开放的40Pin对外接口功不可没,这40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。但是这些GPIO的编号有些混乱,不同的API对于GPIO的编号不一样,而不同的API对于开发语言的支持也不同。其中比较主流的API库有以下几种:

1、wiringPi C,有Perl, PHP, Ruby, Node.JS和Golang的扩展,支持wiringPi Pin和BCM GPIO两种编号

2、RPi.GPIO Python,支持Board Pin和BCM GPIO两种编号

3、WiringPi-Go, Go语言,支持wiringPi Pin、BCM GPIO和Board Pin三种编号

看起来还是有些混乱,但是只要选择好自己需要的开发语言就可以了,比如选择Python语言,选择RPi.GPIO就好,其他语言选择wiringPi就好。

编写程序之前,先来连接硬件。

如图连接树莓派管脚和led灯,注意led的长管脚为正极,连接GPIO,短管脚连接GND。

作为我最熟悉的语言,看看C语言如何控制GPIO。

使用Putty远程登录到树莓派后,执行命令:gpio -v,可以看到默认情况下树莓派是已经安装了wirpingPi了。

我们可以使用命令行gpio readall查看树莓派的管脚定义。接下来使用C语言控制LED灯的亮灭。

vi led.c使用vi工具创建一个led.c。

输入如下代码:

#include <wiringPi.h>int main(void){        wiringPiSetup();        pinMode (1, OUTPUT);        for(;;)        {                digitalWrite(1, HIGH); delay (500);                digitalWrite(1, LOW); delay (500);        }}

代码很简单,不用做过多的解释,这里需要注意的是,数字1是wPi管脚编号,通过查表可以知道,这个是板子上的物理编号12号。我们已经在这个GPIO上接了一个LED灯,接下来就可以控制这个灯了。

保存文件并退出vi后,编译并运行。

gcc -Wall -o led led.c -lwiringPisudo ./led

可以看到外接的LED灯已经开始闪烁,C语言控制GPIO成功了。

本人虽然从事C语言开发十几年了,但是Python最近是在是太火了,藉此机会正好学习一下Python语言开发,所以接下来所有代码均用Python实现。

执行pyton命令后可以看到树莓派也已经默认安装好了python开发环境了,版本是2.7.13。此时我们看到提示符变成了三个大于号,说明已经进入pyton的交互环境了,退出可以使用quit()。

vi led.py创建并编辑一个python文件。输入代码如下:

# -*- coding: utf-8 -*-import RPi.GPIO as GPIOimport time# BOARD编号方式,基于插座引脚编号GPIO.setmode(GPIO.BOARD)# 输出模式GPIO.setup(12, GPIO.OUT)while True:        GPIO.output(12, GPIO.HIGH)        time.sleep(1)        GPIO.output(12, GPIO.LOW)        time.sleep(1)保存为led.py,然后运行这个Python程序。

sudu python led.py此时外接的LED灯开始闪烁,说明Python控制LED灯成功。

有时候在执行上面的命令时,会遇到警告:

这个原因是我上次使用C语言控制了12号引脚的GPIO,系统认为被使用了,会有警告,但是程序还是会正常执行的。如果想去掉这个警告,一是重启系统,二是换一个GPIO去控制就好了。

作为我的第一个Python程序,一定要理解每一行代码的含义,接下来一起学习一下。

# -*- coding: utf-8 -*-这一行是注释,Python中单行注释以井号"#"开头,本行说明了编码格式为utf-8

import RPi.GPIO as GPIO这一行是导入RPi.GPIO模块,其中as GPIO 指的是:用 GPIO 来表示 RPi.GPIO。

import time这一行是导入time模块,也就是时间相关模块,我们会用到延时函数,所以需要导入time模块。

GPIO.setmode(GPIO.BOARD)这一行是设置GPIO的表示方式,这里可以是GPIO.BOARD(板子上的实际标号),也可以是GPIO.BCM(gpio readall列表中的BCM编号)。

GPIO.setup(12, GPIO.OUT)设置编号为12的GPIO为输出(GPIO.OUT)方式。

while Treu:表示一个死循环。

GPIO.output(12, GPIO.HIGH)表示12号GPIO输出高电平(GPIO.HIGH)

time.sleep(1)时间库中的延时函数,这里的单位是秒。

GPIO.output(12, GPIO.LOW)表示12号GPIO输出低电平(GPIO.LOW)。

通过分析代码,发现整个Python代码还是很简洁的,适合于那些没有C语言基础的朋友学习,Python 不仅上手简单,而且其解释语言的特性使得程序不用编译,对代码做了任何修改之后就能直接运行,极大方便了调试。当然对于本人这种有多年C语言开发习惯的人,想学习一下新东西,Python也是不错的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值