jetson nano GPIO控制说明

2023-05-16

文章目录

  • 一.GPIO介绍
  • 二.安装GPIO库
    • python库
    • C++库
  • 三.几种常用的通信协议
    • UART
    • PWM
    • I2C
    • I2S
    • SPI
  • 四.控制函数说明
    • python([参考](https://pypi.org/project/Jetson.GPIO/))
    • C++
  • 五.例程

一.GPIO介绍

GPIO(General Purpose Input Output)通用输入输出。有时候我们会简称为“IO口”。GPIO口在智能硬件开发中是一个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。Jetson TX1、TX2、AGX Xavier和Nano开发板包含一个40针GPIO接头,类似于树莓派中的40针接头。可以使用Jetson GPIO library包中提供的Python库或者C++库控制这些GPIO的数字输入和输出。该库与Raspberry Pi的RPi.GPIO库具有相同的API,以便提供将在Raspberrry Pi上运行的应用程序移动到Jetson板的简单方法。
GPIO四种模式:

  • BOARD
  • BCM
  • CVM
  • TEGRA_SOC

提示:四种模式可以分为两组:BOARD和BCM一组,CVM和TEFRA_SOC一组。其中,前两种源于RPi.GPIO library,因此Jetson Nano的引脚对照和树莓派一致,大家再开发学习时,可以参照树莓派.
在这里插入图片描述

在这里插入图片描述

二.安装GPIO库

python库

  1. jetson nano原版本系统自带,但是也可以直接pip安装或者官网下载源代码安装

    # pip直接安装
    sudo pip install Jetson.GPIO
    
    # 或者下载代码进行安装
    sudo python3 setup.py install
    
    
  2. 设置用户权限,为了使用Jetson GPIO库,必须首先设置正确的用户权限/组。创建新的gpio用户组。然后将用户添加到新创建的组中。

    sudo groupadd -f -r gpio
    sudo usermod -a -G gpio your_user_name
    

    通过将99-gpio.rules文件复制到rules.d目录来安装自定义udev规则。

    • 如果是将源代码下载到Jetson.GPIO:

      sudo cp lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/
      
    • 如果是使用pip安装的Jetson.GPIO,则在虚拟环境中使用pip:

      sudo cp venv/lib/pythonNN/site-packages/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/
      
  3. 最后需要通过运行以下命令重新启动或重新加载udev规则:

    sudo udevadm control --reload-rules && sudo udevadm trigger
    

C++库

  1. 从官网克隆代码

    git clone https://github.com/pjueon/JetsonGPIO
    
  2. 创建构建目录并将目录更改为该目录。

    cd JetsonGPIO
    mkdir build && cd build
    
  3. 配置cmake

    cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_EXAMPLES=ON
    # 参数选项说明
    -DCMAKE_INSTALL_PREFIX=/usr # 选择基础安装目录
    -DBUILD_EXAMPLES=ON # 选择创建samples
    
  4. 构建以及安装库

    sudo make install
    

三.几种常用的通信协议

上面介绍了什么是GPIO口以及如何安装 GPIO库,但是我们还不能立即去使用。我们还得再了解一下几个常用的通信协议,这样我们才能愉快的使用。

UART

UART(Universal Asynchronous Receiver and Transmitter)是一种非常常见的接口或协议,几乎在每台计算机或微处理器上都可以找到它,中文我们一般称为通用异步收发传输器,也称其为RS-232标准。该协议是全双工协议,它也是一种包括特定通信的电子、机械和物理特性的全面标准。当在总线上发送数据时,数据电平需要转换成适合RS-232总线的电平,在总线上传输器发送不断变化的电压。高于3V的电压值即为逻辑0,而低于-3V的电压值即为逻辑1,-3~3V之间的电压值被称为不确定状态。
在这里插入图片描述

很多传感器在其输出引脚上都能使用UART通信协议,我们就可以使用这些传感器与我们的树莓派和Nano通信。

PWM

PWM(Pulse Width Modulation)脉冲宽度调制(简称脉宽调制,通俗的讲就是调节脉冲的宽度),是电子电力应用中非常重要的一种控制技术 。简单的说,PWM就是在一个周期内,控制高电平多长时间,低电平多长时间PWM有非常广泛的应用,比如直流电机的无极调速,开关电源、逆变器等。
在这里插入图片描述

I2C

I2 C(Inter-Integrated Circuit)是一种用两条连线工作的半双工协议,只要发送端在发送数据,接收端就只能监听而不能发送数据,相反也是如此。市面上有一些带有I2C接口的16×2字符点阵LCD显示器模块,我们可以写一下程序在这块屏幕上显示。
在这里插入图片描述

I2S

I2S(Inter-IC Sound, Integrated Interchip Sound)是飞利浦在1986年定义(1996年修订)的数字音频传输标准,用于数字音频数据在系统内部器件之间传输,例如编解码器CODEC、DSP、数字输入/输出接口、ADC、DAC和数字滤波器等。
在这里插入图片描述

SPI

SPI(Serial Peripheral Interface)串行外围设备接口是一种全双工短距单主设备通信协议,与UART不同,它是一种同步通信协议。SPI简单的连接方式之一是单主从连接,如图所示。一般来说,总共有4条数据线,分别是时钟(SCLK)、主入从出 (Master In Slave Out,MISO)、主出从入 (Master Out Slave In,MOSI)以及片选(CS)。
在这里插入图片描述
注意:NVIDIA Jetson Nano的GPIO口输入的电压为3.3v,大家确保输入电压不要超过3.3V,否则你的板子可能会坏。

四.控制函数说明

python(参考)

  1. 设置GPIO的引脚定义

    GPIO.setmode(GPIO.BOARD)
    # or
    GPIO.setmode(GPIO.BCM)
    # or
    GPIO.setmode(GPIO.CVM)
    # or
    GPIO.setmode(GPIO.TEGRA_SOC)
    
  2. 消除警告

    GPIO.setwarnings(False)
    
  3. 设置一个引脚的模式

    GPIO.setup(channel, GPIO.IN) # 引脚设置为输入
    GPIO.setup(channel, GPIO.OUT) # 引脚设置为输出
    GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH) # 带初始化的引脚定义
    
    # 同时设定多个引脚的定义
    channels = [18, 12, 13]
    GPIO.setup(channels, GPIO.OUT)
    
  4. 读取引脚的值

    GPIO.input(channel) #返回值为GPIO.LOW or GPIO.HIGH
    
  5. 设置引脚的值

    GPIO.output(channel, state) #state可以是GPIO.LOW or GPIO.HIGH
    
  6. 清除所有引脚的设置

    GPIO.cleanup() #清除所有引脚的值
    GPIO.cleanup([chan1, chan2]) #清除部分引脚的值
    
  7. 设置中断

    #第二个参数指定要检测的边缘,可以是GPIO.RISING、GPIO.FALLING或GPIO.BOTH。
    #如果您只想将等待时间限制为指定的时间,可以选择设置超时:
    GPIO.wait_for_edge(channel, GPIO.RISING)
    GPIO.wait_for_edge(channel, GPIO.RISING, timeout=500)
    
  8. 事件检测

    GPIO.add_event_detect(channel, GPIO.RISING)
    run_other_code()
    if GPIO.event_detected(channel):
        do_something()
    
  9. 事件回调函数

    def callback_one(channel):
        print("First Callback")
    
    def callback_two(channel):
        print("Second Callback")
    
    GPIO.add_event_detect(channel, GPIO.RISING)
    GPIO.add_event_callback(channel, callback_one)
    GPIO.add_event_callback(channel, callback_two)
    

C++

  1. cmake链接库

    find_package(JetsonGPIO)
    target_link_libraries(mytarget JetsonGPIO)
    
  2. 程序导入库

    #include <JetsonGPIO.h>
    using namespace GPIO;
    
  3. 设置GPIO的引脚定义

    GPIO::setmode(GPIO::BOARD);
    // or
    GPIO::setmode(GPIO::BCM);
    // or
    GPIO::setmode(GPIO::CVM);
    // or
    GPIO::setmode(GPIO::TEGRA_SOC);
    
  4. 消除警告

    GPIO::setwarnings(false);
    
  5. 设置一个引脚的模式

    GPIO::setup(channel, GPIO::IN);
    GPIO::setup(channel, GPIO::OUT);
    GPIO::setup(channel, GPIO::OUT, GPIO::HIGH);
    
  6. 读取引脚的值

    int value = GPIO::input(channel);
    
  7. 设置引脚的值

    GPIO::output(channel, state); //GPIO::LOW(== 0) or GPIO::HIGH(== 1)
    
  8. 清除所有引脚的设置

    GPIO::cleanup();
    
  9. 设置中断

    #第二个参数指定要检测的边缘,可以是GPIO.RISING、GPIO.FALLING或GPIO.BOTH。
    #如果您只想将等待时间限制为指定的时间,可以选择设置超时:
    GPIO::wait_for_edge(channel, GPIO::RISING);
    
  10. 事件检测

    // set rising edge detection on the channel
    GPIO::add_event_detect(channel, GPIO::RISING);
    run_other_code();
    if(GPIO::event_detected(channel))
        do_something();
    
  11. 事件回调函数

    // you can also use callbacks witout any argument
    void callback_one() 
    {
        std::cout << "First Callback" << std::endl;
    }
    
    void callback_two() 
    {
        std::cout << "Second Callback" << std::endl;
    }
    
    GPIO::add_event_detect(channel, GPIO::RISING);
    GPIO::add_event_callback(channel, callback_one);
    GPIO::add_event_callback(channel, callback_two);
    

五.例程

在这里插入图片描述
在这里插入图片描述

import Jetson.GPIO as GPIO
import time
led_pin = 7
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT)
try:

    while 1:
        print("on")
        GPIO.output(led_pin, GPIO.HIGH)
        time.sleep(2)
        print("off")
        GPIO.output(led_pin, GPIO.LOW)
        time.sleep(2)

