树莓派4B学习笔记(5)—— 来个GPIO操作吧

一. GPIO库介绍

对于树莓派,现在有wiringPi,BCM2835,python三种库可以使用。

python

  • 开发语言:python
  • 简单介绍:树莓派官方资料中推荐且容易上手,毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

wiringPI

  • 开发语言:C、C++
  • 简单介绍:功能很强大,适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,且作者也给出了很多示例代码,这也使得它广受欢迎。
  • 有关wiringPi的函数介绍,请查看我的另一篇博客《树莓派wiringPi库函数

BCM2835

  • 开发语言:C、C++
  • 简单介绍:BCM2835库是树莓派CPU芯片的库函数,相当于STM32的固件库一样,底层是直接操作寄存器。

二. 引脚编号方式

在这里插入图片描述

GPIO的编号有三种不同的方式:

【1】插座引脚编号方式
编号侧重P1插座侧,从上到下,从左到右。正如上图的Header一栏。

【2】BCM2835编号方式
编号侧重CPU寄存器,根据BCM2835的GPIO寄存器编号。正如上图BCM GPIO一栏。

【3】wiringPi编号方式
编号侧重实现逻辑,把扩展GPIO端口从0开始编号,这种编号方便编程。正如上图WiringPi一栏。

三. 来个GPIO操作吧

下面我们尝试通过编程使GPIO0(11号引脚)输出一个指定电平吧。

1. python库

先执行以下指令,安装一下库:

pip install RPi.GPIO
pip install spidev

安装完后,新建test.py文件,输入以下代码:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)  # BOARD编号方式,基于插座引脚编号
GPIO.setup(11, GPIO.OUT)  # 输出模式

# GPIO.setmode(GPIO.BCM)  # 若使用BCM编号方式,上两行代码应这样写
# GPIO.setup(17, GPIO.OUT)  # 对应为17号脚
 
while True:
    GPIO.output(11, GPIO.HIGH)
    time.sleep(1)
    GPIO.output(11, GPIO.LOW)
    time.sleep(1)

然后终端输入python test.py运行文件。
通过万用表测量电平,可以看到11号脚每一秒置换一次电平。

2. wiringPI库

wiringPI库的常用函数介绍请看这里

Raspbian 安装
依次输入以下指令:

sudo apt-get install wiringpi
mkdir WiringPI            #创建WiringPI文件夹
cd WiringPI #
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

如下图所示:
在这里插入图片描述
Ubuntu 安装

git clone https://github.com/WiringPi/WiringPi.git
cd WiringPi
sudo ./build 

然后,执行gpio -v ,如果能看到GPIO版本信息,则安装成功。
在这里插入图片描述
然后执行gpio readall,可以查询到管脚信息。
在这里插入图片描述

(1)可视化编程方法

这种方法较为直接,在桌面新建c_test.c文件,双击打开,输入下面代码后保存。

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

int main(void)
{
	int LED = 0;
	wiringPiSetup();
	pinMode(LED, OUTPUT);  // 在wiringPi编号格式中,GPIO0编号为0
	printf("LED is blinking...\r\n");
	while(1)
	{
		printf("LED:%d is on \r\n", LED);
		digitalWrite(LED, HIGH);delay(1000);
		printf("LED:%d is off \r\n", LED);
		digitalWrite(LED, LOW);delay(1000);
	}
	return 0;
}

回到终端,依次输入:

cd Desktop/
gcc -o c_test c_test.c -lwiringPi   # 编译并生成可执行文件
./c_test    # 运行可执行文件

通过万用表测量电平,可以看到11号脚每秒置换一次电平。

-lwiringPi参数表示动态加载wiringPi共享库,丢失这个参数的话会报错。
终端中Ctrl + Z可以停止运行。

(2)命令行方法:

在终端依次输入:

touch c_test1.c
sudo nano c_test1.c

复制上面的C代码进去后保存。

格式会有点乱,但是不影响效果

然后继续输入:

gcc -o c_test c_test.c -lwiringPi
./c_test

通过万用表测量电平,可以看到11号脚每秒置换一次电平。

树莓派4B的GPIO引脚图如下所示: ``` 引脚编号 引脚名称 功能描述 1 3V3 3.3V电源 2 5V 5V电源 3 SDA1 I2C数据线 4 5V 5V电源 5 SCL1 I2C时钟线 6 GND 接地 7 GPIO4 通用IO引脚 8 TXD0 UART发送线 9 GND 接地 10 RXD0 UART接收线 11 GPIO17 通用IO引脚 12 GPIO18 通用IO引脚 13 GPIO27 通用IO引脚 14 GND 接地 15 GPIO22 通用IO引脚 16 GPIO23 通用IO引脚 17 3V3 3.3V电源 18 GPIO24 通用IO引脚 19 MOSI SPI主机数据输出线 20 GND 接地 21 MISO SPI主机数据输入线 22 GPIO25 通用IO引脚 23 SCLK SPI时钟线 24 CE0 SPI片选0 25 GND 接地 26 CE1 SPI片选1 27 ID_SD I2C ID EEPROM 28 ID_SC I2C ID EEPROM 29 GPIO5 通用IO引脚 30 GND 接地 31 GPIO6 通用IO引脚 32 GPIO12 通用IO引脚 33 GPIO13 通用IO引脚 34 GND 接地 35 GPIO19 通用IO引脚 36 GPIO16 通用IO引脚 37 GPIO26 通用IO引脚 38 GPIO20 通用IO引脚 39 GND 接地 40 GPIO21 通用IO引脚 ``` 此为树莓派4B的GPIO引脚图,您可以根据需要将特定的引脚与相应的功能进行连接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [树莓派4B GPIO介绍及编程](https://blog.youkuaiyun.com/ksjz123/article/details/111641485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [RaspberryPi 4B 使用 libgpiod 操作 gpio](https://blog.youkuaiyun.com/tyyj90/article/details/117195586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值