Raspberry Pi有许多的GPIO(General Purpose Input Output:通用输入/输出),可以用来控制和读取数字电路中TTL电平的逻辑0和逻辑
1。我们要使用RPi的GPIO首先要知其GPIO的定义,常用的有两种编号定义:WiringPi Pin和BCM GPIO。GPIO的驱动库我这里介绍两种给大家,一种为C语言的WiringPi,另一种为python的RPi.GPIO;实验中将使用这两种语言来教会大家使用GPIO。
本篇文章将通过2个小实验带你学习Raspberry Pi GPIO的简单使用步骤,一个是控制LED闪烁,另外一个是开关控制LED闪烁。
GPIO定义图解 GPIO编号图(请注意图中Revision 1/2 ):
2种不同编号的定义:
安装GPIO库
(1)更新源: $ sudo apt-get update (2)安装python: $ sudo apt-get install python-dev (3)安装python-pip( python-pip是一个可以替代easy_install的安装和管python软件包的工具)$ sudo apt-get install python-pip (4)利用pip安装rpi.gpio:$ sudo pip install rpi.gpio 测试安装成功:
(5)安装wringpi库:安装git-core
$ sudo apt-get install git-core 载winringPi库
$ git clone git://git.drogon.net/wiringPi 编译和安装库 (在/wiringPi/examples目录中有一些例子可供大家参考)
$ cd wiringPi
$ ./build 另外大家可以使用下面的命令对库进行更新
$ cd wiringPi
$ git pull origin
器件清单
Raspberry Pi x1 Linker led x1 Linker button x1 Wire x5
实验一----------接线图---------------
C语言示例
说明:使用wiringpi这个库,类似arduino的编程风格,代码设置的GPIO编号为wiringPi pin、如果你想使用BCM GPIO则可以将wiringPiSetup() 改为wiringPiSetupGpio(),那么对应的led_pin也需要改为BCM GPIO编号对应的GPIO,即GPIO24。 示例代码: #include #include #include
int led_pin = 5;
int main () { if (wiringPiSetup() == -1) { printf(“Setup wiringPi failed!”); return 1; } printf(“linker_led pin : GPIO%d (wiringPi pin)”,led_pin); pinMode(led_pin, OUTPUT); // set mode to output
while(1) { digitalWrite(led_pin, 1); // output a high level delay(200); digitalWrite(led_pin, 0); // output a low level delay(200); }
return 0; }
1.新建一个.c文件写入示例代码、保存:$vi linker_led.c 2.编译代码:$ gcc linker_led.c -o linker_led -lwiringPi 3.运行代码:$sudo ./linker_led
python示例
说明:这里调用RPi.GPIO库,使用的GPIO编号为BCM GPIO、如果你想使用board GPIO则可以将GPIO.setmode(GPIO.BCM)改为GPIO.setmode(GPIO.BOARD),那么对应的led_pin也需要改为wiringPi pin编号对应的GPIO,即GPIO5。
python示例代码:
import RPi.GPIO as GPIO import time
led_pin = 24
GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(led_pin,GPIO.OUT)
print “linker led pin 24 (BCM GPIO)”
while True:
GPIO.output(led_pin,True) time.sleep(0.2) GPIO.output(led_pin,False) time.sleep(0.2)
新建一个.py文件写入示例代码、保存:$vi linker_led.py 运行代码:$sudo python linker_led.py
实验一运行效果图
LED OFF :
LED ON:
实验二
-----------接线图------------
C语言示例
说明:这个示例较实验一多增加一个GPIO,使用了读取GPIO状态的函数:digitalRead(pin_value) 示例代码: #include
int button_pin = 4; int led_pin = 5;
int main () { printf(“wiringPi pin”); printf(“linker_led pin : GPIO%d”,led_pin); printf(“linker_button pin : GPIO%d”,button_pin);
if (wiringPiSetup() == -1) { printf(“Setup wiringPi failed!”); return 1; }
pinMode(led_pin, OUTPUT); // set linker_led mode to output pinMode(button_pin, INPUT); // set linker_button mode to input while(1) { if( digitalRead(button_pin) ) digitalWrite(led_pin, HIGH); // output a high level else digitalWrite(led_pin, LOW); // output a low level
}
return 0; }
1.新建一个.c文件写入示例代码、保存:$vi linker_button.c 2.编译代码:$ gcc linker_button.c -o linker_button -lwiringPi 3.运行代码:$sudo ./linker_button
python示例
说明:这个示例较实验一多增加一个GPIO,使用了读取GPIO状态的函数:GPIO.input(pin_value) 示例代码:
import RPi.GPIO as GPIO
led_pin = 24 button_pin = 23
GPIO.setwarnings(False) GPIO.setmode( GPIO.BCM ) GPIO.setup( led_pin,GPIO.OUT ) GPIO.setup( button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print (“linke r_led pin 24 , linker_button pin 23 (BCM GPIO)”)
while True: if GPIO.input(button_pin): GPIO.output(led_pin,True) else : GPIO.output(led_pin,False)
1.新建一个.py文件写入示例代码、保存:$vi linker_button.py 2.运行代码:$sudo python linker_button.py
实验二运行效果图
没有按下按钮,LED处于熄灭状态:
按下按钮,LED处于点亮状态:
测试代码下载:
python-testc-test
|