[靓仔鼠]Jetson nano_Hardware_新手向


🎈Jetson nano_Hareware_新手向

24PIN-引脚分布图
24PIN-引脚分布图

🐹GPIO🐹

安装GPIO库与配置

1、下载jetson-gpio库

git clone https://github.com/NVIDIA/jetson-gpio  
#下载jetson-gpio库    

2、将下载的文件移动到目录:/opt/nvidia中

sudo mv jetson-gpio /opt/nvidia/    
#移动文件至指定目录下

3、安装pip3工具

sudo apt-get install python3-pip

4、进入jetson-gpio文件夹,并安装库

cd /opt/nvidia/jetson-gpio  
#进入文件夹  
sudo python3 setup.py install
#安装GPIO库

5、设置用户权限与修改规则

sudo groupadd -f -r gpio  
#将用户添加至组,赋予权限
sudo usermod -a -G gpio your_user_name		
#your_user_name需改成自己的账号名
sudo cp /opt/nvidia/jetson-gpio/lib/python/Jetson/GPIO/99-gpio.rules   /etc/udev/rules.d/
#将99-gpio.rules文件复制到rules.d目录
sudo udevadm control –reload-rules && sudo udevadm trigger	
#重载rules规则来让文件生效sudo
示例使用
cd /opt/nvidia/jetson-gpio/samples/		
#进入示例文件夹
sudo python3 xxxx.py
#运行示例文件
#将xxxx替换为对应的程序文件名称

示例脚本文件夹目录
示例脚本文件夹目录
示例_Demo_1

  • 简单输入程序,使用BCM 的引脚编码模式,可读取 PIN12 的值并打印到屏幕
sudo python3 simple_input.py


示例_Demo_2

  • 程序会输出高电平和低电平(每2秒交替更新) 到物理引脚 PIN12
sudo python3 simple_out.py


其他示例_Demoes

sudo python3 button_led.py                  使用轮询方式通过按键来控制 LED 灯
sudo python3 button_event.py                使用事件等待方式通过按键状态来控制 LED 灯
sudo python3 button_interrupt.py            采用中断的方式,通过按键来控制 LED 灯
手写一个点灯程序

创建文件

sudo vi gpio_example.py
#创建gpio_example.py文件

编写代码

import Jetson.GPIO as GPIO
import time as time
#导入相关库
LED_Pin = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_Pin, GPIO.OUT)
#设置目标引脚及模式
while (True):
   GPIO.output(LED_Pin, GPIO.HIGH)
   time.sleep(2)
   GPIO.output(LED_Pin, GPIO.LOW)
   time.sleep(2)
 #主循环
GPIO.cleanup()
#清除GPIO的状态

运行程序

sudo python3 gpio_example.py  

🖍GPIO-部分至此结束!

🐹UART🐹

安装serial库与配置

1、安装python3 serial库

sudo apt-get install python3-serial

2、开启临时串口权限

sudo chmod 777 /dev/ttyTHS1
#开启串口权限,关机后该权限也将被关闭,下次使用串口前需再次重新开启;

3、获取串口通信测试案例

git clone https://github.com/JetsonHacksNano/UARTDemo 
#获取串口通讯测试案例
cd UARTDemo
#进入该文件夹

4、硬件连接

Jetson Nano引脚8(TXD) →USB转TTL模块RX
Jetson Nano 引脚10(RXD) →USB转TTL模块TX
Jetson Nano J引脚6(GND) →USB转TTL模块GN
#Jetson Nano J引脚2(5V) →USB转TTL模块VCC  该引脚可不接
手写一个串口通信程序
#! /usr/bin/python3
import time
import serial
#导入serial库
serial_port = serial.Serial(
    port="/dev/ttyTHS1",
    baudrate=115200,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
)
time.sleep(1)
#串口配置信息
#波特率115200,8位数据位,无奇偶校验位,1位停止位
try:
    serial_port.write("UART Demonstration Program\r\n".encode())
    serial_port.write("NVIDIA Jetson Nano Developer Kit\r\n".encode())
    while True:
        if serial_port.inWaiting() > 0:
            data = serial_port.read()
            print(data)
            serial_port.write(data)
            if data == "\r".encode():
                serial_port.write("\n".encode())

except KeyboardInterrupt:
    print("Exiting Program")
  
except Exception as exception_error:
    print("Error occurred. Exiting Program")
    print("Error: " + str(exception_error))

finally:
    serial_port.close()
    pass

运行程序

python3 uart_example.py
  • 发送情况-串口助手
  • 接收情况-Jetson nano端

    🖍 UART-部分至此结束!

🐹I2C🐹

安装smbus库与配置

1、安装python3 I2C模块及开启I2C访问权限

sudo apt-get install -y python3-smbus
sudo usermod -aG i2c <用户名>				 #添加用户组
sudo reboot						 #重启

2、下载I2Ctool及检查是否安装成功

