Jetsonnano B01 笔记2:GPIO库-Pycharm远程调试-点灯

今日继续我的Jetsonnano 学习之路,今日主要学习使用Pycharm远程调试Jetsonnano以及驱动使用Jetsonnano的GPIO库,最终尝试使用jetson点亮第一个LED。

本文搬运成分较多,因为Jetsonnano资料比较少,做这些笔记方便自己以及大家查阅。

目录

一、GPIO库:

Jetsonnano环境配置与安装库:

Python远程调试与库的导入:

一、ssh配置:

1. 确认ssh状态:

2. 获得设备IP

 二、使用pycharm连接SSH:

三、Pycharm配置:

下载Jetson.GPIO库:

Python代码:

设置GPIO的引脚定义:

消除警告:

设置引脚的模式:

读取引脚的值:

设置引脚的值:

清除所有引脚的设置:

设置中断:

事件检测:

事件回调函数:

Jetsonnano点灯测试代码:

在Jetson上的运行:

 运行Python文件:

停止python代码的运行:

 测试效果图:

参考文章:


一、GPIO库:

Jetson Nano 上设有 40PIN GPIO 接口。 Jetson Nano GPIO 电压为 3.3V ,因此在不使用
电压电平转换的情况下,不应将高于 3.3V 的电压电平连接 Nano GPIO 引脚。

Jetson TX1, TX2, AGX Xavier和Nano开发板包含一个40引脚GPIO头,类似于树莓派中的40引脚头。可以使用Jetson GPIO library包中提供的Python库来控制这些GPIO的数字输入和输出。该库具有与RPi相同的API。为树莓派的GPIO库,以便提供一种简单的方法来移动在树莓派上运行的应用程序到Jetson板。

本文档介绍了The Jetson GPIO库包中包含的内容,如何配置系统并运行提供的样例应用程序,以及库API。

Jetsonnano环境配置与安装库:

一般情况下 Jetson Nano 系统已经内置了 Jetson.GPIO 库不需要进行下面的安装和配置。
1) 首先需要安装 PIP 工具,打开终端后依次输入下方指令:
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python3-pip

 2) 接着下载安装Jetson.GPIO库,依次输入下方指令:

sudo pip install Jetson.GPIO
sudo pip3 install Jetson.GPIO

 3) 然后设置用户权限,依次输入下方指令:

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

4) 99-gpio.rules文件复制到rules.d目录,输入以下命令:

sudo cp /opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO/99-gpio.rules /etc/udev/rules.d/

 注意:这里要确认python包里rules文件所在的位置是否如上命令

5) 为了使新规则生效,我们需要运行以下命令来重新引导或重新加载 udev 规则。
sudo udevadm control –reload-rules && sudo udevadm trigger

Python远程调试与库的导入:

        有时我们不在jetson上使用pycharm 编程Python,可以选择在电脑上编程后将文件传输给jetson运行,嵌入式设备资源有限,在上面安装一个IDE有点浪费,所以,我们可以在常用开发设备上安装Pycharm,远程连接JetsonNano进行调试。 但电脑上没有jetson的GPIO库,因此这里学习一下怎么使用python远程调试以及导库:

一、ssh配置:

1. 确认ssh状态:

 可以通过下面的命令可以查看ssh的状态:

ps -ef | grep ssh

 如果只有ssh-agent 证明只开启了ssh client,没有ssh service,可以手动启动。

# 启动ssh服务
sudo /etc/init.d/ssh start
# 启动ssh服务
sudo service ssh start
# 重启ssh服务
sudo service ssh restart

2. 获得设备IP

ssh开启后,通过ifconfig 命令获得JetsonNano的 ip 地址,这里需要注意:

  • (1)无线连接路由器上网方式,查找 wlan 后的ip
  • (2)与路由器LAN口连接上网方式,查找 eth0 后的ip

 二、使用pycharm连接SSH:

 这样就成功连接上了:

三、Pycharm配置:

下载Jetson.GPIO库:

根据以下步骤找到并下载库:

Python代码:

设置GPIO的引脚定义:

#使用物理引脚编号模式,以板上引脚的物理位置为准。
GPIO.setmode(GPIO.BOARD) #使用 Broadcom SoC 的引脚编号模式,以引脚在芯片上的编号为准。
GPIO.setmode(GPIO.BCM)#使用 NVIDIA Tegra 芯片的引脚编号模式,以引脚在芯片上的编号为准。
GPIO.setmode(GPIO.CVM)#同样使用 NVIDIA Tegra 芯片的引脚编号模式。
GPIO.setmode(GPIO.TEGRA_SOC)

