首页 > 其他分享 >[香橙派开发系列]使用wiringPi控制26个引脚

[香橙派开发系列]使用wiringPi控制26个引脚

时间:2023-12-03 15:47:13浏览次数:43  
标签:26 引脚 一下 PC10 电平 香橙 gpio

目录

前言

不管是对什么开发板来说,开发需要使用到一些包,像stm32就需要用到一些包,香橙派也是一样的,也是需要使用到一些软件包才能进行开发。

一、香橙派使用的包

香橙派这里使用的包是wiringOP,这个包有python版,所以用python进行开发要方便一点,但是呢,毕竟我是学嵌入式的,开发单片机都是使用C语言,让我使用python确实不太好,所以我昨天就研究了一下,在/usr/src/目录下有两个wiringOP文件夹

img

这有一个wiringOP和一个wiringOP-Python,有一个是C语言的,有一个是Python的,这里我看了一下wiringOP下的文件,发现它是由wiringPi这个包进行改写的,但是还是可以使用wiringPi中的函数进行开发

img

知道了这个就可以开始开发了,所以我花了点时间对wiringPi中的函数进行了一下学习,随便写了这篇文章。

二、使用wiringPi包的命令

学过树莓派的应该对这个包比较熟悉,没有学过的就跟着我一起来学习吧。

首先使用得先获得这个包,如果你是在香橙派官网中下载的ubuntu或者是其他系统的话,这个包是会在里面的,所以可以不用下载。如果你不是从官网上下载的,需要下载一下这个包。

1.下载wiringOP

首先需要更新一下软件包

sudo apt update

然后下载一下git

sudo apt install -y git

下载完成后就可以用gitgithub上拉取wiringOP软件包了

git clone  https://github.com/orangepi-xunlong/wiringOP.git -b next

然后编译一下这个软件包,先到wiringOP这个目录

cd wiringOP

然后编译一下

sudo ./build clean

然后运行进行安装

sudo ./build

安装好后检查一下这个包是否安装成功,这里使用

gpio readall

进行查看,如果出现下面的界面就证明安装成功了

img

这个界面是可以查看你这个香橙派所对应的引脚和状态的界面。

2.gpio readall信息分析

img

这里可以看到有很多信息,首先就是芯片的型号H616,然后表格里面有GPIOwPiNameModeVPhysical。下面我那个表给大家说明一下

名称 说明
GPIO 引脚在寄存器中的地址
wPi wiringPi中所对应的值
Name 引脚的名称
Mode 引脚的状态
V 改引脚的电平值
Physical 引脚的位置

这里的wPi是在后面会经常使用的一个值,这个需要经常查看一下。

Mode的状态可以看下面的表

状态 说明
OFF 关闭
OUT 输出
IN 输入/上拉输入/下拉输入

3.设置gpio的模式

学过32的应该知道,要对引脚操作首先需要打开时钟,然后配置引脚的模式,但是在香橙派中就不用这么麻烦,因为底层和用户层之间有一个HAL板件支持包,所以操作起来就非常的简单,只需要设置一下引脚模式即可,这里我设置一下PC10(因为这个引脚好插杜邦线),首先用命令的模式来进行设置。

这里先将PC10设置为输出模式out,首先找到PC10wPi值,这里通过前面说的gpio readall就可以查找到,它的wPi值是16,就可以使用下面的命令来进行设置了

gpio mode 16 out

设置完成后可以用gpio readall查看一下状态

img

可以看到PC10mode变成了OUT

输出模式就是输出一些电平,比如说一开始电平V是0,那么变成了输出模式后这个引脚就会输出低电平。

4.设置gpio输出的电平

学过单片机的都知道,在单片机中输出的只有高电平和低电平,这个在程序中的表达是:1表示高电平,0表示低电平,所以我们可以通过程序来控制单片机引脚输出高电平和低电平。

控制操作也是比较简单,使用的是下面的指令:

gpio write wPi 电平

wPi不用多说了,电平是0和1来表示,比如说我让刚才的PC10变成高电平,使用的命令是

gpio write 16 1

