树莓派串口(UART)编程Python示例

树莓派串口(UART)编程Python示例

树莓派串口(UART)编程Python示例_第1张图片

前言

本文将详细介绍树莓派的串口(UART)配置和使用,并结合一个modbus RTU从机的例子说明树莓派串口的应用。
在开始前说明以下几点
1.树莓派UART端口的位置
TXD位于HEAD-8
RXD位于HEAD-10
GND位于HEAD-6(可选其他GND)
2.树莓派的TXD应接USB转串口设备的RXD,当然如果测试失败请交换RXD和TXD的顺序
3.经过很多次的测试(N>25),当波特率为115200时打开树莓派的UART时,树莓派会莫名其妙的发送一字节0xF8,该问题始终无法解决。不过波特率为9600时并没有此问题,猜测是树莓派硬件或内核驱动问题。
4.树莓派的串口默认为SSH调试使用,若要使用串口需要修改两处文件。
5.2016.11起新系统需要通过这个方法开启SSH服务

树莓派串口(UART)编程Python示例_第2张图片

修改两处文件

1./boot/cmdline.txt
输入以下指令

1

sudo nano /boot/cmdline.txt

删除以下部分

1

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

最终变为

1

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

2./etc/inittab
输入以下指令

1

sudo nano /etc/inittab

注释最后一行内容

1

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

使用minicom

配置完之后便可测试一下树莓派的UART是否正常工作,而minicom便是一个简单好用的工具。minicom是linux平台串口调试工具,相当于windows上的串口调试助手。
1.minicom安装

1

sudo apt-get install minicom

2.minicom启动

1

2

minicom -b 9600 -o -D /dev/ttyAMA0

#-b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知。

树莓派串口(UART)编程Python示例_第3张图片

3.minicom发送内容
直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。
4.minicom回显控制
先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)
5.minicom回显关闭
先Ctrl+A,再Q。

使用pyserial

minicom仅满足调试用途,如果需要编程解决问题那么python的serial扩展库——pyserial则是一个不错的选择。pyserial模块非常好用,后面的文章还会分析如何使用pyserial控制GPRS模块。
1.pyserial安装
安装pyserial扩展库有很多种方法,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。
若使用apt-get工具安装,可输入以下指令

1

sudo apt-get install python-serial

2.串口回显程序
非常简单的一个串口程序,树莓派通过串口返回接收的内容。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# -*- coding: utf-8 -*

import serial

import time

# 打开串口

ser = serial.Serial("/dev/ttyAMA0", 9600)

def main():

    while True:

        # 获得接收缓冲区字符

        count = ser.inWaiting()

        if count != 0:

            # 读取内容并回显

            recv = ser.read(count)

            ser.write(recv)

        # 清空接收缓冲区

        ser.flushInput()

        # 必要的软件延时

        time.sleep(0.1)

    

if __name__ == '__main__':

    try:

        main()

    except KeyboardInterrupt:

        if ser != None:

            ser.close()

总结

由于可借助python标准库使得树莓派的串口格外好用。是不是可以拿树莓派做一个Modbus RTU从机,的确可以请期待后面的博文吧。

参考资料
1.minicom使用国外博客
2.elinux python-serial 安装pyserial及例程等

出处:http://blog.csdn.net/xukai871105

更多树莓派串口相关内容:http://shumeipai.nxez.com/?s=%E4%B8%B2%E5%8F%A3

你可能感兴趣的:(人工智能)