电脑系统:WIN10
树莓派型号:Zero W
树莓派系统:Raspbian,2018-11-13-raspbian-stretch-lite.img
Python 2.7.3
软件&工具:sscom5.13.1(串口助手),串口通讯线,串口驱动(电脑用)
硬件配置使用树莓派的GPIO15、GPIO16作为串口的TxD和RxD,另外还有附近的5V、GND。准备好串口通讯线,电脑上装好驱动。
树莓派CPU的内部有两个串口,一个是硬件串口,一个是迷你串口(mini-uart)。硬件串口的速率是稳定的,而迷你串口没有时钟源,由内核提供时钟参考源,由于内核本身的频率是变化的,导致迷你串口的速率不稳定。
系统默认把硬件串口分配给了蓝牙模块,迷你串口分配给了GPIO(GPIO15、GPIO16),这将影响串口通讯的可靠性,所以在安装树莓派系统的时候,交换了两个串口的分配:
pi@raspberrypi:~ $ ls -l /dev #查看设备信息
ttyAMA0就是GPIO上的那个串口,系统默认它是作为console使用的,不过在安装树莓派系统的时候已经把这个配置给删掉了,现在可以作为普通的串口使用。
基本功能
先实现基本的数据收发功能,主要是为了测试接收和发送的通路是否正常。
新建一个测试文件 test_serial.py,右键复制内容,保存退出:
pi@raspberrypi:~ $ sudo nano test_serial.py
1 # -*- coding:utf-8 -*-
2 import serial
3 import time
4
5 def main():
6 ser = serial.Serial("/dev/ttyAMA0", 19200)
7 ser.flushInput()
8 ser.flushOutput()
9
10 while True:
11 recv_num = ser.inWaiting()
12
13 if recv_num > 0:
14 recv_buffer = ser.read(recv_num)
15 ser.flushInput()
16
17 ser.flushOutput()
18 ser.write('received ' + str(recv_num) + ' bytes >> ')
19 ser.write(recv_buffer)
20
21 time.sleep(0.1)
22
23 if __name__ == '__main__':
24 main()
这段程序首先是打开串口0,波特率19200。然后在while循环中等待接收数据,接收到数据以后,把这个数据以及它的字节数发送出来。
每0.1s扫描一次,测试数据最好稍微短一点,否则就肯定被截断了。
运行 test_serial.py
pi@raspberrypi:~ $ python test_serial.py
如果中途需要退出,比如去重新编辑文件,可以按Ctrl+Z
连接串口通讯线,打开串口助手(sscom),选择扫描到的COM口,设置波特率为19200,不勾选HEX显示、HEX发送,然后点击打开串口。
串口助手发送:hello_serial
串口助手接收:received 12 bytes >> hello_serial
串口助手接收到的就是树莓派串口发送的,说明硬件连接正常,串口发送接收功能正常。