当我们实现了控制界面,剩下的问题如何把选择的颜色信息( RGB )告诉 LED 驱动板,常用的方式就是串口了。对于单片机来说更为专业的叫法是 Uart 口,即 Universal Asynchronous Receiver/Transmitter(通用异步收发器)接口。

pySerial

在使用 Python 编程时,可以选用 pySerial 库,它具备了良好的跨平台特性。成文之时,最新版本是 2.7 。可以在 https://pypi.python.org/pypi/pyserial 下载到。

特性

  • 纯Python开发;
  • 在各平台( Windows、Linux、BSD、Jython、IronPython )使用相同的类;
  • 支持 Python 2.3+ 及 Python 3.x ;
  • 支持硬件 RTS/CTS 、软件 Xon/Xoff 流控;
  • 支持网络远程串口控制协议 RFC2217;

库的安装方式

  • 使用PyPI

    pip install pyserial
    easy_install -U pyserial
    
  • 使用源码包

    python setup.py install(python3 setup.py install)
    
  • Windows 下可直接使用安装包

    软件包被安装于 Lib\site-packages\serial 目录,文件夹名 serial 就是包的名字。导入时可使用 import serial

使用方法

在不考虑多线程收发的情况下,使用方法很简单。先实例化对象,然后配置串口号(串口名称)、波特率、数据位数、奇偶校验方式、停止位数等,再打开。当然也可以在实例化对象的同时就一次性完成以上操作。接下来就可以直接使用读/写操作了。

#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'mayt'

import serial

def color2rgb(color):
    rgb = [(color >> 16) & 0xff,
           (color >> 8) & 0xff,
            color & 0xff
          ]
    return rgb

if __name__ == '__main__':
    sp = serial.Serial()
    sp.port = 'COM10'
    sp.baudrate = 9600
    sp.bytesize = serial.EIGHTBITS
    sp.parity = serial.PARITY_NONE
    sp.stopbits = serial.STOPBITS_ONE
    sp.open()
    print(sp)
    color = 0x123456
    sp.write(color2rgb(color))
    sp.close()

控制 LED

由于仅用于简单的演示,所以就不设计帧格式了,每次直接发送 3 个字节的 RGB 信息。如果连续发下去的速度比较快,驱动板可能一下子收到大于 3 字节的数据,分帧处理一下即可。

运行效果:

文至此篇,已经完成了上位机控制 LED 所需要做的工作。下一篇文章将讲述 LED 驱动的实现,欢迎阅读。