LEDSTICK PRO 硬件的python类

九年吃菜粥 38.85m2020-12-221117 次点击1 人感谢
随便写着玩的

```python
#!/bin/python3
# -*- coding: UTF-8 -*-
import os
import serial
import sys
import re
import time
import random


class LedStick:
def __init__(self, dev_path, background_light=8, baudrate=9600, timeout=0.5):
'''
初始化
:param dev_path: 设备路径或COM端口
:param baudrate: 波特率
:param timeout: 超时时间
'''
if not os.access(dev_path, os.F_OK):
raise OSError("没有这个设备")
if not os.access(dev_path, os.W_OK):
print("该设备不可写,尝试以root权限执行")
args = [sys.executable] + sys.argv
os.execlp('su', 'su', '-c', ' '.join(args))
if not os.access(dev_path, os.W_OK):
raise OSError("这个设备不可写")
self.dev_path = dev_path
self.dev = serial.Serial(self.dev_path, baudrate, timeout=timeout)
self.set_background_light(background_light)
self.clear()

def set_background_light(self, light=8):
'''
设置背光亮度
:param light: 背光亮度
:return: None
'''
self.__open_dev()
self.dev.write(str("WRITE_BRIGHTNESS=%s\r\n" % light).encode('UTF-8'))
self.dev.flush()
time.sleep(.1)
self.dev.close()

def __string_cut(string, show_limit=8):
'''
修剪字符串并添加结束符
:param show_limit:数码管最多显示的位数
:return: 裁切并添加结束符的字符串
'''
string = string[:show_limit]
if type(string) == type(''):
string = re.sub('\s*$', '', string)
else:
raise TypeError
string += "\r\n"
return string.encode("utf-8")

def write(self, string):
'''
写入数据,可不加结束符,会自动添加
:param string: utf-8编码的字符串
:return:
'''
try:
self.__open_dev()
string = LedStick.__string_cut(string)
self.dev.write(string)
self.dev.flush()
self.dev.close()
return True
except:
self.dev.close()
return False

def clear(self):
'''
清屏
:return:
'''
self.__open_dev()
self.dev.write(b'\r\n')
self.dev.flush()
self.dev.close()
return True

def __open_dev(self):
if not self.dev.isOpen():
self.dev.open()

def close(self):
'''
这是瞎jb写的
:return:
'''
self.clear()
if not self.dev.closed:
self.dev.close()
del self.dev

def show_time(self, t="", keep=5):
'''
显示时间
:param t:时间字符串,默认为当前时间,格式为 hh:mm:ss
:param keep:显示时长
:return:
'''
self.__open_dev()
keeped = 0.0
if t == "":
while keeped < keep:
t = time.ctime().split()[-2]
self.write(t)
time.sleep(.2)
keeped += .2
else:
t = t.split()[-2]
self.write(t)
time.sleep(keep)
self.clear()

def show_random(self, limit=8, keep=7):
'''
显示随机数
:param limit: 最大位数
:param keep: 显示时间
'''
var = random.randint(30, 50)
# 跳码的装B次数
for i in range(var):
self.write(str(random.randint(0, (10 ** limit) - 1)))
time.sleep(.05)
num=str(random.randint(0, (10 ** limit) - 1))
# 闪烁5次提醒
for i in range(5):
self.write(num)
time.sleep(.3)
self.clear()
time.sleep(.15)
self.write(num)
time.sleep(keep)
self.clear()

def show_data(self):
# 不想写了
pass


if __name__ == "__main__":
# 在命令行赋予该文件 751 权限
# 运行 file.py /dev/ttyUSB0 'hello',即可显示
dev = LedStick(sys.argv[1])
dev.write(sys.argv[2])
time.sleep(5)
dev.close()
```

将以上代码保存为`LedStick.py`,并在同级目录创建一python脚本

```python
from LedStick import LedStick
import time

dev=LedStick('/dev/ttyUSB0')

# 显示当前时间
dev.show_time()

# 显示文本
dev.write('hello')
time.sleep(3)
# 清屏
dev.clear()

# 显示随机数
dev.show_random()
```

![test](https://ppmm.org/images/2020/12/22/0d0ffbe87f3400455760b58ba5dab34e.gif)
收藏 ♥ 感谢
Spoony 小组长 2020-12-22 
厉害的。多谢分享!

登录注册 后可回复。



GitHub