消除警告:

GPIO.setwarnings(False)

设置引脚的模式:

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)

读取引脚的值:

GPIO.input(channel)         #返回值为GPIO.LOW or GPIO.HIGH

设置引脚的值:

GPIO.output(channel, state) #state可以是GPIO.LOW or GPIO.HIGH

清除所有引脚的设置:

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

设置中断:

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

事件检测:

GPIO.add_event_detect(channel, GPIO.RISING)
run_other_code()
if GPIO.event_detected(channel):do_something()

事件回调函数:

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)

Jetsonnano点灯测试代码:

#入Jetson.GPIO库并导入time库。
import Jetson.GPIO as GPIO
import time#定义led_pin变量为GPIO引脚的数字编号,这里是7。
led_pin = 7#设置GPIO模式为BOARD模式,表示使用物理引脚编号来确定GPIO引脚。
GPIO.setmode(GPIO.BOARD)
#设置led_pin引脚为输出模式。
GPIO.setup(led_pin, GPIO.OUT)try:while 1:# 打印"on"并将led_pin引脚输出设置为高电平,点亮LED灯。print("on")GPIO.output(led_pin, GPIO.HIGH)
#使用time.sleep(2)函数延迟2秒time.sleep(2)
#打印"off"并将led_pin引脚输出设置为低电平,熄灭LED灯。print("off")GPIO.output(led_pin, GPIO.LOW)
#使用time.sleep(2)函数延迟2秒time.sleep(2)# 如果在循环过程中按下了键盘的Ctrl+C,将会触发KeyboardInterrupt异常。
#在异常处理代码中,将led_pin引脚设置为低电平并执行GPIO.cleanup()函数,清理GPIO资源。
except KeyboardInterrupt:GPIO.output(led_pin, GPIO.LOW)GPIO.cleanup()#打印"done"表示程序运行结束。
print("done")

在Jetson上的运行:

 运行Python文件:

编写完代码后保存为.py文件,再将此文件SSH远程传输给Jetsonnano,此处我是直接使用NoMachine远程连接了它的桌面,直接将其拖入文件资源管理器了:

然后就是打开Jetsonnano的终端,运行这段Python代码(没装Python的需要装):

#此处filename是你自己的文件名
python3 filename.py

这里注意此处filename是你自己的文件名,我的文件名是1,因此替换为

python3 1.py

然后回车就可以运行了。

停止python代码的运行:

 列出所有正在运行的Python进程:

ps aux | grep python

终止进程(其中`pid`是要终止的Python进程的进程ID):

kill pid

 测试效果图:

参考文章:

JetsonNano教程:Pycharm远程调试运行及本地与远端文件同步_jetsonnano运行pycharm-CSDN博客

 jetson nano GPIO控制说明_jetson nano 引脚_AoDeLuo的博客-CSDN博客

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

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

相关文章

第13章_瑞萨MCU零基础入门系列教程之Common SPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

QT(9.4)tcp通信,数据库,opencv,

作业&#xff1a; 1.服务器 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端头文件 #include <QMessageBox>//消息对话框头文件 #include <QTcpServer>//服务器头文件 #include <list>…

Linux修复损坏的文件系统

如何判断文件系统是否损坏 当文件系统受损时&#xff0c;将会出现一些明显的迹象。例如&#xff0c;文件或文件夹无法访问、文件大小异常、系统启动慢或无法启动等。此外&#xff0c;系统也可能发出一些错误信息&#xff0c;如"Input/output error"、"Filesyst…

Acwing算法心得——现代艺术(统计遍历)

大家好&#xff0c;我是晴天学长&#xff0c;先用两个一维数组维护数据&#xff0c;再统计遍历二维数组&#xff0c;需要的小伙伴请自取哦&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;现代艺术 2) .算法思路 现代艺术 1.两个数组维护行和列 2.遍历数组…

Spring框架简介

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

简明SQL条件查询指南:掌握WHERE实现数据筛选

条件查询是用于从数据库中根据特定条件筛选数据行的一种方式&#xff0c;它避免了检索整个表中的数据。通常&#xff0c;使用 WHERE 子句来定义过滤条件&#xff0c;只有符合这些条件的数据行才会被返回。 SQL中的运算符有&#xff1a;、!、<、> 等&#xff0c;用于进行…

