树莓派4B GPIO介绍及编程

 

1. 树莓派GPIO引脚对照表

2. GPIO引脚用途

3. GPIO编程

 

 

1. 树莓派GPIO引脚对照表

           

注:本表格适用于各版本,并且兼容26Pin的树莓派B,树莓派B为26Pin,其引脚对应于上表的前26Pin。

尺寸图:

2. GPIO引脚用途

   

在这个40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。

I2C是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。树莓派通过I2C接口可控制多个传感器和组件。它们的通信是通过SDA(数据引脚)和SCL(时钟速度引脚)来完成的。每个从设备都有一个唯一的地址,允许与许多设备间快速通信。ID_EEPROM引脚也是I2C协议,它用于与HATs通信。

SPI是串行外设接口,用于控制具有主从关系的组件,采用从进主出和主进从出的方式工作,树莓派上SPI由SCLK、MOSI、MISO接口组成,SCLK用于控制数据速度,MOSI将数据从树莓派发送到所连接的设备,而MISO则相反

有使用Arduino的朋友一定听说过UART或Serial,通用异步收/发器接口用于将Arduino连接到为其编程的计算机上,也用于其他设备与 RX 和 TX 引脚之间的通信。如果树莓派在 raspi-config 中启用了串口终端,则可以使用这些引脚通过电脑来控制树莓派,也可以直接用于控制Arduino。

在树莓派上,所有的引脚都可以实现软件PWM,而GPIO12、GPIO13、GPIO18、GPIO19可以实现硬件脉宽调制

 

3. GPIO编程

3.1 主流GPIO库介绍

       1、wiringPi C,有Perl, PHP, Ruby, Node.JS和Golang的扩展,支持wiringPi Pin和BCM GPIO两种编号

       2、RPi.GPIO Python,支持Board Pin和BCM GPIO两种编号

       3、WiringPi-Go, Go语言,支持wiringPi Pin、BCM GPIO和Board Pin三种编号

 

3.2 GPIO版本及接口编号定义

1. 输入“gpio -v”看下我们树莓派内置的版本。

2. 输入“gpio readall”查看我们接口编号的定义。

3. Python 代码举例(LED闪烁)

import RPi.GPIO as GPIO

import time


# blinking function

def blink(pin):

    GPIO.output(pin,GPIO.HIGH)

    time.sleep(1)

    GPIO.output(pin,GPIO.LOW)

    time.sleep(1)

    return

# to use Raspberry Pi board pin numbers

GPIO.setmode(GPIO.BOARD)

# set up GPIO output channel

GPIO.setup(11, GPIO.OUT)


# blink GPIO17 50 times

for i in range(0,50):

    blink(11)

GPIO.cleanup()
import RPi.GPIO as GPIO  //引入函数库
import time
RPi.GPIO.setmode(GPIO.BOARD)  //设置引脚编号规则
RPi.GPIO.setup(12, RPi.GPIO.OUT)    //将12号引脚设置成输出模式
while True
    GPIO.output(channel, 1)   //将引脚的状态设置为高电平,此时LED亮了
    time.sleep(1)   //程序休眠1秒钟,让LED亮1秒
    GPIO.output(channel, 0)   //将引脚状态设置为低电平,此时LED灭了
    time.sleep(1)   //程序休眠1秒钟,让LED灭1秒
GPIO.cleanup()    //程序的最后别忘记清除所有资源

4.  Wiring Pi      C语言编程举例(物理针脚11为例,对应的wPi为GPIO0)

#include <stdio.h>
#include <wiringPi.h>

int main(void)
{
	int LED = 0;
	wiringPiSetup();
	pinMode(LED, OUTPUT);
	printf("LED is blinking...\r\n");
	while(1)
	{
		printf("LED:%d is on \r\n", LED);
		digitalWrite(LED, HIGH);delay(500);
		printf("LED:%d is off \r\n", LED);
		digitalWrite(LED, LOW);delay(500);
	}
	
	return 0;
}
#include <wiringPi.h>
int main(void)
{
    wiringPiSetup();
    pinMode (1, OUTPUT);
    for(;;)
    {
        digitalWrite(1, HIGH); delay (500);
        digitalWrite(1, LOW); delay (500);
    }
}

 

5. BCM2835 C Library           Blinks RPi GPIO pin 11 on and off

// blink.c
//
// Example program for bcm2835 library
// Blinks a pin on an off every 0.5 secs
//
// After installing bcm2835, you can build this 
// with something like:
// gcc -o blink blink.c -l bcm2835
// sudo ./blink
//
// Or you can test it before installing with:
// gcc -o blink -I ../../src ../../src/bcm2835.c blink.c
// sudo ./blink
//
// Author: Mike McCauley
// Copyright (C) 2011 Mike McCauley
// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $
 
#include <bcm2835.h>
#include <stdio.h>
 
// Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)
#define PIN RPI_GPIO_P1_11
 
int main(int argc, char **argv)
{
    // If you call this, it will not actually access the GPIO
    // Use for testing
//    bcm2835_set_debug(1);
 
    if (!bcm2835_init())
      return 1;
 
    // Set the pin to be an output
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
 
    // Blink
    while (1)
    {
        // Turn it on
        bcm2835_gpio_write(PIN, HIGH);
        
        // wait a bit
        bcm2835_delay(500);
        
        // turn it off
        bcm2835_gpio_write(PIN, LOW);
        
        // wait a bit
        bcm2835_delay(500);
    }
    bcm2835_close();
    return 0;
}
 

 

 

  • 27
    点赞
  • 282
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值