UART串口使用两条杜邦线就可以实现数据发送和接收,可以很方便的与其他扩展设备进行数据连接。接下来具体说明Jetson nano串口的使用:
1、UART 引脚
其中红框框选的8、10是我们要用到的引脚。不过注意了,这里怎么写得是 UART_2 呢?UART_1 去哪里了呢?大家看看板子,卡槽下方是不是有一排引脚啊? ~~ 懂的都懂。
2、安装串口函数库
如果使用的是官方镜像,应该是已经安装好了。如果不幸丢失或卸载了,再装一下就好了。
sudo pip3 install pyserial
sudo pip install pyserial
3、使用UART收发数据
- 导入串口 serial 库
import serial as ser
- 设置使用的引脚、波特率和超时时间
se = ser.Serial("/dev/ttyTHS1", 9600, timeout=1)
熟悉 uart 通讯的同学应该知道9600是波特率了,那常用的波特率有哪些呢?你们应该知道吧,这里就不多讲了,需要了解的自行百度一下。
timeout 顾名思义就是 超时时间 设置
在运行此句如果报错如下:
Serial Exception: [Errno 13] could not open port /dev/ttyTHS1: [Errno 13] Permission denied: '/dev/ttyTHS1'
这是因为没有权限,使用下面的命令设置其权限为可读可写可执行
sudo chmod 777 /dev/ttyTHS1
- 使用write函数进行数据的发送(注意发送类型必须是字节,因此需要使用encode()函数进行转换)
se.write("hello".encode())
可以传入指定的编码名称来做指定编码:
se.write("hello".encode("UTF-8"))
或者直接在字符串前边加b:
ser.write(b'hello')
- 读取数据
s = ser.read(100) # 读取100个字符
line = ser.readline() # 读取一行(当读到 ‘\n’ 时,视当前读到的内容为一行。)
读取的都是原始字节,需要用decode()函数进行解码进行输出:
print(line.decode("UTF-8"))
4、串口状态
- 打开串口
ser.open()
- 关闭串口
ser.close()
- 检测串口是否打开
ser.is_open
返回值为 True 或 False。
5、测试程序
import serial as ser
import time
se = ser.Serial("/dev/ttyTHS1", 9600, timeout=1)
while True:
time.sleep(1)
line = se.readline()
if line:
se.write("GET OK.\r\n".encode())
print(line)
我用 arduino 进行收发测试的。测试结果忘截图了~