「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

本文主要介绍在多个页面存在相同部分时&#xff0c;如何提取公共组件然后在多个页面中导入组件重复使用来减少重复代码。在这基础上介绍了通过嵌套路由的方式来避免页面较多或公共部分较多的情况下&#xff0c;避免不断手动导入公共组件的麻烦&#xff0c;并且加快页面跳转的速…

KT142C-sop16语音芯片ic的串口指令详细说明_默认9600指令可设

3.1 通讯格式 支持异步串口通讯模式,通过串口接受上位机发送的命令 通讯标准:9600 bps --- 可以发送指令修改&#xff0c;并且记忆&#xff0c;详见3.4.5 数据位 :8 停止位 :1 校验位 :none 流控制 :none 格式&#xff1a;$S VER Len CMD Feedback para1 …

PIGOSS BSM:网络大屏展现功能与特色全面解析

导语 PIGOSS BSM是一款强大的IT运维监控工具&#xff0c;提供了丰富的功能和特色。其中的“网络大屏”模块是其核心功能之一&#xff0c;能够以直观、全面的方式展示网络设备的状态信息和各种关键指标。本文将详细介绍PIGOSS BSM网络大屏的功能及特色&#xff0c;让您全面了解其…

多线程与高并发——并发编程(6)

文章目录 六、并发集合1 ConcurrentHashMap1.1 存储结构1.2 存储操作1.2.1 put方法1.2.2 putVal方法-散列算法1.2.3 putVal方法-添加数据到数组&初始化数组1.2.4 putVal方法-添加数据到链表1.3 扩容操作1.3.1 treeifyBin方法触发扩容1.3.2 tryPresize方法-针对putAll的初始…

React16、18 使用 Redux

Redux 核心 Redux 介绍 Redux 是javaScript 状态容器&#xff0c;提供可预测化的状态管理 Redux 工作流程 Actions&#xff1a;对象&#xff0c;描述对状态进行怎样的操作 Reducer&#xff1a;函数&#xff0c;操作状态并返回新的状态 Store&#xff1a;存储状态的容器&am…

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

关于µC/OS-III 多任务的基本理解

关于C/OS-III 多任务的基本理解 任务和任务管理是 RTOS 的核心&#xff0c;且大多数项目使用 RTOS 的目的就是为了使用 RTOS 的多任务管理能力。 C/OS-III作为经典的RTOS&#xff0c;了解并学习其任务管理机制&#xff0c;是非常有必要的。 文章目录 关于C/OS-III 多任务的基本…

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,SQL Server&#xff0c;Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 l…

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率&#xff0c;简化操作流程&#xff0c;并进行更多的自定义配置和控制。同时&#xff0c…

jenkins创建用户

一.背景 之前用了很多次&#xff0c;现在转到甲方爸爸的岗位&#xff0c;要培养大学毕业生&#xff0c;才发现好记性不如烂笔头。给年轻人写出来。 二.创建用户的过程 1.用户管理界面入口 Dashboard>Manage Jenkins>Jenkins own user database 2.点击右边的按钮“Cre…

深入《C++ Core Guidelines解析》:提升C++编程实践的关键指南

目录 1、写在前面2、推荐理由3、内容介绍4、作者介绍5、赠书 or 购买 1、写在前面 C Core Guidelines是一个正在进行的开源项目&#xff0c;通过将广泛认可的现代C上佳实践集中在一个地方来解决这些问题。Core Guidelines依赖于几十年的经验和早期的编码规则。它们与C本身共享一…

数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)

目录 方法一 算法视频分析 方法二 算法视频分析 Q&#xff1a;什么是“就地”捏&#xff1f; A&#xff1a;就是指辅助空间复杂度为O(1)&#xff0c;通俗一点来说就是不需要再开辟一块空间来实现算法。 特别说明&#xff1a; 笔者第一次录制视频&#xff0c;言语有些不顺&…

MySQL——常见问题

NULL和空值的区别 1、空值不占空间&#xff0c;NULL值占空间。当字段不为NULL时&#xff0c;也可以插入空值。 2、当使用 IS NOT NULL 或者 IS NULL 时&#xff0c;只能查出字段中没有不为NULL的或者为 NULL 的&#xff0c;不能查出空值。 3、判断NULL 用IS NULL 或者 is no…