匿名
未登录
登录
丢石头百科
搜索
查看“树莓派系列教程:如何点亮一个LED灯(下)”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
树莓派系列教程:如何点亮一个LED灯(下)
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
WiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。 <syntaxhighlight lang="python"> gpio -v gpio readall</syntaxhighlight> [[File:110612g0e4dt0zlejt4l1n.jpg]] 从上图可以知道树莓派管脚有三种编号方式,下面以Pioneer600扩展板的LED1为例,第一种为板上编号(37),即中间两列,表示第几号插针。第二中为wiringPi编码(25),使用wiringPi库编程时是用wiringPi编号,第三种为BCM编号,这个是更加BCM管脚来编号的,使用bcm2835库或python的RPi.GPIO编程时使用BCM编号。 我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1. <syntaxhighlight lang="python"> gpio -g mode 26 out</syntaxhighlight> 设置管脚为输出模式,-g参数表示是以BCM编号方式,如果去掉这个参数测以wiringPi编号方式,即为25。 <syntaxhighlight lang="python"> gpio -g write 26 1</syntaxhighlight> 设置管脚为高电平,点亮LED. <syntaxhighlight lang="python"> gpio -g write 26 0</syntaxhighlight> 设置管脚为低电平,熄灭LED, <syntaxhighlight lang="python"> gpio -g read 26</syntaxhighlight> 读取管脚当前状态 更多gpio命令请查看: https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ === WiringPi === <syntaxhighlight lang="python"> #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); } }</syntaxhighlight> 使用vi将代码添加到led.c文件中,运行如下命令编译并执行程序。按Ctrl+C终止程序。 <syntaxhighlight lang="python"> gcc -Wall led.c –o led -lwiringPi sudo ./led</syntaxhighlight> 注:(1)-Wall 表示编译时显示所有警告,-lwringPi表示编译时动态加载wringPi库 (2)终止程序后,LED的状态为不确定,这和python程序相比显得有点不足。 关于更多wiringPi的库函数,可参看wiringPi官网,也可参考wiringPi用户手册。 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"> tar -zxvf bcm2835-1.xx.tar.gz cd bcm2835-1.xx ./configure make sudo make check sudo make install</syntaxhighlight> '''示例程序''' 新建名为led.c的文件,添加如下程序。 <syntaxhighlight lang="python"> #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; }</syntaxhighlight> 编译并执行程序,按Ctrl+C可结束程序。 <syntaxhighlight lang="python"> gcc –Wall led.c –o led –lbcm2835 sudo ./led</syntaxhighlight> 注: # -lbcm2835表示动态加载bcm2835库 # 注意bcm2835程序管脚使用bcm编号,和wiringPi编号不一样。 # 和wiringPi一样,程序结束时GPIO的状态不确定。 === python === 安装RPi.GPIO 先安装python-dev,输入以下指令。 <syntaxhighlight lang="python"> 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 #解压: tar -zxvf RPi.GPIO-0.5.11.tar.gz #进入解压之后的目录 : cd RPi.GPIO-0.5.3a #启动安装 : sudo python setup.py install</syntaxhighlight> 或者 <syntaxhighlight lang="python"> sudo apt install python3- </syntaxhighlight> 2.示例程序 新建led.py文件,添加如下代码并保存。 <syntaxhighlight lang="python"> #!/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()</syntaxhighlight> 执行程序,按Ctrl+C结束程序 <syntaxhighlight lang="python"> 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基础教程: http://www.runoob.com/python/python-tutorial.html 这里有一个python语言的wiringPi库,有兴趣的可以参考: https://github.com/WiringPi/WiringPi2-Python == 系列教程 == {{Raspberry Pi Study}}
该页面使用的模板:
模板:Raspberry Pi Study
(
查看源代码
)
返回至
树莓派系列教程:如何点亮一个LED灯(下)
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志