NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁

在前面的文章中,我已经想大家介绍了NVIDIA Jetson Nano这个板子。今天我将给大家介绍NVIDIA Jetson Nano最重要的一个接口–GPIO。Jetson Nano 和树莓派一样作为嵌入式设备提供了GPIO接口,这个接口支持UART,PWM,I2S,I2C等方式通信。在本期文章,我将和大家一起探索。

目录

  • GPIO口介绍
  • UART,PWM,I2S,I2C
  • 如何安装GPIO库
  • 用代码控制LED灯闪烁

GPIO


GPIO(General Purpose Input Output)通用输入输出。有时候我们会简称为“IO口”。通用,就是说它是万金油,干什么都行,既能当输入口使用,又能当输出口使用。

那我们怎么用? 写软件控制。

最常见的应用-开关控制。我们通过软件代码。需要亮灯的时候调用GPIO口拉高的函数,给出一个高电平信号,告诉它通电点灯。需要熄灯的时候调用GPIO拉低的函数,给一个低电平信号,让灯灭。这样即可实现控制。

GPIO口在智能硬件开发中是一个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。

GPIO口的使用非常广泛,现在比较热门的树莓派和NVIDIA Jetson Nano都搭载了40针的GPIO口,都可以通过python的一个第三方库GPIO来调用,并实现与其他的一下传感器或者外设设备的交互。后面着重介绍。

Jetson nano 的GPIO引脚图

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第1张图片

GPIO四种模式

  • BOARD
  • BCM
  • CVM
  • TEGRA_SOC

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


UART,PWM,I2S,I2C

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

UART

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

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第2张图片

很多传感器在其输出引脚上都能使用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口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第3张图片


注意:NVIDIA Jetson Nano的GPIO口输入的电压为3.3v,大家确保输入电压不要超过3.3V,否则你的板子可能会坏。

设置GPIO口

Jetson.GPIO和RPI GPIO口都是一样的,大家在树莓派和NVIDIA Jetson Nano都可以调用这个库去创造自己的python程序。

现在我们来在NVIDIA Jetson Nano上安装GPIO这个库。

第一步 更新pip

打开终端执行:

pip install --upgrade pip

第二步 安装 Jetson.GPIO

打开终端执行:

pip install Jetson.GPIO

第三步 设置权限

在NVIDIA Jetson Nano上配置安全权限才能运行程序。创建新的gpio用户组。然后,将当前帐户添加到此gpio组。键入以下命令:

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

提示: your_account 为你自己的用户名,不然库会无法使用

第四步 验证Jetson.GPIO是否安装成功

python3
>>> import Jetson.GPIO as GPIO
>>> GPIO.VERSION

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第4张图片

点亮LED灯

我们将通过一个简单的demo实现一个LED灯的闪烁.

硬件准备

  • NVIDIA Jetson Nano
  • 面包板(可有可无)
  • 一个LED灯
  • 若干杜邦线

硬件连接

第一步 将杜邦线一段连接到7号引脚和GND引脚上,如下图所示

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第5张图片

第二步 将LED最长的引脚接GPIO 7 pin,最短的接GPIO GND . 如下图所示:

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第6张图片

代码编写

我们可以在NVIDIA Jetson Nano上安装一个VScode来编写代码,或者使用gedit和vim来编写.

第一步 导入包

import Jetson.GPIO as GPIO
import time

第二步 声明GPIO pin 7为led的引脚;并设置这里引脚采用BOARD编码方式。将pin 7设置为控制信号的输出端口

led_pin = 7
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT)

第三步 设置GPIO的引脚7上的高电平,让LED点亮。时隔两秒后,将引脚7上设置为低电平,让LED熄灭。在做两秒延迟,反复循环.

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

第四步 为了防止错误,用try…except…捕捉代码中的错误。如果出现错误,通过调用GPIO.output将LED关闭,并释放所有正在使用的资源。

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

整体代码:

NVIDIA Jetson Nano GPIO口和通信协议简单介绍及点亮第一个程序LED灯闪烁_第7张图片

我最近再用树莓派和Nano做一些好玩的AIOT项目,如果大家喜欢,请大家关注,谢谢

邮箱:[email protected]

注:部分图片来源于网络,侵权联系删.

转载需注明来源!

你可能感兴趣的:(基于ARM主板的人工智能应用,嵌入式硬件,arm,iot,单片机)