“树莓派系列教程:如何点亮一个LED灯(下)”的版本间的差异
小 (Admin移动页面树莓派系列教程8 : 如何点亮一个LED灯(下)至树莓派系列教程 : 如何点亮一个LED灯(下)) |
|||
(未显示同一用户的1个中间版本) | |||
第1行: | 第1行: | ||
− | + | WiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
第38行: | 第7行: | ||
[[File:110612g0e4dt0zlejt4l1n.jpg]] | [[File:110612g0e4dt0zlejt4l1n.jpg]] | ||
− | + | 从上图可以知道树莓派管脚有三种编号方式,下面以Pioneer600扩展板的LED1为例,第一种为板上编号(37),即中间两列,表示第几号插针。第二中为wiringPi编码(25),使用wiringPi库编程时是用wiringPi编号,第三种为BCM编号,这个是更加BCM管脚来编号的,使用bcm2835库或python的RPi.GPIO编程时使用BCM编号。 | |
我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1. | 我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1. | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
第55行: | 第24行: | ||
https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ | https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ | ||
− | === | + | === WiringPi === |
+ | <syntaxhighlight lang="python"> | ||
#include <wiringpi.h> | #include <wiringpi.h> | ||
char LED = 25; | char LED = 25; | ||
第82行: | 第52行: | ||
http://wenku.baidu.com/link?url=U_APBvE_ga5pSSwPwWABIGJymLVwyC-0W9AEOT2cjhlZzoLywa0-QpElYNT2yHvNV0P7BbqTZCgG0ctaqZLi_ovkAGXREBOE6h68eTt-Q3y | http://wenku.baidu.com/link?url=U_APBvE_ga5pSSwPwWABIGJymLVwyC-0W9AEOT2cjhlZzoLywa0-QpElYNT2yHvNV0P7BbqTZCgG0ctaqZLi_ovkAGXREBOE6h68eTt-Q3y | ||
+ | === bcm2835 === | ||
+ | bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。 | ||
+ | 从bcm22835官网(http://www.airspayce.com/mikem/bcm2835/)下载最新版本的库,然后解压安装。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
tar -zxvf bcm2835-1.xx.tar.gz | tar -zxvf bcm2835-1.xx.tar.gz | ||
第97行: | 第64行: | ||
sudo make check | sudo make check | ||
sudo make install</syntaxhighlight> | sudo make install</syntaxhighlight> | ||
− | + | ||
− | + | '''示例程序''' | |
+ | |||
+ | 新建名为led.c的文件,添加如下程序。 | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
#include <bcm2835.h> | #include <bcm2835.h> | ||
第118行: | 第87行: | ||
return 0; | return 0; | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
− | + | 编译并执行程序,按Ctrl+C可结束程序。 | |
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
gcc –Wall led.c –o led –lbcm2835 | gcc –Wall led.c –o led –lbcm2835 | ||
sudo ./led</syntaxhighlight> | sudo ./led</syntaxhighlight> | ||
− | + | 注: | |
− | + | # -lbcm2835表示动态加载bcm2835库 | |
− | + | # 注意bcm2835程序管脚使用bcm编号,和wiringPi编号不一样。 | |
− | + | # 和wiringPi一样,程序结束时GPIO的状态不确定。 | |
− | + | ||
− | + | === python === | |
+ | 安装RPi.GPIO | ||
+ | |||
+ | 先安装python-dev,输入以下指令。 | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
sudo apt-get install python-dev</syntaxhighlight> | sudo apt-get install python-dev</syntaxhighlight> | ||
− | + | ||
+ | 安装RPi.GPIO<syntaxhighlight lang="python"> | ||
#下载 | #下载 | ||
wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz | wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz | ||
第139行: | 第112行: | ||
#启动安装 : | #启动安装 : | ||
sudo python setup.py install</syntaxhighlight> | sudo python setup.py install</syntaxhighlight> | ||
+ | |||
+ | 或者 | ||
+ | <syntaxhighlight lang="python"> | ||
+ | sudo apt install python3- | ||
+ | </syntaxhighlight> | ||
2.示例程序 | 2.示例程序 | ||
新建led.py文件,添加如下代码并保存。 | 新建led.py文件,添加如下代码并保存。 | ||
第163行: | 第141行: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
sudo python led.py</syntaxhighlight> | sudo python led.py</syntaxhighlight> | ||
− | + | 注: | |
− | + | ||
− | + | 1. #!/usr/bin/env python,定义python解析脚本的绝对路径。 | |
− | + | ||
+ | 2. # -*- coding: utf-8 -*- ,python文件为utf-8格式,否则无法写入中文注释。 | ||
+ | |||
+ | 3. GPIO.setmode(GPIO.BCM),采用bcm编号方式。 | ||
+ | |||
+ | 4. python程序使用try except语言,当按下Ctrl+C结束程序是会触发异常,程序执行gpio.cleanup()语句清楚GPIO管脚状态。 | ||
+ | |||
对python语言不是很熟悉的孩童,可以查看Python基础教程: | 对python语言不是很熟悉的孩童,可以查看Python基础教程: | ||
http://www.runoob.com/python/python-tutorial.html | http://www.runoob.com/python/python-tutorial.html | ||
第172行: | 第156行: | ||
这里有一个python语言的wiringPi库,有兴趣的可以参考: | 这里有一个python语言的wiringPi库,有兴趣的可以参考: | ||
https://github.com/WiringPi/WiringPi2-Python | https://github.com/WiringPi/WiringPi2-Python | ||
+ | |||
+ | == 系列教程 == | ||
+ | {{Raspberry Pi Study}} |
2020年11月20日 (五) 15:37的最新版本
WiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。
gpio -v
gpio readall
从上图可以知道树莓派管脚有三种编号方式,下面以Pioneer600扩展板的LED1为例,第一种为板上编号(37),即中间两列,表示第几号插针。第二中为wiringPi编码(25),使用wiringPi库编程时是用wiringPi编号,第三种为BCM编号,这个是更加BCM管脚来编号的,使用bcm2835库或python的RPi.GPIO编程时使用BCM编号。 我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1.
gpio -g mode 26 out
设置管脚为输出模式,-g参数表示是以BCM编号方式,如果去掉这个参数测以wiringPi编号方式,即为25。
gpio -g write 26 1
设置管脚为高电平,点亮LED.
gpio -g write 26 0
设置管脚为低电平,熄灭LED,
gpio -g read 26
读取管脚当前状态 更多gpio命令请查看: https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/
WiringPi
#include <wiringpi.h>
char LED = 25;
int main(void)
{
if(wiringPiSetup() < 0)return 1;
pinMode (LED,OUTPUT) ;
while(1)
{
digitalWrite(LED, 1) ;
delay (200);
digitalWrite(LED, 0) ;
delay (200);
}
}
使用vi将代码添加到led.c文件中,运行如下命令编译并执行程序。按Ctrl+C终止程序。
gcc -Wall led.c –o led -lwiringPi
sudo ./led
注:(1)-Wall 表示编译时显示所有警告,-lwringPi表示编译时动态加载wringPi库 (2)终止程序后,LED的状态为不确定,这和python程序相比显得有点不足。
关于更多wiringPi的库函数,可参看wiringPi官网,也可参考wiringPi用户手册。
bcm2835
bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。
从bcm22835官网(http://www.airspayce.com/mikem/bcm2835/)下载最新版本的库,然后解压安装。
tar -zxvf bcm2835-1.xx.tar.gz
cd bcm2835-1.xx
./configure
make
sudo make check
sudo make install
示例程序
新建名为led.c的文件,添加如下程序。
#include <bcm2835.h>
#define PIN 26
int main(int argc, char **argv)
{
if (!bcm2835_init())return 1;
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
while (1)
{
bcm2835_gpio_write(PIN, HIGH);
bcm2835_delay(500);
bcm2835_gpio_write(PIN, LOW);
bcm2835_delay(500);
}
bcm2835_close();
return 0;
}
编译并执行程序,按Ctrl+C可结束程序。
gcc –Wall led.c –o led –lbcm2835
sudo ./led
注:
- -lbcm2835表示动态加载bcm2835库
- 注意bcm2835程序管脚使用bcm编号,和wiringPi编号不一样。
- 和wiringPi一样,程序结束时GPIO的状态不确定。
python
安装RPi.GPIO
先安装python-dev,输入以下指令。
sudo apt-get install python-dev
安装RPi.GPIO
#下载
wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz
#解压:
tar -zxvf RPi.GPIO-0.5.11.tar.gz
#进入解压之后的目录 :
cd RPi.GPIO-0.5.3a
#启动安装 :
sudo python setup.py install
或者
sudo apt install python3-
2.示例程序
新建led.py文件,添加如下代码并保存。
#!/usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
LED = 26
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED,GPIO.OUT)
try:
while True:
GPIO.output(LED,GPIO.HIGH)
time.sleep(1)
GPIO.output(LED,GPIO.LOW)
time.sleep(1)
except:
print("except")
GPIO.cleanup()
执行程序,按Ctrl+C结束程序
sudo python led.py
注:
1. #!/usr/bin/env python,定义python解析脚本的绝对路径。
2. # -*- coding: utf-8 -*- ,python文件为utf-8格式,否则无法写入中文注释。
3. GPIO.setmode(GPIO.BCM),采用bcm编号方式。
4. python程序使用try except语言,当按下Ctrl+C结束程序是会触发异常,程序执行gpio.cleanup()语句清楚GPIO管脚状态。
对python语言不是很熟悉的孩童,可以查看Python基础教程: http://www.runoob.com/python/python-tutorial.html
这里有一个python语言的wiringPi库,有兴趣的可以参考: https://github.com/WiringPi/WiringPi2-Python
系列教程
- 树莓派系列教程:人生若只如初见
- 树莓派系列教程:烧写镜像
- 树莓派系列教程:远程登录树莓派(SSH登陆/远程桌面登陆/串口登陆)
- 树莓派系列教程:更换软件源
- 树莓派系列教程:访问树莓派
- 树莓派系列教程:配置WiFi
- 树莓派系列教程:系统配置(raspi-config)
- 树莓派系列教程:中文输入法
- 树莓派系列教程:摄像头
- 树莓派系列教程:Linux常用命令以及vi/vim编辑器
- 树莓派系列教程:文件共享(samba)
- 树莓派系列教程:wiringPi、bcm2835、python库安装
- 树莓派系列教程:如何点亮一个LED灯(上)
- 树莓派系列教程:如何点亮一个LED灯(下)
- 树莓派系列教程:按键
- 树莓派系列教程:I2C
- 树莓派系列教程:I2C编程
- 树莓派系列教程:I2C总线控制BMP180
- 树莓派系列教程:Serial串口
- 树莓派系列教程:红外遥控
- 树莓派系列教程:RTC
- 树莓派系列教程:PCF8591 AD/DA
- 树莓派系列教程:SPI
- 树莓派系列教程:物联网之MQTT
- Alphabot树莓派教程:变身路由器
- Alphabot树莓派教程:刷LEDE(OpenWRT)系统变身路由器
- 树莓派引脚对照表
- SIM868 ppp拨号上网