树莓派拿到手已经两个多月了,其实从最开始的期待安装好ROS,到前几天完成了ROS的源码编译安装,对linux的调教也时花了些时间的。现在终于想起来,树莓派上还有GPIO,还没有用过了。说干就干,开始。以下操作都是在树莓派已经安装好了官方的系统,也已经升级到了最新版了。总共有40个GPIO,实际管脚图为:

  

  在计算机中,通常用高、低两个电压来表示二进制的1和0。树莓派也是如此。GPIO用相同的方式来表示数据。每个GPIO的PIN都能处于输入或输出状态。当处于输出状态时,系统可以把1或0传给该PIN。如果是1,那么对应的物理PIN向外输出3.3V的高电压,否则输出0V的低电压。相应的,处于输入状态的PIN可以探测物理PIN上的电压。如果是高电压,那么该PIN将向系统返回1,否则返回0。就是利用上述简单机制,GPIO实现了和物理电路的互动。通过管脚图,不难看出使用方法和其他的开发板是一样的,先设置管脚的方向,再设置管脚的数值。将其配置为输入或输出,通过读写相应的IO的寄存器值,获取IO状态,通过值取得IO的数值,完成IO的状态的改变。

创建一个python代码:

 import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT) while True :
GPIO.output(21,GPIO.HIGH)
time.sleep(0.05)
GPIO.output(21,GPIO.LOW)
time.sleep(0.05)

创建一个C代码:

使用bash搞定:用bash命令来控制GPIO21。在Linux中,外部设备经常被表示成文件。向文件写入或读取字符,就相当于向设备输出或者从设备输入字符。树莓派上的GPIO端口也是如此,其代表文件位于/sys/class/gpio/下。首先,激活GPIO21:

echo 21 > /sys/class/gpio/export 

上边命令的意思,是把字符"21"写入到/sys/class/gpio/export。可以看到,命令执行后,/sys/class/gpio/下面增加了代表GPIO21的一个目录,目录名就是gpio21。下一步,我们把GPIO21置于输出状态:

echo out > /sys/class/gpio/gpio21/direction

文件/sys/class/gpio/gpio21/direction用于控制GPIO21的方向。我们向里面写入了代表输出的字符"out"。

echo 1 > /sys/class/gpio/gpio21/value

最后,向GPIO21写入1,从而让PIN处于高电压:可以看到,LED灯亮了起来。如果想关掉LED灯,只需要向GPIO21写入0:

echo 0 > /sys/class/gpio/gpio21/value

使用完毕GPIO21,可以删除该端口:

echo 21 > /sys/class/gpio/unexport

/sys/class/gpio/gpio21随即消失。

2 Python GPIO实现

【安装过程】
        【1】先安装python-dev,输入以下指令。
sudo apt-get install python-dev
        【2】安装RPi.GPIO,依次输入以下指令。特别说明,由于RPi.GPIO仍处于不断完善的过程中,请参考前言中的链接下载最新的安装代码。
# 下载 
$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
# 解压缩 
$ tar xvzf RPi.GPIO-0.5.3a.tar.gz 
# 进入解压之后的目录 
$ cd RPi.GPIO-0.5.3a 
# 启动安装 
$ sudo python setup.py install

【示例代码】
    新建一个名为led.py的文件,该文件具体内容如下:
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)
# 输出模式
GPIO.setup(11, GPIO.OUT)

while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)
    【运行】
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入指令
    sudo python led.py
    好吧,扩展板上的LED等开始闪烁了。最后使用Ctrl+C结束Python程序。
    【简单说明】
    【1】GPIO.setmode(GPIO.BOARD),采用插座引脚编号方式。
    【2】由于采用插座引脚编号方式,此处的11脚相当于BCM2835寄存器编号方式的引脚11。

4 WiringPi实现

【安装过程】
    详见【树莓派学习笔记——wiringPi简介、安装和管脚说明】
    【示例代码】
    新建一个名为blink.c文件,该文件具体内容如下:
#include <wiringPi.h>
int main(void)
{
wiringPiSetup() ;
pinMode (0, OUTPUT) ;
for(;;)
{
digitalWrite(0, HIGH) ; delay (500) ;
digitalWrite(0, LOW) ; delay (500) ;
}
}
    【运行】    
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入gcc指令
    gcc -Wall -o blink blink.c -lwiringPi
    接着输入以下命令执行程序
    sudo ./blink
    程序顺利运行,最后使用ctrl+c可以结束程序。

【简单说明】
    【1】不确定的最后状态,由于程序停止的时间未知,所有LED可能为点亮状态也可能会熄灭状态。
    【2】和python的程序相比,GPIO的端口号似乎发生了变化,但是实际上为同一个IO,只是IO的编号方式略有不同。
    【3】-lwiringPi表示动态加载wiringPi共享库,如果不熟悉gcc指令和makefile,请参考系列博文——【Linux学习笔记——例说makefile 索引博文】

5 BCM2835 C Library

【安装过程】
    特别说明,由于BCM2835 C Library仍处于不断完善的过程中,请参考前言中的链接下载最新的安装代码。
# 下载
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz 
# 解压缩
$ tar xvzf bcm2835-1.35.tar.gz 
# 进入压缩之后的目录
$ cd bcm2835-1.35
# 配置
./configure
# 从源代码生成安装包
make
# 执行检查
sudo make check
# 安装 bcm2835库
sudo make install

【示例代码】
    新建一个名为blink.c的程序,程序的具体内容如下:
#include <bcm2835.h>