except KeyboardInterrupt:
    GPIO.output(led_pin, GPIO.LOW)
    GPIO.cleanup()
print("done")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jetson nano GPIO控制说明 的相关文章

  • 基于Jetson NX的模型部署

    系统安装 系统安装过程分为3步 xff1a 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https developer nvidia com jetson nano sd card image Wi
  • 4.jetson更换python版本

    问题与背景 jetson自带的python版本是3 6 9 xff0c 太老旧了 xff0c 希望更换python版本 尝试替换成python3 7的版本 但是在未替换之前 xff0c 已经装了pip3了 xff0c 是否pip3会与pyt
  • jetson nano GPIO控制说明

    文章目录 一 GPIO介绍二 安装GPIO库python库C 43 43 库 三 几种常用的通信协议UARTPWMI2CI2SSPI 四 控制函数说明python xff08 参考 https pypi org project Jetson
  • NVIDIA Jetson Xavier melodic-ros安装

    以下方法实测有效 1 修改 source list 换源需要换 ARM 的源 xff0c 不要换成了 PC 平台的软件源 xff0c Xavier 的系统是18 04 bionic sudo vim etc apt sources list
  • 浅析TMS320F28035的GPIO模块

    目录 GPIO简介硬件电路软件代码总结 通用输入输出端口 General Purpose Input Output GPIO 几乎是学习包括DSP xff0c 单片机在内的微处理器的第一步 GPIO的功能包括基本的输入 xff0c 输出 x
  • linux用户态使用gpio中断方法

    一 用户空间gpio的调用文件 用户空间访问gpio 即通过sysfs接口访问gpio 下面是 sys class gpio目录下的三种文件 export unexport文件 gpioN指代具体的gpio引脚 gpio chipN指代gp
  • 如何使用 Linux 命令行文本编辑器 Nano

    使用命令行时 您经常需要创建或编辑文本文件 Vim 和 Emacs 是两个最强大和流行的命令行编辑器 它们都有一个陡峭的学习曲线 可能会让新用户感到害怕 对于那些需要简单编辑器的人来说 有 nano GNU nano 是一款适用于 Unix
  • AIR103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口GPIO库使用及示例进行复现及分析 了解该的基本原理及操作方法 软件及工具版本 LuatOS AIR103 b
  • 品味树莓派:GPIO口定义、电气特性、启动状态等基础说明

    文章目录 目录 GPIO口定义 电气特性 启动状态 总结 目录 树莓派相比成品化的电脑来说有很多独立的GPIO口可供开发使用 可以方便的实现很多实物相关的功能 本文将对树莓派开放给用户的GPIO口的针脚定义 电气特性 启动状态等基础内容做个
  • STM32F103 GPIO输出模式2MHz,10MHz,50MHz波形对比

    在STM32F103中GPIO的输出模式有三种速度配置 如图所示 经过测试发现 这三种速度的输出模式与IO的翻转频率没有关系 它们影响的可能是驱动能力 下面是在IO极限频率 18MHz 下 三种模式的波形
  • MC9S12XEP100引脚的复用方式

    嵌入式码农小明最近在研发一个嵌入式产品 用的MC9S12XEP100芯片 其中三个需求需要通过几个使用SPI通讯的芯片实现 硬件开发人员小红照着芯片原理图布好了线 不知是否是没考虑到SPI通讯可以通过CS line来控制要通讯的从机从而实现
  • yolov8系列[四]-yolov8模型部署

    yolov8系列 四 yolov8模型部署jetson平台 jetson平台 0 安装环境 1 下载源代码 2 pt 转换模型转换为 onnx 模型 3 配置deepstream yolo 4 运行 jetson平台 0 安装环境 下载to
  • 零基础玩转树莓派(四)—GPIO端口控制(LED灯)

    一 GPIO介绍 树莓派3B 和普通电脑不一样的地方在于它还带了40个可编程的GPIO General Purpose Input Output 可以用来驱动各种外设 如传感器 步进电机等 GPIO General Purpose I O
  • Nvidia Jetson 编解码开发(6)Jetpack 4.x版本Multimedia API 硬件编码开发--输入端对接Camera V4L2采集

    1 前言 Nvidia Jetson 编解码开发 2 Jetpack 4 x版本Multimedia API 硬件编码开发 集成encode模块 free xx的博客 CSDN博客 基于上篇继续开发 由于上篇只集成了encode模块 但是编
  • Nvidia Jetson 编解码开发(7)Jetpack 4.x版本Multimedia API 硬件编码开发--输出端对接ROS publish

    1 前言 Nvidia Jetson 编解码开发 6 Jetpack 4 x版本Multimedia API 硬件编码开发 输入端对接Camera V4L2采集 free xx的博客 CSDN博客 基于上篇基于开发 需求 1 2路Camer
  • 【自我提高】树莓派GPIO的几种语言控制方法 C 篇

    使用C语言控制 GPIO 18 首先知道树莓派外置IO的关系对照表 我这里的树莓派是 PI 3B V1 2 关系对照表如下 C 语言下使用 wiringPi GPIO 进行编程 要安装 wiringPi pi raspberrypi sud
  • 如何在Python中运行后一段时间内禁用Raspberry Pi GPIO事件?

    每当我的 Raspberry Pi 的 GPIO 引脚出现下降沿时 我就会创建一个事件 但是 我想在每次运行后禁用此事件一段时间 例如 5 秒 我希望在该时间段之后再次启用该事件 我的第一个想法就是使用sleep 5 在实际的事件函数中 但
  • Raspberry Pi RuntimeError:已为此 GPIO 通道启用冲突边缘检测

    我正在遵循此处找到的教程 https www linkedin com pulse prepare your raspberry pi work aws iot kay lerch I have not even begun the int
  • Beaglebone GPIO 输入不起作用

    我正在使用 beaglebone 通过 sysfs 接口访问特定引脚的数字输入 我可以更改输出状态 但不能更改输入 我所做的是 我有两个引脚 pinA 和 pinB pinA 我将其输出 pinB 我将其输入 将 pinA 连接到 pinB
  • GPIO-Hog声明的目的和用途

    问题 其目的和用例是什么gpio hog宣言 可以从用户空间连接 占用 的 GPIO 引脚吗 如果 占用 GPIO 引脚无法与用户空间交互 那么是否有任何机制可以在 dts 文件中配置 GPIO 引脚以进行用户空间交互 背景 我正在尝试配置

