树莓派论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6079|回复: 6
收起左侧

[参考教程] 几种操作树莓派2B GPIO的方法附参考代码

[复制链接]
发表于 2015-3-20 15:39:32 | 显示全部楼层 |阅读模式
本帖最后由 无名族 于 2015-3-20 15:43 编辑

硬件:树莓派2B
系统:Raspbian Debian Wheezy 2014-02-16
环境:wiringPi、BCM2835 C Library、Python2.7、C
注意:以下操作均在root权限下操作

这里总结下操作GPIO的几种方法,希望给新手做个参考,首先准备系统环境,安装系统什么的这里就略过了,Python,C系统自带,wiringPi、BCM2835 C Library安装这里不在赘述,我之前帖子也提到过:http://www.shumeipai.net/thread-22413-1-1.html,大家自己去查看,这里列下安装代码,省得你懒得看之前的帖子:
1.安装wiringPi:
  1. git clone git://git.drogon.net/wiringPi
  2. cd wiringPi
  3. ./build
复制代码
2.安装BCM2835 C Library:
  1.     wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.42.tar.gz
  2.     tar xvzf bcm2835-1.42.tar.gz
  3.     cd bcm2835-1.42
  4.     ./configure
  5.     make
  6.     make check
  7.     make install
复制代码
安装完成后可以看下GPIO的引脚定义:
  1. gpio readall
复制代码
运行结果如图:
1111.jpg
Physical那一列对应的就是树莓派物理引脚的编号,BCM就是BCM2835的定义,wPi那列就是wiringPi的定义,所以用那个程序去读取要注意他们对引脚的定义,否则会造成错误。新手可能要问你,那么树莓派上那个是1哪个是2啊,给大家一张图,红色方框标注的就是1,和上图方向是对应的,其它的自己对应 Physical列来看:
22222.jpg
3.一下以物理引脚11为例子,来演示下几种不同的操作方法,简单设置引脚的IN或者OUT
3.1.使用Python来操作:
  1. import RPi.GPIO as GPIO
  2. GPIO.setmode(GPIO.BCM)
  3. GPIO.setup(17, GPIO.IN)
复制代码
注意GPIO.setmode,我用的是BCM,看上图对应,11脚对应为17,如果GPIO.setmode(GPIO.BOARD),那么这里数字就应该写11,即为物理引脚数字。下面是截图,我们看到11脚从上图OUT变为IN:
3333.jpg
3.2.使用C来操作:
首先我们用wiringPi来控制把11脚变回OUT:
  1. #include <wiringPi.h>
  2. #include <stdio.h>
  3. int main(void){
  4.         wiringPiSetup();
  5.     pinMode(0,OUTPUT);
  6.         return 1;
  7. }
复制代码
编译后执行,怎么编译,看下图里有,自己输入,不能全程靠复制粘贴,这里wPi定义11脚为0:
44444.jpg
我们再用BCM来控制把11脚变回IN:
  1. #include <bcm2835.h>
  2. #include <stdio.h>
  3. int main(void){
  4.         bcm2835_init();
  5.         uint8_t pin;
  6.         pin = 17;
  7.     bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_INPT);
  8.         bcm2835_close();
  9.     printf("... done!\n");
  10.         return 1;
  11. }
复制代码
注意,这里bcm定义是17,编译执行结果如下:
5555.jpg

到这里,几种控制GPIO的方法就演示完毕,相信这时你再去弄什么控制LED,传感器之类的不会再一头雾水了,上述例子有不足错误之处,欢迎指点讨论!


回复

使用道具 举报

发表于 2015-4-5 08:50:37 | 显示全部楼层
正需要,非常感谢楼主的资料。
回复 支持 反对

使用道具 举报

发表于 2015-4-8 20:46:30 | 显示全部楼层
老大2B的CPU是  2836 不是2835,你这闹的哪一出啊?树老大也不出来说说?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-9 10:56:47 | 显示全部楼层
本帖最后由 无名族 于 2015-4-9 10:58 编辑
huxidong 发表于 2015-4-8 20:46
老大2B的CPU是  2836 不是2835,你这闹的哪一出啊?树老大也不出来说说?

2B的CPU是2836没错,但是使用的C库依旧是2835,但要注意版本,我测试的是1.42没啥问题,自己测试下就知道了。
回复 支持 反对

使用道具 举报

发表于 2015-4-17 14:54:09 | 显示全部楼层
确实,这两个芯片的GPIO引脚定义是一样的
回复 支持 反对

使用道具 举报

发表于 2015-4-17 15:58:13 | 显示全部楼层
请问如果读取实时性要求比较高的IO数据怎么办?
回复 支持 反对

使用道具 举报

发表于 2015-12-10 00:02:12 | 显示全部楼层
输入gpio readall时,提示“未找到命令”,求救
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|树莓派论坛 ( 粤ICP备15075382号-1  

GMT+8, 2024-11-23 11:38 , Processed in 1.125000 second(s), 26 queries , Gzip On.

Powered by Shumeipai.net! X3.2

© 2001-2015 树莓派论坛安全联盟

快速回复 返回顶部 返回列表