如何使用cpp操作香橙派GPIO --使用<wiringPi.h>

news2025/4/7 13:18:03

香橙派是国产SBC ,对标树莓派。不过国内的开发环境确实挺惨的,没多少帖子讨论。楼主决定从今天起,不定期更新香橙派的教程。

今天的教程是如何使用香橙派下载wiringOP 并使用CPP操作GPIO

操作GPIO

下载wiringPi

  • 检查git 版本
  • 克隆wiringPi 仓库
  • 最后检查wiringOP 是否在仓库中
orangepi@orangepi3b:~$ git --version
git version 2.34.1
orangepi@orangepi3b:~$ git clone https://github.com/orangepi-xunlong/wiringOP
正克隆到 'wiringOP'...
remote: Enumerating objects: 1099, done.
remote: Counting objects: 100% (721/721), done.
remote: Compressing objects: 100% (114/114), done.
remote: Total 1099 (delta 666), reused 622 (delta 607), pack-reused 378 (from 1)
接收对象中: 100% (1099/1099), 459.35 KiB | 1007.00 KiB/s, 完成.
处理 delta 中: 100% (800/800), 完成.
orangepi@orangepi3b:~$ tree -L 1
.
├── bop_code
├── Desktop
├── Documents
├── Downloads
├── Music
├── opencvc
├── Pictures
├── Public
├── Templates
├── Videos
└── wiringOP

11 directories, 0 files


  • 切换到仓库
  • 查看目录
  • 编译
    • ./build clean
    • /build
orangepi@orangepi3b:~$ cd wiringOP/
orangepi@orangepi3b:~/wiringOP$ tree -L 1
.
├── build
├── COPYING.LESSER
├── debian
├── debian-template
├── devLib
├── examples
├── gpio
├── INSTALL
├── newVersion
├── People
├── pins
├── README.md
├── sh.sh
├── update
├── VERSION
├── version.h
├── wiringPi
└── wiringPiD

8 directories, 10 files
orangepi@orangepi3b:~/wiringOP$ ./build clean
wiringPi:   [Clean]
DevLib:     [Clean]
gpio:       [Clean]
Examples:   [Clean]
Gertboard:  [Clean]
PiFace:     [Clean]
Quick2Wire: [Clean]
PiGlow:     [Clean]
scrollPhat: [Clean]
Deb: 
orangepi@orangepi3b:~/wiringOP$ ./build
wiringPi Build script
=====================


WiringPi Library
[sudo] orangepi 的密码: 
[UnInstall]
[Compile] wiringPi.c
[Compile] wiringSerial.c
[Compile] wiringShift.c
[Compile] piHiPri.c
[Compile] piThread.c
[Compile] wiringPiSPI.c
[Compile] wiringPiI2C.c
[Compile] softPwm.c
.....
[Link]
[Install]

All Done.

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).


结果解读

NOTE: To compile programs with wiringPi, you need to add:
    -lwiringPi
  to your compile line(s) To use the Gertboard, MaxDetect, etc.
  code (the devLib), you need to also add:
    -lwiringPiDev
  to your compile line(s).

翻译:

注意: 使用wiringPi编译程序,你需要在编译命令中添加
-lwiringPi
若要使用 Gertboard, MaxDetect 这些库,还需要在代码的编译命令中添加
-lwiringPiDev

CPP 操作GPIO

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

#define LED_PIN 0

int main(){
    if (wiringPiSetup()==-1)
    {
        printf("wiring setup error\n");
        return 1;

    }

    pinMode(LED_PIN ,OUTPUT);

    while(1)
    {
        digitalWrite(LED_PIN ,HIGH);
        delay(500);
        digitalWrite(LED_PIN ,LOW);
        delay(500);
        printf("循环一次\n");
    }


    return 0;
}

orangepi@orangepi3b:~/bop_code$ gcc test_gpio.c  -o test_gpio -lwiringPi
orangepi@orangepi3b:~/bop_code$ chmod +x test_gpio
orangepi@orangepi3b:~/bop_code$ sudo ./test_gpio 
[sudo] orangepi 的密码: 
循环一次
循环一次

如何链接线路?
使用 gpio readall就可以查看GPIO 的编码
表格的方向是USB 贴近身体观察GPIO的顺序,通过颜色也可以观察
红色是5V 黑色是地线 橙色是3.3V 蓝色是可控的GPIO
我们这里 #define LED_PIN 0 实际上使用的是GPIO 140
也就是说 <wiringPi.h>使用的GPIO的编码是wPi编码,这样我们可以方便的把代码中的编号和物理世界中的连接对应

