好记性不如铅笔头

linux, 操作系统, 树莓派

树莓派学习笔记:GPIO口通讯

最近在学习树莓派,在买树莓派的时候顺便买了一个扩展板【 DVK511 】,正好用来学习树莓派,这里备份下学习记录。

CONTENTS

连接树莓派和DVK511

树莓派连接DVK511,需要注意电源,这里作者需要备注下:树莓派的电源盒DVK511的电源具体的连接方式是怎样,作者也不清楚,虽然作者有DVK511的电路图,但是大学的知识早就还给老师了,看不懂了~。这里作者截个图,说明下连接方式:

作者在这里测试了下连接的各种方式,成功的连接如下:

1)两个连接线均通电,开关打开,关闭均可。

2)DVK511不通电,树莓派通电,开关打开,关闭均可。

3)树莓派不通电,DVK511通电,开关打开可以,开关关闭不行。

4)三个跳线帽可以拔下来,这样的话GPIO的功能可以单一化。这里这里可以查看网址【 http://www.waveshare.net/shop/DVK511.htm 】的第20,21,22解释,以及DVK511电路板上的印刷,

这三个跳线帽的GPIO口分别是IO7,IO0,IO1,分别连接 1-Wire,蜂鸣器,红外。即接上跳线帽,IO0口既可以控制蜂鸣器,也可以控制LED灯。拔掉跳线帽,IO0口与蜂鸣器的连接就断了,只能控制LED灯了。

树莓派的GPIO管脚图

树莓派的gpio的管脚图到处都是,但是作者一直没有弄清楚3个的区别,最后借着实验结果大致有点心得。 备份如下:

由上图可见,树莓派的一个引脚对应好几个编号。那么该如何使用呢?

还是以例子说明,假如我们要使用GPIO0,

如果使用linux的虚拟文件,那么该引脚的编号对应为BCM GPIO 一列,即GPIO0的编号是17。

如果使用RPI.GPIO的python库,那么该引脚的编号对应为树莓派一列,即GPIO0的编号是11。不过python库也可以设置使用BCM GPIO编号。

如果使用wiringPi的C函数库,那么该引脚的编号对应为wiringPI一列,即GPIO0的编号是0。

对于BCM GPIO有两个编号的,比如GPIO2,有两个,21 27。判断方法如下,在命令行输入【 cat /proc/cpuinfo 】:

pi@raspberrypi ~ $ cat /proc/cpuinfo 
processor	: 0
model name	: ARMv6-compatible processor rev 7 (v6l)
BogoMIPS	: 2.00
Features	: swp half thumb fastmult vfp edsp java tls 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xb76
CPU revision	: 7

Hardware	: BCM2708
Revision	: 000d
Serial		: 00000000f80c1338

如果版本号是0002或0003,那么是第一版的,选择21,如果版本号大于0003或包含字母,那么是第二版的,选择27。作者这里是000d,应该选择27。【方法参考《爱上树莓派》P117】 

控制GPIO

这里我们以GPIO0为例,GPIO0的管脚对应为:BCM->17 树莓派->11 wiringPi->0 。

使用linux虚拟文件来控制

本部分参考《爱上树莓派》P118 点亮LED章节。

由上述管脚知,使用虚拟文件管脚为17。

操作步骤如下:

1 切换到root用户。root用户如果没有使用过,切换需要更改密码,命令为【 sudo passwd 】。

2 将该引脚的操作接口由内核空间暴露到用户空间。

3 操作用户空间文件,进行操作。

4 将该引脚的操作接口从用户空间释放。

命令行记录:

pi@raspberrypi ~ $ sudo passwd   ==>更改root密码
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
pi@raspberrypi ~ $ su   ==>更改root
密码:
root@raspberrypi:/home/pi# cd /sys/class/gpio   ==>进入GPIO目录
root@raspberrypi:/sys/class/gpio# ls
export	gpio17	gpiochip0  unexport
root@raspberrypi:/sys/class/gpio# echo 17 > export   ==>将17号引脚暴露出来
root@raspberrypi:/sys/class/gpio# ls
export	gpio17	gpiochip0  unexport
root@raspberrypi:/sys/class/gpio# cd gpio17   ==>进入暴露出的目录
root@raspberrypi:/sys/class/gpio/gpio17# ls
active_low  direction  edge  power  subsystem  uevent  value
root@raspberrypi:/sys/class/gpio/gpio17# echo out > direction   ==>将该引脚设为输出状态
root@raspberrypi:/sys/class/gpio/gpio17# echo 0 > value   ==>将该引脚设为低电平
root@raspberrypi:/sys/class/gpio/gpio17# echo 1 > value   ==>将该引脚设为高电平
root@raspberrypi:/sys/class/gpio/gpio17# cd ..
root@raspberrypi:/sys/class/gpio# echo 17 > unexport   ==>将17号引脚隐藏
root@raspberrypi:/sys/class/gpio# ls
export	gpiochip0  unexport

设为低电平时,对应的LED灯灭,设为高电平时,对应的LED灯亮。这个也可以根据电路图来验证:

使用python来控制

我们使用【 RPi.GPIO 】的python库来控制,下载地址【 https://pypi.python.org/pypi/RPi.GPIO

基本例子【 http://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/ 】

RPi.GPIO的安装介绍如下:

If you are using Raspbian, all you need to do to install the latest release is:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python-rpi.gpio python3-rpi.gpio

------------

If you want to build your own version from this downloaded copy, make
sure that you have the Python development source installed first!

On Raspbian:
$ sudo apt-get install python-dev python3-dev

To install the module:

$ sudo python setup.py install
  or
$ sudo python3 setup.py install

作者的树莓派有python的开发环境,直接install就可以了。

安装好之后,我们新建一个文件,内容如下,一共有两个文件,一个是用树莓派的编号,一个使用BCM的编号:

GPIO_board.py:
import RPi.GPIO as GPIO;
import time;

GPIO.setmode(GPIO.BOARD);
GPIO.setup(11,GPIO.OUT);

x = 3;
while x > 0:
        x -= 1;
        GPIO.output(11,GPIO.HIGH);
        time.sleep(1);
        GPIO.output(11,GPIO.LOW);
        time.sleep(1);

GPIO.cleanup();

================
GPIO_bcm.py

import RPi.GPIO as GPIO;
import time;

GPIO.setmode(GPIO.BCM);
GPIO.setup(17,GPIO.OUT);

x = 3;
while x > 0:
        x -= 1;
	GPIO.output(17,GPIO.HIGH);
	time.sleep(1);
	GPIO.output(17,GPIO.LOW);
	time.sleep(1);

GPIO.cleanup();

使用方法: 

sudo python3 GPIO_bcm.py

应该就能发现我们之前控制的小灯一闪一闪的。

使用wiringPi来控制:

参考【 http://blog.csdn.net/xukai871105/article/details/12684617 】 【 http://www.codelast.com/?p=5155 】

发表评论

1 × 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据