jetson nano GPIO控制说明

这篇具有很好参考价值的文章主要介绍了jetson nano GPIO控制说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.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的引脚对照和树莓派一致,大家再开发学习时,可以参照树莓派.
jetsonnanogpio,jetson nano,python,嵌入式硬件

jetsonnanogpio,jetson nano,python,嵌入式硬件

二.安装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之间的电压值被称为不确定状态。
jetsonnanogpio,jetson nano,python,嵌入式硬件

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

PWM

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

I2C

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

I2S

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

SPI

SPI(Serial Peripheral Interface)串行外围设备接口是一种全双工短距单主设备通信协议,与UART不同,它是一种同步通信协议。SPI简单的连接方式之一是单主从连接,如图所示。一般来说,总共有4条数据线,分别是时钟(SCLK)、主入从出 (Master In Slave Out,MISO)、主出从入 (Master Out Slave In,MOSI)以及片选(CS)。
jetsonnanogpio,jetson nano,python,嵌入式硬件
注意: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);
    

五.例程

jetsonnanogpio,jetson nano,python,嵌入式硬件
jetsonnanogpio,jetson nano,python,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-566708.html

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")

到了这里,关于jetson nano GPIO控制说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

    断断续续地前后花了一个多星期配置环境以及部署模型,期间也报了无数错误,参考了很多文档,求助了身边的朋友,因此尽可能详细的记录一下这个过程。 此处感谢Xnhyacinth在配置过程中对我的帮助哈哈哈꒰ঌ( ⌯’ \\\'⌯)໒꒱ 我主机上的环境是python3.9,cuda11.6 jetson nano环境

    2023年04月12日
    浏览(57)
  • 【nano系列】jetson nano 迁移系统、制作SD卡启动扩展内存(二)

    我的SD卡在nano中显示的名称为 /dev/sda1 ,不同于其他文章 的 /dev/mmcblk1p1。 Micro SD卡是一种极细小的快闪存储器卡,其格式源自SanDisk创造,原本这种记忆卡称为T-Flash,及后改称为Trans Flash。TF卡是Micro SD卡的旧称呼,两者没有区别。 nano编辑器无需图形界面,操作比vim更方便 下

    2023年04月19日
    浏览(37)
  • Jetson nano系统安装和环境部署

    使用sdk-manager安装CUDA,这个安装可前面安装JetPack系统操作类似,然后将板子上Micro USB通过数据线和电脑链接。如下图: 这一步就不用接跳线了!选中红框的所有文件,开始下载安装。 安装完成后会自动添加路径,这点不错,如果没有自动添加则要手动添加。手动添加方式:

    2024年02月15日
    浏览(45)
  • 对于jetson nano 的docker部署jetson-inference等模型

    对于Nvidia jetson nano来说是一款十分优秀的网络模型部署设备我对于nano来说也是学习了2个星期左右.这也是对我这一阶段做一个复习总结吧! 目录 烧录  下载jetson-inference dock镜像部署操作  跑个例程助助兴 找到函数接口进行调整 我用的是jetson nano a02 版本 是4GB内存大小的 首先

    2024年02月05日
    浏览(38)
  • jetson nano装opencv4.1.1

    一:下载opencv4.1.1及其相关的安装包,修改一下 可以去官网下载(opencv4和opencv-contrib的版本要对应): opencv4.1.1: https://github.com/opencv/opencv/tags?after=4.3.0 opencv-contrib-4.1.1: https://github.com/opencv/opencv_contrib/tags?after=3.4.12 也可以去这里下载:https://download.csdn.net/download/weixin_45235219/87

    2024年02月05日
    浏览(49)
  • 【适用于Jetson Orin Nano的录屏软件】

    适用于Jetson Orin Nano的录屏软件kazam,亲测好用!

    2024年02月02日
    浏览(55)
  • 自己制作智能语音机器人(基于jetson nano)

    如上图,主要采用jetson上编写python代码实现,支持离线语音唤醒、在线语音识别、大模型智能文档、在线语音合成。 所需硬件如下: jetson nano:linux 科大讯飞麦克风硬件:AIUI R818麦克阵列开发套件+6麦阵列,支持离线语音唤醒 USB免驱声卡+喇叭 所需软件如下: 科大讯飞在线语

    2024年02月15日
    浏览(117)
  • 在 Jetson Nano 上安装 ncnn 深度学习框架。

    本页面将指导您在 Jetson Nano 上安装腾讯的 ncnn 框架。由于 ncnn 框架面向移动设备(例如 Android 手机),因此它不支持 CUDA。然而,大多数 Android 手机使用 Vulkan API 对其 GPU 进行低级访问。 ncnn 框架可以使用 Vulkan 例程来加速深度学习模型的卷积。 Jetson Nano 具有 ncnn 将使用的

    2024年02月11日
    浏览(37)
  • Jetson nano裸机介绍及 Opencv的环境配置

    本人比较痴迷于硬件方向,最近得到老师的支持,从老师手里借到一块Nvidia Jetson nano 的板子(狂喜),下文简述nano。刚拿到板子经过已经完成点灯的操作,老师指示点完灯可以配置opencv的环境,前往图像处理的指示海洋。而配置opencv的过程曲折而痛苦,这里主要总结并分享

    2024年02月06日
    浏览(42)
  • Nvidia Jetson Nano Developer KIT配置全过程(一):jetson镜像系统烧录

    关于Jetson Nano开发板的规格参数等指标信息,可以登录Nvidia官方网站查看,也可以打开下面的连接查看。 重点提醒:JetsonNano处理器架构是aarch64架构,所以在jetson nano上安装软件时请选择arrch64版本的,否则会导致无法预料的严重后果。 arm64和aarch64之间的区别:arm64已经与aarc

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包