orangepi@orangepi3b:~$ gpio readall
 +------+-----+----------+--------+---+   PI3B   +---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 |      |     |     3.3V |        |   |  1 || 2  |   |        | 5V       |     |      |
 |  140 |   0 |    SDA.2 |     IN | 1 |  3 || 4  |   |        | 5V       |     |      |
 |  141 |   1 |    SCL.2 |     IN | 1 |  5 || 6  |   |        | GND      |     |      |
 |  147 |   2 |    PWM15 |     IN | 0 |  7 || 8  | 1 | ALT1   | RXD.2    | 3   | 25   |
 |      |     |      GND |        |   |  9 || 10 | 1 | ALT1   | TXD.2    | 4   | 24   |
 |  118 |   5 | GPIO3_C6 |     IN | 0 | 11 || 12 | 0 | IN     | GPIO3_C7 | 6   | 119  |
 |  128 |   7 | GPIO4_A0 |     IN | 0 | 13 || 14 |   |        | GND      |     |      |
 |  130 |   8 |    TXD.7 |     IN | 0 | 15 || 16 | 0 | IN     | RXD.7    | 9   | 131  |
 |      |     |     3.3V |        |   | 17 || 18 | 0 | IN     | GPIO4_A1 | 10  | 129  |
 |  138 |  11 | SPI3_TXD |     IN | 0 | 19 || 20 |   |        | GND      |     |      |
 |  136 |  12 | SPI3_RXD |     IN | 0 | 21 || 22 | 0 | IN     | TXD.9    | 13  | 132  |
 |  139 |  14 | SPI3_CLK |     IN | 0 | 23 || 24 | 0 | IN     | SPI3_CS1 | 15  | 134  |
 |      |     |      GND |        |   | 25 || 26 | 0 | IN     | GPIO3_D6 | 16  | 126  |
 |   32 |  17 |    SDA.3 |     IN | 1 | 27 || 28 | 1 | IN     | SCL.3    | 18  | 33   |
 |  133 |  19 |    RXD.9 |     IN | 0 | 29 || 30 |   |        | GND      |     |      |
 |  124 |  20 | GPIO3_D4 |     IN | 0 | 31 || 32 | 0 | IN     | PWM11    | 21  | 144  |
 |  127 |  22 | GPIO3_D7 |     IN | 0 | 33 || 34 |   |        | GND      |     |      |
 |  120 |  23 | GPIO3_D0 |     IN | 0 | 35 || 36 | 0 | IN     | GPIO3_D5 | 24  | 125  |
 |  123 |  25 | GPIO3_D3 |     IN | 0 | 37 || 38 | 0 | IN     | GPIO3_D2 | 26  | 122  |
 |      |     |      GND |        |   | 39 || 40 | 0 | IN     | GPIO3_D1 | 27  | 121  |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+   PI3B   +---+--------+----------+-----+------+

在这里插入图片描述

线路连接如下。LED连接的事项就不多说了,记得连1Kohm电阻,否则会烧坏。楼主的是香橙派3B-4G版 外面是散热外壳
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nacos-sdk-go v2.29 中一个拼写错误,我定位了3个小时 ……

文章目录 问题背景问题现象问题定位解决方案经验总结 问题背景 今天在给项目增加服务注册和发现功能时,选择了 nacos 作为服务注册中心。在使用 nacos-sdk-go v2.29 版本进行开发时,遇到了一个令人啼笑皆非的问题,足足花了3个小时才找到原因。 问题现象 在实现服务订阅通知功…

Linux中的文件寻址

Linux的层级结构 在Linux中一切皆文件 其中 要注意在命令行中看实际选择写哪一种路径 相对路径 绝对路径名称的简写&#xff0c;省略了用户当前所在的系统位置此名称只有在管理当前所在系统目录中子文件时才能使用系统中不以/开有的文件名称都为相对路径在程序操作时会自动…

静态时序分析:时钟标记(作为数据使用的时钟)及其分析方式

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 引言 一般情况下&#xff0c;设计中的时钟路径和数据路径是严格区分开的&#xff1a;时钟路径即从时钟源对象&#xff08;时钟定义点&#xff09;到触发器的时钟…

AI学习记录-QWQ32b太强了

业务理解能力爆表&#xff0c;指令遵循能力极强&#xff0c;才32b成本极低&#xff0c;大量的公司的项目可以嵌入到自己的项目当中了&#xff0c;再fineture一下&#xff0c;以后不上AI的系统都卖不出去了。 试验1 输出 试验2: 输出

STM32 FATFS - 在spi的SD卡中运行fatfs

参考文章 STM32 CubeMX 硬件SPI SD卡 FATFS_stm32cubemx fatfs-CSDN博客 例程地址&#xff1a;STM32FatFS: 基于stm32的fatfs例程&#xff0c;配合博客文章 基于野火STM32MINI开发板 STM32配置 系统模式配置 输出串口配置 SPI配置 使用全双工模式&#xff0c;禁用硬件…

FreeCAD傻瓜教程-装配体Assembly的详细使用过程

源起&#xff1a; 看了官方的教程说明&#xff0c;感觉太过简单&#xff0c;好多细节没有体现&#xff0c;且该部分的翻译还没有。这里是做个记录&#xff0c;对使用过程中的细节进行图文说明&#xff0c;以方便真正的新手能够快速应用&#xff0c;制作出自己的零件&#xff0c…

