英伟达Jeston nano<3>使用Python实现三种方式串口通信

  • 前言
  • 通信配置过程
    • 基本信息
    • 配置过程
      • 方案一:Python-40pinEXpansion Header
      • 方案二:Python-serial Port Header
      • 方案三:Python-USB3.0 Type A
      • 其他方案
  • 总结
  • 参考资料

前言

近来需要把使用Jeston nano做个设备,需要使用Jeston nano跑代码,然后将代码处理的数据传给STM32,STM32做底层的控制,所以在Jeston nano和STM32之间要涉及到串口通信的内容,本博文即为了记录在调试通信的步骤和一些问题;

其实Jeston nano 本身自带的有40pin IO口,完全可以外接拓展板使用Python进行编程,这里因为项目组内熟悉Jeston nano-STM32这种所谓上位机-下位机的开发和分工方式,所以还是选择了这种,后续本人有时间会尝试直接用Jeston nano 引脚进行控制。

关于通信方式本身,其实有串口通信、Can总线等等方式,但是由于硬件原因,Jeston nano和STM32通信只支持串口通信的方式;对于Jeston nano串口硬件来说,可以看下述Jeston nano最新版B01硬件图,有直接串口引脚、40pin IO 引脚串口、USB串口三种硬件连接方式;从编程语言上也有Python和C++之分;

话又说回来,我那个项目代码能否使用C++和Python混合编程/编译?

通信配置过程

基本信息

使用硬件:Jeston nanoB01(Jeston nano总共有A01/A02/B01三个版本)、USB转ttl、杜邦线、USB hub;

串口硬件:独立串口模块serial Port Header(J40)、40pinEXpansion Header(J41)、USB3.0 三种硬件方式。

配置过程

以下是三种硬件配置

方案一:Python-40pinEXpansion Header

第一种方式就是40pinEXpansion Header,对应就是板载上40pin GPIO口,上面串口引脚是8和10,这个看一下板子和上面的引脚图就知道了
首先配置一下serial库:

//先安装一下python3版本的py-serial库sudo apt-get install python3-serial

使用 USB转ttl 连接Jeston nano和电脑:
上图另一端USB连接电脑;
运行代码,记得是python3且sudo:

sudo python3 uart_example.py

uart_example.py代码内容具体如下:

