阡陌 发表于 2023-12-18 22:44:53

当色彩照进现实——RGB LED 驱动及控制(3)



![](https://file.mculoop.com/images/2021/12/ddab7aeda4662547.png)

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

<!--more-->



## 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

```python
pip install pyserial
easy_install -U pyserial
```

- 使用源码包

```
python setup.py install(python3 setup.py install)
```

- Windows 下可直接使用安装包

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



### 使用方法

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

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

import serial

def color2rgb(color):
    rgb = [(color &gt;&gt; 16) &amp; 0xff,
         (color &gt;&gt; 8) &amp; 0xff,
            color &amp; 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 字节的数据,分帧处理一下即可。

运行效果:

![](https://file.mculoop.com/images/2021/12/0f4a17b6fd80d572.png)

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



页: [1]
查看完整版本: 当色彩照进现实——RGB LED 驱动及控制(3)