数字电子技术基础(三十七)——利用Multisim软件实现16线-4线编码器和4线-16线译码器

1 利用Multisim软件来实现16线-4线编码器 在之前的博客中完成了利用Multisim软件实现8线-3线优先编码器&#xff0c;现在使用Multisim软件来实现16线-4线编码器&#xff0c;其原理图如下所示&#xff1a; 使用字发生器来实现16线-4线编码器&#xff0c;器件选择&#xff1a; …

02_MySQL安装及配置

文章目录 一、下载二、安装及配置2.1、选择安装类型2.2、检查需要的依赖2.3、安装2.4、配置2.4.1、配置类型和网络2.4.2、配置账户和角色2.4.3、配置Windows服务2.4.4、让配置生效 2.5、验证是否安装成功 三、卸载3.1、运行MySQL安装工具3.2、卸载及清理3.3、卸载之后的检查工作…

Windows11,微软软件(VSCODE/EDG)错误登录,0x80190001错误

修改网络设置 运行以下命令&#xff0c;打开网络共享中心 Start-Process "control.exe" -ArgumentList "/name Microsoft.NetworkAndSharingCenter" 点击左下角的 选项 TLS 1.1 1.2 1.3 这三个选项 1.0 不建议启用&#xff0c;不安全 1.1 可以不用启用…

力扣刷题-热题100题-第29题(c++、python)

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envTypestudy-plan-v2&envIdtop-100-liked 计算链表长度 对于链表&#xff0c;难的就是不知道有多少元素&#xff…

阻止上传可执行程序

点击工具中的文件服务器资源管理器 、然后点击文件屏蔽管理中的文件屏蔽&#xff0c;然后导入目标文件选择要限制的属性即可

DirectX修复工具免费版下载安装教程(附安装包)

文章目录 前言一、DirectX修复工具免费版介绍二、DirectX修复工具免费版安装教程1. 下载安装包2. 解压文件3. 以管理员身份运行4. 开始检测与修复5. 查看修复详情 前言 本教程主要介绍的是DirectX修复工具免费版下载安装教程&#xff0c;帮您轻松解决 DirectX 相关问题。 一、…

UE5学习笔记 FPS游戏制作33 游戏保存

文章目录 核心思想创建数据对象创建UIUI参数和方法打开UI存档文件的位置可以保存的数据类型 核心思想 UE自己有保存游戏的功能&#xff0c;核心节点&#xff0c;类似于json操作&#xff0c;需要一个数据类的对象来进行保存和读取 创建存档 加载存档 保存存档 创建数据对象…

TypeScript vs. JavaScript:技术对比与核心差异解析

引言 在 Web 前端开发领域&#xff0c;JavaScript&#xff08;JS&#xff09;长期占据主导地位&#xff0c;但随着项目复杂度的提升&#xff0c;开发者逐渐面临维护性差、协作困难等问题。TypeScript&#xff08;TS&#xff09;作为 JavaScript 的超集&#xff0c;通过静态类型…

《C奥林匹斯宝典:基础篇 - 重载函数》

一、重载函数 &#xff08;一&#xff09;函数模板重载 详细解析&#xff1a;函数模板提供了一种通用的函数定义方式&#xff0c;可针对不同类型进行实例化。当存在函数模板与普通函数、其他函数模板同名时&#xff0c;就构成了函数模板重载。编译器在编译阶段&#xff0c;依…

【408--考研复习笔记】计算机网络----知识点速览

目录 一、计算机网络体系结构 1.计算机网络的定义与功能&#xff1a; 2.网络体系结构相关概念&#xff1a; 3.OSI 七层模型与 TCP/IP 模型&#xff1a; 4.通信方式与交换技术&#xff1a; 电路交换 报文交换 分组交换 5.端到端通信和点到点通信&#xff1a; 6.计算机…

TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享

导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据&#xff0c;让架构师更简单、高效地定位问题、分析问题、解决问题&#xff0c;已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数&#xff0c;帮助大家更好地观测系统的状…

15:00开始面试,15:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

蓝桥杯准备(前缀和差分)

import java.util.Scanner; public class qianzhuihe {public static void main(String[] args) {int N,M;Scanner scnew Scanner(System.in);Nsc.nextInt();Msc.nextInt();int []treesnew int[N1];//设为N1的意义&#xff0c;防止越界int []prefixSumnew int[N1];for(int i1;i…

Minimind 训练一个自己专属语言模型

发现了一个宝藏项目&#xff0c; 宣传是完全从0开始&#xff0c;仅用3块钱成本 2小时&#xff01;即可训练出仅为25.8M的超小语言模型MiniMind&#xff0c;最小版本体积是 GPT-3 的 17000&#xff0c;做到最普通的个人GPU也可快速训练 https://github.com/jingyaogong/minimi…