执行完成后就会让PC10变成高电平了,这里还是使用gpio readall来进行查看

img

可以看到这个引脚的电平变成了高电平,如果对这个概念还是不明白的话,我用面包板搭建一个简单的电路展示一下

img

这里我将LED的负极连接到PC10这个引脚上,然后正极连接到单片机上的3.3V位置,可以看到现在的LED没有亮,是因为PC10这个引脚是高电平,两端都是高电平是不会通的。

现在我将PC10改成低电平再来看看效果

gpio write 16 0

img

效果如下

img

可以看到这个已经亮了,这个就是改变引脚的电平的指令,并且讲一下电平的概念。

三、wiringPi软件实现

前面讲的都是命令行的实现,但是咱不可能一直用命令来写一个复杂的功能,最重要的还是要落实在程序方面,所以现在来给大家介绍一下软件怎么写。

1.初始化函数

首先在软件中需要初始化一下引脚,使用的函数是

int  wiringPiSetup (void) ;

这个函数会初始化一下引脚,但是你调用这个函数的话,在执行的时候需要提升一下权限或者使用root才可以执行,当然这个初始化函数有一个替代的函数,这个替代的函数不需要提权

int wiringPiSetupSys (void)

这个函数不是使用操作系统来进行初始化,而是使用/sys/class/gpio接口来进行初始化的,在此种模式下的管脚号是 Broadcom 的 GPIO 管脚号,这种方法我们不考虑。

我们首先用一下第一个函数来进行一下初始化

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

int main(){
    wiringPiSetup();
    return 0;
}

这样就可以进行一下初始化的操作,然后就可以进行后面的操作了。

2.设置gpio的模式

这里使用的是

void pinMode (int pin, int mode)

这个函数需要配合上面说的wiringPiSetup函数进行初始化,否则使用不了

img

第一个参数是wPi的值,第二个参数是设置的模式,可以有下面的几种模式:

模式 说明
OUTPUT 输出模式
INPUT 输入模式
PWM_OUTPUT 脉冲输出
GPIO_CLOCK GPIO时钟

这些模式都是用宏定义定义了的,直接写即可。

然后我们将PC10的模式设置为输出模式

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

int main(){
    wiringPiSetup();  // 记得初始化
    pinMode(16, OUTPUT);
    return 0;
}

这样就可以将PC10设置为输出模式了。

3.输出电平

然后我们就可以通过代码来输出电平了,这里我们可以按照32的写法,写一个死循环,但是毕竟这个是高级的单片机,所以我们就不写死循环了,毕竟你一个香橙派不止可以跑一个程序,所以这里直接写到循环外面。

使用的函数是

void digitalWrite (int pin, int value)

这个函数的参数和上面的一样,只不过要说一下value,这个就是电平值

说明
1 高电平
0 低电平

然后添加进去

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

int main(){
    wiringPiSetup();  // 记得初始化
    pinMode(16, OUTPUT);
    digitalWrite(16, 0);
    return 0;
}

写完后我们就可以执行一下这个代码了。

4.执行代码

这里执行代码需要先进行一下编译,编译使用gcc这个工具,没有这个工具的可以下载一下

sudo apt install gcc

然后就可以开始编译了,这里不写Makefile文件,直接用命令进行编译,命令如下:

gcc -o 编译出来的文件名 需要编译的文件.c -lwiringPi

这里如果不写-o编译出来的文件名,编译出来的可执行文件是a.out

需要注意一下,最后的-lwiringPi是必须要加上的,如果不加上就会出现下面的问题

img

这个就像你用pthread线程一样,在编译的时候不加-pthread,所以需要加上。

编译完成后如果没有出问题就可以用

./a.out

来执行了。

如果你用-o来规定了

img

可以使用

./别名

来运行,我这是openLED,所以是

./openLED

执行了LED灯就会亮了。

最后

学会了如何操作gpio后就可以控制一些传感器或者元器件了,所以先得把gpio的操作学好就可以控制一些复杂的东西了,后面香橙派还有很多功能我还没有研究完成,等需要用到什么就使用什么即可。

