资源描述
中职扩展资源包资料树莓派系列教程8如何点亮一个LED灯下.docx
《中职扩展资源包资料树莓派系列教程8如何点亮一个LED灯下.docx》由会员分享,可在线阅读,更多相关《中职扩展资源包资料树莓派系列教程8如何点亮一个LED灯下.docx(10页珍藏版)》请在冰豆网上搜索。
中职扩展资源包资料树莓派系列教程8如何点亮一个LED灯下
上一章我们讲解了在linux系统下如何通过读写设备文件的方式控制GPIO点亮LED灯,本章我们继续讲解如果通过使用中间层库函数编程控制GPIO.
一、wiringPi
WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi中的函数类似于Arduino的wiring系统。
官网:
1、wiringPi安装
(1)方案1-使用GIT工具
通过GIT获得wiringPi的源码
1
gitclonegit:
2
cdwiringPi
3
./build
build脚本会帮助你编译和安装wiringPi
(2)方案1-使用GIT工具
我们可以在网站上直接下载最新版本编译使用,s:
在windows上下载wiringPi库,并复制到树莓派中,运行如下命令解压安装。
(xxx代表版本号)
1
tar-zxvfwiringPi-xxx.tar.gz
2
cdwiringPi-xxx
3
./build
详细安装教程请参考wiringPI官网:
2、测试
wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。
1
left;">9pt;line-height:
1.8em;">gpio-v
gpioreadall
从上图可以知道树莓派管脚有三种编号方式,下面以Pioneer600扩展板的LED1为例,第一种为板上编号(37),即中间两列,表示第几号插针。
第二中为wiringPi编码(25),使用wiringPi库编程时是用wiringPi编号,第三种为BCM编号,这个是更加BCM管脚来编号的,使用bcm2835库或python的RPi.GPIO编程时使用BCM编号。
我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1.
1
gpio-gmode26out
设置管脚为输出模式,-g参数表示是以BCM编号方式,如果去掉这个参数测以wiringPi编号方式,即为25。
1
gpio-gwrite261
设置管脚为高电平,点亮LED.
1
gpio-gwrite260
设置管脚为低电平,熄灭LED,
1
gpio-gread26
读取管脚当前状态
更多gpio命令请查看:
s:
3、wiringPi程序:
01
#include
02
charLED=25;
03
04
intmain(void)
05
{
06
if(wiringPiSetup()<0)return 1;
07
pinMode(LED,OUTPUT);
08
09
while
(1)
10
{
11
digitalWrite(LED,1);
12
delay(200);
13
digitalWrite(LED,0);
14
delay(200);
15
}
16
}
使用vi将代码添加到led.c文件中,运行如下命令编译并执行程序。
按Ctrl+C终止程序。
1
gcc-Wallled.c–oled-lwiringPi
2
sudo./led
注:
(1)-Wall表示编译时显示所有警告,-lwringPi表示编译时动态加载wringPi库
(2)终止程序后,LED的状态为不确定,这和python程序相比显得有点不足。
关于更多wiringPi的库函数,可参看wiringPi官网,也可参考wiringPi用户手册。
:
wenku.baidu/link?
url=U_APBvE_ga5pSSwPwWABIGJymLVwyC-0W9AEOT2cjhlZzoLywa0-QpElYNT2yHvNV0P7BbqTZCgG0ctaqZLi_ovkAGXREBOE6h68eTt-Q3y
二、bcm2835
bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。
而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。
1、安装bcm2835库
从bcm22835官网()下载最新版本的库,然后解压安装。
1
tar-zxvfbcm2835-1.xx.tar.gz
2
cdbcm2835-1.xx
3
./configure
4
make
5
sudomakecheck
6
sudomakeinstall
2、示例程序
新建名为led.c的文件,添加如下程序。
01
#include
02
03
#definePIN26
04
intmain(intargc,char**argv)
05
{
06
if (!
bcm2835_init())return 1;
07
bcm2835_gpio_fsel(PIN,BCM2835_GPIO_FSEL_OUTP);
08
09
while
(1)
10
{
11
bcm2835_gpio_write(PIN,HIGH);
12
bcm2835_delay(500);
13
bcm2835_gpio_write(PIN,LOW);
14
bcm2835_delay(500);
15
}
16
bcm2835_close();
17
return 0;
18
}
编译并执行程序,按Ctrl+C可结束程序。
1
gcc–Wallled.c–oled–lbcm2835
2
sudo./led
注:
(1)-lbcm2835表示动态加载bcm2835库
(2)注意bcm2835程序管脚使用bcm编号,和wiringPi编号不一样。
(3)和wiringPi一样,程序结束时GPIO的状态不确定。
三、python
1、安装RPi.GPIO
(1)先安装python-dev,输入以下指令。
1
sudoapt-getinstallpython-dev
(2)安装RPi.GPIO
1
9pt;line-height:
1.8em;">#下载
2
wgets:
pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz
3
#解压:
4
tar-zxvfRPi.GPIO-0.5.11.tar.gz
5
#进入解压之后的目录:
6
cdRPi.GPIO-0.5.3a
7
#启动安装:
8
sudopythonsetup.pyinstall
2.示例程序
新建led.py文件,添加如下代码并保存。
01
#!
/usr/bin/python
02
#-*-coding:
utf-8-*-
03
importRPi.GPIO as GPIO
04
importtime
05
06
LED=26
07
08
GPIO.setmode(GPIO.BCM)
09
GPIO.setup(LED,GPIO.OUT)
10
try:
11
while True:
12
GPIO.output(LED,GPIO.HIGH)
13
time.sleep
(1)
14
GPIO.output(LED,GPIO.LOW)
15
time.sleep
(1)
16
except:
17
print("except")
18
9pt;line-height:
25.2000007629395px;"> GPIO.cleanup()
执行程序,按Ctrl+C结束程序
1
sudopythonled.py
注:
(1)#!
/usr/bin/env python,定义python解析脚本的绝对路径。
(2)# -*- coding:
utf-8 -*- ,python文件为utf-8格式,否则无法写入中文注释。
(3) GPIO.setmode(GPIO.BCM),采用bcm编号方式。
(4)python程序使用tryexcept语言,当按下Ctrl+C结束程序是会触发异常,程序执行gpio.cleanup()语句清楚GPIO管脚状态。
对python语言不是很熟悉的孩童,可以查看Python基础教程:
这里有一个python语言的wiringPi库,有兴趣的可以参考:
s:
github/WiringPi/WiringPi2-Python