// P1插座第11脚
#define PIN RPI_GPIO_P1_11

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(100);

bcm2835_gpio_write(PIN, LOW);
bcm2835_delay(100);
}
bcm2835_close();
return 0;
}
    【运行】       
    如果在windows上编写代码,请使用FTP软件下载到树莓派中,使用SSH客户端登陆树莓派,cd命令进入文件所在目录,然后输入gcc指令
    gcc -o blink blink.c -lbcm2835
    接着执行该程序,输入以下指令
    sudo ./blink
    程序顺利运行,最后使用ctrl+c可以结束程序。
    【1】和wiringPi的情况相似,若关闭程序LED灯可能点亮也可能熄灭。
    【2】虽然GPIO端口再次发生了变化,但还是指向那个LED灯。
    【3】-lbcm2835表示动态加载bcm2835共享库,
参考文献:https://blog.csdn.net/xukai871105/article/details/12684617

参考文献:https://www.cnblogs.com/vamei/p/6751992.html

树莓派4硬件---GPIO篇的更多相关文章

  1. 树莓派Zero W GPIO控制

    作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0.  概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...

  2. 【.NET 与树莓派】使用 GPIO 库

    上回老周在说准备工作的时候,提到过树莓派用金属盒散热的事情.有朋友会说,加了金属盒子接线不方便,就算用了"T"形板,毕竟是把导线延长了的.其实扩展板就是把原有的引脚引出(类似于延长 ...

  3. 树莓派 Learning 003 --- GPIO 001 --- 点亮LED

    树莓派 Learning 003 - GPIO 001 - 点亮LED 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 树莓派 Learni ...

  4. 树莓派 Learning 003 --- GPIO 000 --- GPIO引脚图

    树莓派 Learning 003 - GPIO 000 - GPIO引脚图 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 Raspberr ...

  5. [原创]树莓派CM4配置GPIO复用为i2c

    1.简介 项目中需要控制各种外设的电源,正常应该是通过GPIO进行控制,但是树莓派CM4的GPIO管脚有限,因此需要使用i2c扩展IO 查阅CM4-datesheet发现GPIO22和GPIO23可以 ...

  6. 树莓派学习笔记——GPIO功能学习

    0.前言     树莓派现在越来越火,网上树莓派的资料也越来越多.树莓派的学习可以分为linux系统学习和linux驱动学习,利用树莓派制作LED流水灯应该算是驱动学习吧.树莓派来自国外,国外嵌入式开 ...

  7. 树莓派文档翻译 - 使用 - GPIO: 树莓派A和B

    https://www.raspberrypi.org/documentation/usage/gpio/README.md 2016/6/25 GPIO: 树莓派A和B ##介绍GPIO和在树莓派上 ...

  8. 7、树莓派编程;gpio编程;led闪烁

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ12226981 1.树莓派接口对照,一定要找到对应的引脚,不要接错了.我画上箭头. 2.安装 下载地址,https://git.drogon.n ...

  9. 树莓派与 Python —— GPIO

    首先来直观地认识树莓派提供的 40 个引脚(GPIO,general purpose i/o,接收外界输入,并向外界提供运算处理后的输出): 1. 安装 从远程库(repositories)中下载安装 ...

随机推荐

  1. Subversion和TortoiseSVN,VisualSVN图文教程

    转自:http://www.veryhuo.com/a/view/156054.html 本文为大家介绍一下SVN使用教程,在开始之前,您有必要了解一下为什么要使用SVN?因为程序员在编写程序的过程中 ...

  2. Pandas-数据处理-基础部分

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11014882.html  jupyter 代码 ...

  3. S5PV210 PWM

    定时器PWM输出 原理图 GPD0CON, R/W, Address = 0xE020_00A0 CON, R/W, Address = 0xE250_0008 相关文章:http://blog.cs ...

  4. RocketMQ——角色与术语详解

    原文地址:http://jaskey.github.io/blog/2016/12/15/rocketmq-concept/ RocketMQ——角色与术语详解 2016-12-15 THU 15:4 ...

  5. 修改tomcat使用的的编码方式

    默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:    < Connector port="8080 ...

  6. DNS服务——正向查找区 和 逆向查找区

    前言 正向查找区,就是我们最熟知的DNS.即根据域名解析成IP 逆向查找区,即根据IP解析成域名. 他们之间的关系很像ARP和RARP 正向查找区 /etc/named.rfc1912.zones用于 ...

  7. Nginx- web服务配置与测试

    (一) 软件介绍由俄罗斯人lgor Sysove开发,为开源软件.支持高并发:支持几万并发连接(特别是静态小文件业务环境) 资源消耗少:在3万并发连接下开启10个Nginx线程消耗内存不到200M 支 ...

  8. 二进制部署kubernetes集群(上篇)

    1.实验架构 1.1.硬件环境 准备5台2c/2g/50g虚拟机,使用10.4.7.0/24 网络 .//因后期要直接向k8s交付java服务,因此运算节点需要4c8g.不交付服务,全部2c2g足够. ...

  9. charles 手机证书下载安装

    本文参考:charles 手机证书下载安装 本文的Charles,适应windows/MAC/IOS/Android,避免抓包HTTPS失败和乱码: 用的版本是V4.1.2,其它版本原理类似: cha ...

  10. IDEA实用教程(四)—— 创建JavaSE工程

    三. 创建JavaSE工程 第一步 第二步 第三步 第四步 第五步 第六步 运行代码.右键选中图中按钮 选择Run