




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
树莓派的强大之处不单单是因为它是一个卡式电脑,更重要的是个引出GPIO,可以通过编程控制GPIO管脚输出高低电平。学过51单片机的孩童第一个程序就是点亮一个LED灯,从此就点亮我们的人生,从此code奸我千百遍,我待code如初见。今天我们就来探讨一下树莓派点亮一个LED灯的n种方法。从这一章开始我们将教大家如何在树莓派编程,在学习树莓派编程前,你需要一块树莓扩展板。本教程是WaveShare设计的Pioneer600扩展板为例。Pioneer600扩展板包括了GPIO,I2C,SPI,Serial等接口的器件,是学习树莓派编程很好的扩展板。关于Pioneer600扩展的详细资料看网站。 1、 通过shell脚本操作GPIO#进入GPIO目录1cd/sys/class/gpio#运行ls命令查看gpio目录中的内容,可以查看到export gpiochip0 unexport三个文件1sudols# GPIO操作接口从内核空间暴露到用户空间#执行该操作之后,该目录下会增加一个gpio26文件1echo26 export#进入GPIO26目录,该目录由上一步操作产生1cdgpio26# 运行ls查看gpio26目录中的内容,可查看到如下内容# active_low direction edge power subsystem uevent value1sudo ls#设置GPIO26为输出方向1echoout direction# BCM_GPIO26输出逻辑高电平,LED点亮1echo1 value# BCM_GPIO26输出逻辑低电平,LED熄灭1echo0 value#返回上一级目录1cd.#注销GPIO20接口1echo20 unexport注:echo 命令为打印输出,相当于C语言的printf函数的功能,符号为IO重定向符号,IO重定向是指改变linux标准输入和输出的默认设备,指向一个用户定义的设备。例如echo 20 export便是把20写入到export文件中我们可以编写成shell 脚本的形式运行1viled.sh用vi新建led.sh文件,添加如下程序并保存退出。1#! /bin/bash2echoExporting pin $13echo$1 /sys/class/gpio/export4echoSetting direction to out.5echoout /sys/class/gpio/gpio$1/direction6echoSetting pin $27echo$2 /sys/class/gpio/gpio$1/value修改文件属性,使文件可执行。1chmod+x led.sh程序第一句注销表明这个是一个bash shell 文件,通过/bin/bash程序执行。$1代表第一个参数,$2代表第二个参数,执行如下两个命令可点亮和熄灭LED(Pioneer600扩展板LED1接到树莓派BCM编码的26号管脚)。1sudo./led.sh 26 11sudo./led.sh 26 0 2、通过sysfs方式操作GPIO通过上面的操作,我们可以发现在linux系统中,读写设备文件即可操作对应的设备。所以说在linux的世界,一切的都是文件。下面我们可以通过C语言读写文件的方式操作GPIO.1vi led.c使用vi新建led.c文件,添加如下程序并保存退出。001#include&ls;sysstat.h002#include003#include004#include005#include006#include007#include008009#define IN 0010#define OUT 1011012#define LOW 0013#define HIGH 1014015#define POUT 26016#define BUFFER_MAX 3017#define DIRECTION_MAX 48018019staticint GPIOExport(int pin)020021char bufferBUFFER_MAX;022int len;023int fd;024025fd = open(/sys/class/gpio/export, O_WRONLY);026if(fd 0) 027fprintf(stderr,Failed to open export for writing!n);028return(-1);029030031len = snprintf(buffer, BUFFER_MAX,%d, pin);032write(fd, buffer, len);033034close(fd);035return(0);036037038staticint GPIOUnexport(int pin)039040char bufferBUFFER_MAX;041int len;042int fd;043044fd = open(/sys/class/gpio/unexport, O_WRONLY);045if(fd 0) 046fprintf(stderr,Failed to open unexport for writing!n);047return(-1);048049050len = snprintf(buffer, BUFFER_MAX,%d, pin);051write(fd, buffer, len);052053close(fd);054return(0);055056057staticint GPIODirection(int pin, int dir)058059staticconstchar dir_str =in0out;060char pathDIRECTION_MAX;061int fd;062063snprintf(path, DIRECTION_MAX,/sys/class/gpio/gpio%d/direction, pin);064fd = open(path, O_WRONLY);065if(fd 0) 066fprintf(stderr,failed to open gpio direction for writing!n);067return(-1);068069070if(write(fd, &dir_strdir = IN ? 0 : 3, dir = IN ? 2 : 3) 0) 071fprintf(stderr,failed to set direction!n);072return(-1);073074075close(fd);076return(0);077078079staticint GPIORead(int pin)080081char pathDIRECTION_MAX;082char value_str3;083int fd;084085snprintf(path, DIRECTION_MAX,/sys/class/gpio/gpio%d/value, pin);086fd = open(path, O_RDONLY);087if(fd 0) 088fprintf(stderr,failed to open gpio value for reading!n);089return(-1);090091092if(read(fd, value_str, 3) 0) 093fprintf(stderr,failed to read value!n);094return(-1);095096097close(fd);098return(atoi(value_str);099100101staticint GPIOWrite(int pin, int value)102103staticconstchar s_values_str =01;104char pathDIRECTION_MAX;105int fd;106107snprintf(path, DIRECTION_MAX,/sys/class/gpio/gpio%d/value, pin);108fd = open(path, O_WRONLY);109if(fd 0) 110fprintf(stderr,failed to open gpio value for writing!n);111return(-1);112113114if(write(fd, &s_values_strvalue = LOW ? 0 : 1, 1) 0) 115fprintf(stderr,failed to write value!n);116return(-1);117118119close(fd);120return(0);121122123int main(int argc, char *argv)124125int i = 0;126127GPIOExport(POUT);128GPIODirection(POUT, OUT);129130for(i = 0; i 20; i+) 131GPIOWrite(POUT, i % 2);132usleep(500 * 1000);133134135GPIOUnexport(POUT);136return(0);137编译并执行程序1gcc led.c -o led2sudo ./led如果没有意外,我们可以看到接到BCM编码的26号管脚的LED,闪烁10次后自动退出程序。以上第一条命令是使用gcc编译器将led.c源文件,编译成led可执行文件,在目录下面我们可以发现编程后生产的led可执行文件。我们也可以编写Makefile文件,下次直接运行make命令即可编译程序。1vi Makefile使用vi 新建Makefile文件,添加如下代码并保存退出。1led:led.c2g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年肿瘤科肺癌分期与治疗方案模拟测试答案及解析
- 2025内蒙古华润万家超市额尔敦路分公司招聘70人笔试备考试题及答案解析
- 2025年神经外科手术并发症的处理策略模拟考试卷答案及解析
- 2025广东广州市生态环境局越秀分局招聘编外辅助人员1人笔试模拟试题及答案解析
- 2025年郑州市管城回族区人民法院招聘特邀调解员20名笔试参考题库附答案解析
- 2025年急症解剖解剖学知识测试模拟考试答案及解析
- 2025年消化内科常见消化道疾病诊疗规范模拟考试卷答案及解析
- 朝阳市中石油2025秋招笔试模拟题含答案数智化与信息工程岗
- 菏泽市中石油2025秋招面试半结构化模拟题及答案财务与审计岗
- 中卫市中石化2025秋招笔试模拟题含答案机械与动力工程岗
- 2025年湖南省高考历史真题(原卷版)
- 老年人脑卒中课件
- 2025年传媒行业编辑记者招聘笔试模拟题及答案全解
- 2025年宪法知识竞赛试题库(含答案)
- 事业法人登记管理办法
- 餐饮服务食品安全常规项目自查记录表
- 膝关节病中医护理查房讲课件
- 后殖民视觉政治-洞察及研究
- 梁家村梁述文果园损失的评估报告【范本模板】
- 骨科规范化培训体系构建与实施
- 电网公司输变电工程施工项目部设置与管理的标准化流程探讨
评论
0/150
提交评论