Jetson orin nano 使能 GPIO C++
1. 获取JetsonGPIO库
git clone https://github.com/pjueon/JetsonGPIO
cd JetsonGPIO
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_EXAMPLES=ON ..
sudo make install
2. 常用函数
2.1 GPIO引脚模式
GPIO::setmode(GPIO::BOARD);
// or
GPIO::setmode(GPIO::BCM);
// or
GPIO::setmode(GPIO::CVM);
// or
GPIO::setmode(GPIO::TEGRA_SOC);
2.2 引脚配置
通道作为输入,调用:
// (where channel is based on the pin numbering mode discussed above)
GPIO::setup(channel, GPIO::IN); // channel must be int or std::string
GPIO::setup(channel, GPIO::OUT);
还可以为输出通道指定初始值:
GPIO::setup(channel, GPIO::OUT, GPIO::HIGH);
2.3 输入输出
int value = GPIO::input(channel);
这将返回 GPIO::LOW(== 0) 或 GPIO::HIGH(== 1)
GPIO::output(channel, state);
2.4 清理工作
/* 在程序结束时,最好清理通道,以便所有引脚都设置为默认状态。 */
GPIO::cleanup();
GPIO::cleanup(chan1); // cleanup only chan1
3. 示例代码
运行要加上sudo
sudo ./PinControl
- main.cpp
#include <iostream>
#include <JetsonGPIO.h>
using namespace std;
class PinCtr {
private:
int pin_ = 4;
public:
PinCtr() {
GPIO::setmode(GPIO::BOARD);
}
void setPin(int pin_num, int status) {
pin_ = pin_num;
GPIO::setup(pin_, GPIO::OUT);
GPIO::output(pin_, status);
}
~PinCtr() {
cout << "~PinCtr" << endl;
GPIO::cleanup();
}
};
int main(int argc, char **argv) {
if (argc != 3) {
cout << "Usage : " << argv[0] << " <pin> <status> " << endl;
cout << "1 : GPIO::HIGH, 0 : GPIO::LOW" << endl;
return -1;
}
PinCtr pin;
int pin_num = stoi(argv[1]); // 将字符串转换为整数
int status = stoi(argv[2]); // 将字符串转换为整数
pin.setPin(pin_num, status);
return 0;
}
-
CMakeLists.txt
cmake -S . -B build cmake --build build
cmake_minimum_required(VERSION 3.10)
# 设置项目名称
project(PinControl)
# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 添加源文件
add_executable(PinControl main.cpp)
# 链接JetsonGPIO库
target_link_libraries(PinControl JetsonGPIO)
- 常规编译
g++ main.cpp -o PinControl -lJetsonGPIO