玩转树莓派(五)使用C语言 通过wiringPi库控制GPIO

玩转树莓派(五)使用C语言 通过wiringPi库控制GPIO

一、创建环境

  • 新建CWorkSpace文件夹
  • 新建gpio_out.c文件
pi@raspberrypi:~ $ mkdir CWorkSpace
pi@raspberrypi:~ $ cd CWorkSpace/
pi@raspberrypi:~/CWorkSpace $ vim gpio_out.c

二、编写代码

  • 编辑gpio_out.c
#include <wiringPi.h>
#include <stdio.h>

#define PIN 1

int main(void)
{
	int i=0;
	wiringPiSetup();
	pinMode (PIN, OUTPUT);
	for(i=0;i<10;i++)
	{
		printf("gpio out: %d\r\n", i);
		digitalWrite(PIN, i%2); 
		delay(3000);
	}
	printf("gpio out end\r\n");
	return 0;
}

三、编译运行

  • 编译,编译时要连接wiringPi的库
  • 运行
pi@raspberrypi:~/CWorkSpace $ gcc -o gpio_out gpio_out.c -lwiringPi
pi@raspberrypi:~/CWorkSpace $ ./gpio_out 
gpio out: 0
gpio out: 1
gpio out: 2
gpio out: 3
gpio out: 4
gpio out: 5
gpio out: 6
gpio out: 7
gpio out: 8
gpio out: 9
gpio out end

四、查看效果

用万用表量下编号12的GPIO.1的引脚,可以发现其间隔3s的高低电平变换了10次。
在这里插入图片描述

  • 手边如果一时半会找不到树莓派的GPIO引脚图
  • 可以通过gpio readall查看
pi@raspberrypi:~/PythonWorkSpace $ gpio readall
 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 0 | IN   | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | IN   | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 1 | OUT  | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+

五、wiringPi库简单介绍

函数int wiringPiSetup (void)
说明设置wiringPi的引脚编号系统
返回-1:失败;其他:正常
函数int wiringPiSetupGpio (void)
说明设置BCM 的引脚编号系统
返回-1:失败;其他:正常
函数void pinMode (int pin, int mode)
说明设置引脚的IO模式
输入pin:引脚编号
——mode:INPUT、OUTPUT、PWM_OUTPUT((仅wiringPi 1号引脚支持)),GPIO_CLOCK(仅wiringPi 7号引脚支持)
函数void digitalWrite (int pin, int value)
说明设置引脚的输出电平
输入pin:引脚编号
——value:电平状态,HIGH:高电平;LOW:低电平

六、漂亮的Ending

觉得好,就打个赏呗
觉得好,就一键三连呗
在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: #include <wiringPi.h> int main (void) { wiringPiSetup(); pinMode (0, OUTPUT); digitalWrite(0, HIGH); delay(1000); digitalWrite(0, LOW); return 0; } ### 回答2: 为了使用树莓派控制GPIO,可以使用WiringPi编写C语言代码。以下是使用WiringPi控制GPIO的示例代码: ```c #include <wiringPi.h> int main() { // 初始化WiringPi if (wiringPiSetup() == -1) { return 1; } // 设置GPIO模式 pinMode(0, OUTPUT); pinMode(1, INPUT); // 控制LED digitalWrite(0, HIGH); // 打开LED // 读取按钮状态 int buttonState = digitalRead(1); // 输出按钮状态 printf("按钮状态: %d\n", buttonState); // 清理引状态 digitalWrite(0, LOW); // 关闭LED return 0; } ``` 上述代码使用WiringPi中的函数进行初始化、配置和控制GPIO。在示例中,我们将GPIO0设置为输出模式,GPIO1设置为输入模式。通过调用`digitalWrite()`函数,我们可以控制GPIO的电平状态,例如打开或关闭LED。`digitalRead()`函数用于读取输入引的状态。 此代码仅为一个简单示例,你可以根据特定的需求和电路配置进行适当的修改。同时,确保在编译代码之前已经安装了WiringPi。 ### 回答3: 树莓派是一款非常受欢迎的单板电脑,它搭载的是Linux操作系统,并且拥有丰富的GPIO接口。要运用wiringpi控制GPIO,需要先在树莓派上安装wiringpi。下面是一个简单的示例,演示了如何使用C语言代码来控制GPIO。 首先,确保你的树莓派上已经安装了wiringpi。如果没有安装,可以使用以下命令进行安装: sudo apt-get update sudo apt-get install wiringpi 然后,创建一个名为gpio_control.c的文件,并将以下代码粘贴到该文件中: #include <stdio.h> #include <wiringPi.h> #define LED_PIN 0 // 这里的0表示使用GPIO编号为0,也可以根据实际情况更改 int main(void) { if (wiringPiSetup() == -1) { // 初始化wiringPi,若失败则退出程序 printf("初始化wiringPi失败!\n"); return 1; } pinMode(LED_PIN, OUTPUT); // 设置GPIO为输出模式 while(1) { digitalWrite(LED_PIN, HIGH); // 将GPIO置高电平 delay(1000); // 延迟1秒 digitalWrite(LED_PIN, LOW); // 将GPIO置低电平 delay(1000); // 延迟1秒 } return 0; } 保存并关闭文件后,打开终端,进入文件所在目录。然后使用以下命令编译该文件并运行: gcc -o gpio_control gpio_control.c -lwiringPi sudo ./gpio_control 这样,你就可以通过GPIO控制树莓派上的LED灯了。这个示例中,LED连接到GPIO0(即物理引11),程序会不断循环地让LED灯亮一秒,熄灭一秒。你也可以根据需要更改引控制逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值