当色彩照进现实——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 >> 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 字节的数据,分帧处理一下即可。
运行效果:
![](https://file.mculoop.com/images/2021/12/0f4a17b6fd80d572.png)
文至此篇,已经完成了上位机控制 LED 所需要做的工作。下一篇文章将讲述 LED 驱动的实现,欢迎阅读。
页:
[1]