下一章我会介绍一下输入模式,毕竟在读传感器的时候不能只输出,还得输入呢

标签:26,引脚,一下,PC10,电平,香橙,gpio
From: https://www.cnblogs.com/Lavender-edgar/p/17873265.html

相关文章

  • AtCoder_abc326
    T12UP3DOWN简单的if判断,做题一分钟,翻译十分钟。。。代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){ intx,y;cin>>x>>y; if((x<=y&&y-x<=2)||(x>y&&x-y<=3)) cout<<"Yes"; elsecout<<"No&......
  • CodeForces 1526F Median Queries
    洛谷传送门CF传送门首先,如果我们确定了\(1,2\)或\(n-1,n\)的位置,我们就能求出原排列。因为题目给了\(p_1<p_2\),所以可以不考虑对称性。也就是说我们知道两个位置是\(1,2\)或\(n-1,n\)但不确定究竟是\(1,2\)还是\(n-1,n\)也可以。然后,如果我们确定......
  • 文心一言 VS 讯飞星火 VS chatgpt (126)-- 算法导论11.1 1题
    一、用go语言,假设一动态集合S用一个长度为m的直接寻址表T来表示。请给出一个查找S中最大元素的过程。你所给的过程在最坏情况下的运行时间是多少?文心一言,代码正常运行:在这个问题中,我们需要实现一个查找动态集合S中最大元素的算法,该动态集合使用一个长度为m的直接寻址表T......
  • docker 安装mysql 8.0.26
    sudodockerpullmysql:8.0.26创建数据目录和配置文件:在你的宿主机上创建一个目录来存放MySQL的配置文件和数据。你还需要为这个目录设置适当的权限1:sudomkdir-p/data/mysql8.0/conf/data/mysql8.0/data/data/mysql8.0/logssudochmod-R755/data/mysql8.0/conf/data/......
  • 51nod 2620 序列问题
    原题首先\(O(n\logn)\)的贪心很好想,显然用堆,每次合并两个权值最小的即可然后考虑\(O(n)\)怎么做?我们发现这个权值\(\max(a_i,a_{i+1})\)的\(\max\)很不好处理,因此我们考虑把他优化一下使用单调栈可以求出权值为\(a_i\)的合并区间,然后我们发现对于合并一个区间答案......
  • [香橙派开发系列]无屏幕使用香橙派
    目录前言一、使用的东西二、使用步骤1.下载系统到SD卡中2.上电连接串口3.打开ssh4.使用xshell连接香橙派最后前言在学单片机之前我就接触到树莓派这个掌间电脑,之前买了一块但是一直放在家里面吃灰,然后这几天突然感觉树莓派很好玩,准备买一块来玩一下,但是树莓派的价格实在是太高了......
  • 数据结构与算法之单链表-----黑马程序员(26-35)
    1.链表的概念在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素储存上并不连续。 创建链表如图所示和相关代码publicclassdanlianbiao{privateNodehead=null;//头部第一个结点privatestaticclassNode{//后面的每个结点intvalue;Nodene......
  • 20211326学习笔记12
    第十四章数据库系统一、知识点归纳(一)MySQL简介MySQL(MySQL2018)是一个关系数据库系统(Codd1970)c在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关联。关系结构使得可在表上运行查询来检索信息并修改数据库中的数据。关系......
  • 2661. 找出叠涂元素
    2661.找出叠涂元素2023年12月1日逆天题目描述,模拟一下就完事了。大致意思和思路遍历\(arr\)数组,然后再\(mat\)矩阵中将对应的数涂色。如果当遍历到第\(i\)个元素时,判断\(mat\)矩阵中对应的元素,如果该元素所在的行或者所在的列的数都被涂色了,就返回\(i\)。模拟一下就可以......
  • #6 2023.11.26
    395.arc140dOnetoOne原图是基环树森林。先把已知的边连上,会变成若干个基环树和若干个内向树。我们对环的期望数量计数。对于基环树,贡献显然为1。对于内向树,我们枚举大小的有序序列\(v_1,..,v_k\),贡献是\({1\overk}\prod{v_i\overn}\)。分治NTT算即可。396.a......