随机推荐

  • Java的大端小端字节序

    在计算机中 xff0c 内存地址通常是按照地址递增的方式分配的 xff0c 也就是说 xff0c 低地址是指内存的起始位置 xff0c 高地址是指内存的末尾位置 在大多数体系结构中 xff0c 数据存储在内存中是以字节为单位进行的 例如 x
  • DSP28335 printf重定向问题调试记录

    最近几天在玩DSP28335板子 xff0c 在实现printf重定向功能时 xff0c 遇到很多问题 xff0c 最终结合网上一些人的经验和个人实践 xff0c 最终解决了问题 本文做一个简单的总结 xff0c 以便后续查阅 同时也是希望
  • C++ 绝对路径与相对路径

    对于一些第三方的SDK xff0c 一般会包含头文件 h xff0c 静态库文件 lib 和动态库文件 dll 文件位置 xff1a 为了提高程序的可移植性 xff0c 将第三库放在解决方案 sln 或者工程 vcxproj 文件所在的文件
  • C/C++ 函数与指针取地址符

    int f1 float int f2 char int f3 float int f4 float int pf float 则以下不合法的是 int p float 61 amp f1 pf 61 amp f4 pf 61 amp f2
  • C/C++编程异常处理中try和throw以及catch语句的用法

    这篇文章主要介绍了C 43 43 编程异常处理中try和throw以及catch语句的用法 包括对Catch块的计算方式的介绍 若要在 C 43 43 中实现异常处理 xff0c 你可以使用 try throw 和 catch 表达式 首先
  • c/c++中的string常用函数用法总结

    标准c 43 43 中string类函数介绍 注意不是CString 之所以抛弃char 的字符串而选用C 43 43 标准程序库中的string类 xff0c 是因为他和前者比较起来 xff0c 不必 担心内存是否足够 字符串长度等等 x
  • Convolutional Pose Machines

    本论文将 深度学习 应用于人体姿态分析 xff0c 同时用卷积图层表达纹理信息和空间信息 目前在2016年的 MPII竞赛中名列前茅 作者在github提供了 训练和测试源码 convolutional pose machines CVPR
  • OpenCV学习—01:矩阵的掩膜操作

    一 获取图像的像素指针 CV Assert srcImg depth 61 61 CV 8U Mat ptr lt uchar gt int i 61 0 获取像素矩阵的指针 xff0c 索引i表示第几行 xff0c 从0开始计数 获取当前
  • OpenCV学习—02:记录程序的运行时间

    首先 xff0c 我的电脑配置 xff1a VS2013 43 Opencv3 1 0 43 Win 64bit 有时 xff0c 我们想知道要程序一共运行了多长时间 xff0c 这个很常用 xff0c 也很简单 xff0c 仅仅需要两个函
  • OpenCV学习—03:Mat对象

    Mat对象与IplImage对象 Mat对象是OpenCV2 0之后引进的数据结构 自动分配内存 不存在内存泄漏的问题 xff0c 是面向对象的数据结构 IplImage是从2001年OpenCV发布之后就一直存在的 xff0c 是C语言风
  • 无刷电机桨叶正反桨区别

    无刷电机桨叶正反桨区别 桨叶平放面对自己 xff0c 左高右低为反桨 xff0c 反之为正桨cw xff1a 反桨ccw xff1a 正桨作用 xff1a 为了抵消单个螺旋桨的反扭矩 xff0c 所以每个桨的旋转方向是不一样的
  • matlab的mac版本注释快捷键

    注释 xff1a command 43 取消注释 xff1a command 43 T
  • matlab polyfit和polyval函数的使用

    Matlab polyfit和polyval函数的使用 pp 61 polyfit t p n 多项式拟合 n为拟合的阶数 py 61 polyval pp t 求出多项式的值
  • 谷歌浏览器网页缩放

    谷歌浏览器网页缩放 win xff1a Ctrl 43 43 或者 mac xff1a command 43 43 或者
  • mac系统传统映像必须转换解决方法

    mac系统传统映像必须转换解决方法 步骤一 xff1a 打开电脑自带的 磁盘工具 步骤二 xff1a 选择映像 gt 转换即可
  • ubuntu18.04 command not found: catkin_init_workspace

    使用catkin init workspace命令报错 xff1a command not found catkin init workspace 使用以下命令解决 xff1a source opt ros kinetic setup ba
  • intel realsense D400系列相机介绍(一)

    文章目录 intel realsense D42 intel realsense D400介绍2 3 立体视觉深度技术概述2 4 摄像机系统框图2 5 英特尔Intel RealSense 深度模块D400系列产品2 6 英特尔Intel
  • 宏定义(无参,有参,宏函数)(详细介绍)

    以符号 开头的命令 xff0c 如 xff1a span class token macro property span class token directive keyword define span N 10 span span cl
  • intel realsense 深度视野范围与模组硬件说明

    文章目录 4 4 距离 xff08 Z xff09 处的深度视场4 5 无效深度带4 6 最小测量深度4 7 深度质量规范4 8 深度起点 xff08 地面零点参考 xff09 4 8 1 深度原点X Y坐标 7 2 视觉处理器D4板外形7
  • jetson nano GPIO控制说明

    文章目录 一 GPIO介绍二 安装GPIO库python库C 43 43 库 三 几种常用的通信协议UARTPWMI2CI2SSPI 四 控制函数说明python xff08 参考 https pypi org project Jetson