🎈Jetson nano_Hareware_新手向
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-