#!/usr/bin/python3
import time
import serialprint("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")serial_port = serial.Serial(port="/dev/ttyTHS1",   #这里注意一下这个端口号baudrate=115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)try:# Send a simple headerserial_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 we get a carriage return, add a line feed too# \r is a carriage return; \n is a line feed# This is to help the tty program on the other end # Windows is \r\n for carriage return, line feed# Macintosh and Linux use \nif data == "\r".encode():# For Windows boxen on the other endserial_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

电脑端使用串口通信测试软件,选中com口,测试结果如下:

测试成功

方案二:Python-serial Port Header

这里我首先查看了一下设备端口号:

刚才那个40pin的GPIO用了ttyTHS1,这里我以为serial Port Header独立模块的串口就是ttyTHS2,
硬件连接如下:

测试了一下,结果如下:

它通信自动反馈端口号为 ttyS0,测试后确为这个,测试成功。

这个ttyTHS2猜测为其他通信方式的端口,如I2C,SPI等等。

方案三:Python-USB3.0 Type A

这里按照之前的测试方案,需要两个 USB转ttl 分别连接Jeston nano和电脑,这里我手里只有一个 USB转ttl ,所以打算直接在Jeston nano上实现测试;
硬件连接如下:

这里使用的Jeston nano4GB01版本的四个USB口都是3.0的(蓝色)

这里用了serial Port Header的串口,端口号为ttyS0;
首先查看一下USB转ttl的端口号,下图为插拔效果:

所以 USB转ttl 端口号为:ttyUSB0
测试方法即在Jeston nano上开两个终端运行两个程序,实现通信;

uart_example.py代码如下:

#!/usr/bin/python3
import time
import serialprint("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")serial_port = serial.Serial(port="/dev/ttyS0",baudrate=115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)try:# Send a simple headerserial_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 we get a carriage return, add a line feed too# \r is a carriage return; \n is a line feed# This is to help the tty program on the other end # Windows is \r\n for carriage return, line feed# Macintosh and Linux use \nif data == "\r".encode():# For Windows boxen on the other endserial_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

uart_example1.py代码如下

#!/usr/bin/python3
import time
import serialprint("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")serial_port = serial.Serial(port="/dev/ttyUSB0",baudrate=115200,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)try:# Send a simple headerserial_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 we get a carriage return, add a line feed too# \r is a carriage return; \n is a line feed# This is to help the tty program on the other end # Windows is \r\n for carriage return, line feed# Macintosh and Linux use \nif data == "\r".encode():# For Windows boxen on the other endserial_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

测试结果如下:

通信测试成功。

其他方案

这里利用python的serial库测试的Jeston nano上所有串口,后续会测试使用C++如何实现相应的功能…

总结

Jeston nano对应串口的端口号如下:
独立串口模块serial Port Header—/dev/ttyS0
40pinEXpansion Header串口—/dev/ttyTHS1
使用USB转ttl—ttyUSB0

一般USB转串口设备/dev/ttyUSB*,如果是普通的串口设备会是/dev/ttyS*

其他tty设备应该是USB设备,使用时随机分配。

参考资料

[1]、Jetson Nano - Serial Console from JetsonHacks : https://www.youtube.com/watch?v=Kwpxhw41W50 B01版本.
[2]、Jetson_Nano_Developer_Kit_User_Guide (这里A02版本的,暂时没找到B01的).
[3]、CSDN博客: https://blog.csdn.net/Uncle_GUO/article/details/80867169.
最后,关于Jeston nano视频教程,推荐一下这个油管光头大叔JetsonHacks

英伟达Jeston nano<3>使用Python实现三种方式串口通信相关推荐

  1. 用英伟达Jetson Nano运行PyTorch Fast.ai丨手把手教程+第三方工具

    原作 Interogativ  郭一璞 编译  量子位 报道 | 公众号 QbitAI 英伟达Jetson Nano,作为老黄家最便宜的硬件,只要99美元. 看到便宜就想捡,拿到手里怎么玩? 造机器人 ...

  2. 英伟达 Jetson Nano 新手必备:使用CSI或USB摄像头拍摄第一张照片

    英伟达 Jetson Nano 新手必备:使用CSI或USB摄像头拍摄第一张照片 1. 引言 1.1 支持的摄像头 1.2 nvgstcapture 2. 在屏幕上开始捕获和预览显示 2.1 CSI摄 ...

  3. 边缘深度学习设备基准评测:英伟达Jetson Nano胜出

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 选自tryolabs.com 作者:Juan Pablo  机器之 ...

  4. 英伟达Jetson Nano的初步了解

    前言:跑对比实验需要不同平台,所以需要采购一个Jetson nano,但看了一下有许多版本,不太了解,故简单调研一下. 采购平台:Jetson Nano B01 Jetson Nano b01国产开发 ...

  5. 关于英伟达jetson nano的搭配双目摄像头跑ORB_SLAM2

    1.安装系统 按照商家给的资料安装,将Ubuntu18.04LTS镜像拷贝到tf卡中,插上jetson nano就可以安装了. 2.系统设置 进入系统我先把系统语言设置为中文,在右上角的设置中找到系统 ...

  6. 英伟达 Jetson Nano 新手必备:连接蓝牙音频

    英伟达 Jetson Nano 新手必备:连接蓝牙音频 1. 介绍 2. 蓝牙适配器要求 3. 连接蓝牙音频 1. 介绍 Jetson Nano 2GB开发工具包没有内置蓝牙.为了将蓝牙音频设备连接到 ...

  7. 英伟达Jetson Nano安装

    英伟达Jetson Nano安装 简介 板子说明 SD卡安装系统 运行 总结 简介 NVIDIA® Jetson Nano™ 开发者套件是一款专为创客.学习者和开发者打造的小型 AI 计算机.学习此简 ...

  8. 英伟达宣布全面支持ARM高性能计算,三周打造全球排名第22超算

    英伟达宣布全面支持ARM高性能计算,三周打造全球排名第22超算 ARM 架构服务器正在逐渐升温,这也少不了 AI 芯片巨头英伟达的参与.本周一,英伟达在德国宣布了与 ARM 全面合作的新计划:两家公司 ...

  9. 业界 | 英伟达开源硬件加速项目NVDLA:一种标准化的推断加速框架

    https://cloud.tencent.com/developer/article/1119468 目录 业界 | 英伟达开源硬件加速项目NVDLA:一种标准化的推断加速框架 使用 NVDLA 加 ...

最新文章

  1. C语言经典算法100例(二)
  2. Django框架简介
  3. 微信小程序家庭记账本开发进度二
  4. ABAP Netweaver和git的快捷方式
  5. ABB机器人的错误处理
  6. lucene 搜索_使用Lucene的搜索服务器搜索Jira问题
  7. 操作系统学习笔记-04-操作系统的运行机制和体系结构
  8. JAVA入门级教学之(方法-1)
  9. Java RandomAccessFile seek()方法与示例
  10. create-react-app中使用装饰器(@)写法
  11. TypeError: ‘dict‘ object is not callable-已解决
  12. jframe大小根据组件变化_Swing JDialog容器和JFrame容器使用教程
  13. 配置Mac自带的Apache http服务器
  14. Java与算法之(2) - 快速排序
  15. 实数域上的压缩映射不动点原理
  16. 出租车轨迹数据地图匹配
  17. AT89C51/AT89S51/STC89C51单片机烧录程序的区别
  18. TCP复位报文的发送
  19. 行人重识别多个数据集格式统一为market1501格式
  20. python入门的详细答案_第11篇参考答案:Python入门经典习题题解

热门文章

  1. 【SM】相似度(C++) kkmd66
  2. 使用PyTorch搭建CNN神经网络
  3. 虚拟机VM启动Ubuntu时一直卡在黑屏怎么办
  4. MHA编写实现VIP漂移
  5. 关于mysql客户端会话的线程id开启的事务tx1,与后续会话的线程id开启的事务txX,产生冲突,导致txX阻塞的分析
  6. C++ 递归算法将输入的字符串倒序输出
  7. P2036 [COCI2008-2009#2] PERKET
  8. android 日历自定义控件 ,包含 阴历 和 阳历
  9. word论文写作笔记
  10. 在生词本查单词的译文