sudo apt-get install -y i2c-tools			#下载I2Ctool
apt-cache policy i2c-tools				#检查是否安装成功

若在输入上述指令后出现如下信息则表示安装成功

这里以LCD1602_I2C为例,其地址为0X27

sudo i2cdetect -y -r -a 1               
#扫描某一总线(BUS)上所有I2C设备,并打印其地址。
  • 当显示如下信息时,表示I2C总线挂载成功
    挂载成功
    🖍I2C-部分,至此结束!

🐹CSI-IMX219_Camera🐹

安装辅助工具

安装v4l2-utils协助工具

sudo apt install v4l-utils

查看摄像头挂载情况

ls /dev/video*

输出信息

挂载情况

  • 第一个(/dev/video0)属于IMX219 规格(CSI)摄像头 --- 这里只插入一个CSI摄像头
  • 以下为其他场景下的情况,仅作记录
    (dev/video2)是 USB2.0 的摄像头,接到 xusb-2(规格是 USB3)接口
    (/dev/video1)是 USB 摄像头,接到 xusb-3.2 (规格是 USB2)接口

查看挂载的摄像头详细参数情况

v4l2-ctl --device=/dev/video0 --list-formats-ext

输出信息(执行该指令后,终端将精确列出该摄像头的细节参数)

例如

RG10 代表这个摄像头的数据格式
10-bit Bayer RGRG/GBGB是进一步说明该格式使用的算法与通道对应的参数;
3264x2464、3264x1848、1920x1080、1640x1232、1280x720 代表尺寸
Interval为性能参数,表示所支持的分辨率及该分辨率的最高执行帧率。

第一种-控制方式: Gstreamer

安装Gstreamer

sudo add-apt-repository universe  
sudo add-apt-repository multiverse  
sudo apt-get update  
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav  
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev  

读取CSI摄像头的实现步骤

  • 创建Gstreamer管道
  • 将Gstremer管道绑定至OpenCV的视频流
  • 逐帧提取并绑定
    参考示例
import cv2
#设置gstreamer管道参数
def gstreamer_pipeline(
    capture_width=1280, #摄像头预捕获的图像宽度
    capture_height=720, #摄像头预捕获的图像高度
    display_width=1280, #窗口显示的图像宽度
    display_height=720, #窗口显示的图像高度
    framerate=60,       #捕获帧率
    flip_method=0,      #是否旋转图像
):
    return (
        "nvarguscamerasrc ! "
        "video/x-raw(memory:NVMM), "
        "width=(int)%d, height=(int)%d, "
        "format=(string)NV12, framerate=(fraction)%d/1 ! "
        "nvvidconv flip-method=%d ! "
        "video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
        "videoconvert ! "
        "video/x-raw, format=(string)BGR ! appsink"
        % (
            capture_width,
            capture_height,
            framerate,
            flip_method,
            display_width,
            display_height,
        )
    )
 
if __name__ == "__main__":
    capture_width = 1280
    capture_height = 720
    
    display_width = 1280
    display_height = 720
    
    framerate = 60			# 帧数
    flip_method = 0			# 方向
 
    # 创建管道
    print(gstreamer_pipeline(capture_width,capture_height,display_width,display_height,framerate,flip_method))
 
    #管道与视频流绑定
    cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
 
    if cap.isOpened():
        window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)
        
        # 逐帧显示
        while cv2.getWindowProperty("CSI Camera", 0) >= 0:
            ret_val, img = cap.read()
            cv2.imshow("CSI Camera", img)
 
            keyCode = cv2.waitKey(30) & 0xFF         
            if keyCode == 27:# ESC键退出
                break

        cap.release()
        cv2.destroyAllWindows()
    else:
        print("打开摄像头失败") 
第二种-控制方式: Jetcam

安装traitlets

  • Python3.7以下使用 traitlets4.x
    pip3 install traitlets==4.3.3
  • Python3.7以上使用 traitlets5.x
    pip3 install traitlets

安装Jetcam

git clone https://github.com/NVIDIA-AI-IOT/jetcam
cd jetcam
sudo python3 setup.py install

参考示例

from jetcam.csi_camera import CSICamera
import cv2

#CSI-0
camera0 = CSICamera(capture_device=0, width=224, height=224)
image0 = camera0.read()
print(image0.shape)
print(camera0.value.shape)

#CSI-1
#camera1 = CSICamera(capture_device=1, width=224, height=224)
#image1 = camera1.read()
#print(image1.shape)
#print(camera1.value.shape)

while 1:
    image0 = camera0.read()
    cv2.imshow("CSI Camera0", image0)
    
    #image1 = camera1.read()
    #cv2.imshow("CSI Camera1", image1)
    
    kk = cv2.waitKey(1)
    if kk == ord('q'):  						#按下q键,退出
        break
**🖍CSI-IMX219_Camera部分至此结束!**

2021-8-16
-Pretty Mouse-


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM