硬件


Shell Lab L1 是USB串口控制的可编程LED信号灯

产品特点:

● PWM调制实现红绿蓝三色(每种颜色均可独立调节,范围0~255)
● 集成闪烁效果(频率可调,0.1~20Hz,设置为0时为静态不闪烁)
● L1B型号(高亮度款),改用WS2812灯源芯片控制,亮度一倍以上
● L1B型号(高亮度款),增加了旋转模式,可顺时针/逆时针旋转,电流平稳
● 内置蜂鸣器,可发出频率、时长可调的嘟嘟音,音量较轻
● 内置报警器(可选),发出更响的频率固定的嘟嘟音,间隙频率可调(1~10Hz),倒计数次数可设
● 串口交互式控制,开放式通讯协议,自带命令帮助
● 不限制编程语言(推荐Python)
● 提供配套上位机“测试台软件”,自带众多示例代码
● 用pip安装mcush库(支持windows/linux/mac),编写python脚本

应用场景:

● 产品、软件循环测试出现异常时报警提示
● 产品生产线项目测试结果提示,如绿色正常通过,红灯故障失败并报警
● 实验进度状态提示
● 看板系统状态提示
● 物流仓储管理,货物定位提示
● ROS机器人信息提示
● 互动式游戏设计
● 教学实验设计
● 户外无人值守场景,自动信息提示
● 工控设备系统集成
● 艺术创作

工作模式:


安装方式:

底部配有专用的卡座,先将卡座固定住,将灯对准后套上去,旋转一下卡住即可

支持定制:

● USB接口改为TTL串口,方便系统集成
● 内嵌蓝牙转串口模块,方便手机无线控制
● 默认线长2米,可订制
● 内嵌RS232转接模块,通过双绞屏蔽线导出DB9接口和供电

● 按客户应用场景订制电路板和固件

注意事项:

● 不建议在静态长亮模式下长期使用,信号提示效果不明显,且增加功耗损耗LED寿命
● 若多个信号灯同时使用时,注意给USB-HUB增加额外供电

软件

串口通讯常见问题
C语言编程常见问题

串口指令:

1、控制LED灯:
=>lamp --help
usage: lamp [-m mode] [-c RGB_color] [-r red_color] [-g green_color] [-b blue_color] [-f freq] [-C counter]
options:
 -m/--mode       0-blink, 1/2-rotate
 -c/--color      RRGGBB format
 -r/--red        red value
 -g/--green      green value
 -b/--blue       blue value
 -f/--freq       0~20 Hz(default 1)
 -C/--counter    blink down-counter
=> 
2、控制蜂鸣器(轻):
=>beep --help
usage: beep [-f frequency] ms
options:
 -f/--frequency  20~10000(default 4000)hz
 ms              1~10000(default 50)ms
=> 
3、控制报警器(响):
=>alarm --help
usage: alarm [-c count] [-f freq]
options:
-c/--count 1~1000
-f/--freq 1~10 Hz(default 1)
=> 

示例:

红灯闪烁(默认1Hz):
=>lamp -c 0xFF0000
=>
绿色2Hz:
=>lamp -c 0xFF00 -f 2
=>
蓝色0.5Hz:
=>lamp -c 0xFF -f 0.5
=>
黄色0.1Hz:
=>lamp -c 0xFFFF00 -f 0.1
=>
紫色10Hz:
=>lamp -c 0xFF00FF -f 10
=>
青色不闪烁:
=>lamp -c 0x00FFFF -f 0
=>
单独设置红色分量64:
=>lamp -r 64
=>
单独设置绿色分量0x80:
==>lamp -g 0x80
=>
单独设置蓝色分量200:
=>lamp -b 200
=>
查看当前颜色频率设置:
=>lamp
color: 0x000000
freq: 1.0
=>
蜂鸣器响一声(默认4kHz,50ms):
=>beep
=>
蜂鸣器响一声(2kHz,1s):
=>beep -f 2000 1000
=>
报警器响一声(频率1Hz):
=>alarm -c 1
=>
报警器响十声(频率10Hz):
=>alarm -c 10 -f 10
=>
查看报警器剩余次数和频率:
=>alarm
count: 0
freq: 1
=>
高亮度款支持旋转效果,lamp指令加参数-m N可设置旋转模式,如:
=>lamp -m 0  (默认的闪烁模式)
=>lamp -m 1  (顺时针旋转模式)
=>lamp -m 2  (逆时针旋转模式)
=>

Python封装:

安装:pip3 install mcush
升级:pip3 install -U mcush
class ShellLabLamp(mcush.ShellLab.ShellLab):
    def lamp(self, color=None, red=None, green=None, blue=None, freq=None, mode=None, count=None):
        # 底层的串口命令封装

    def color(self, c, freq=None, count=None):
        # 设置颜色,颜色,闪烁计数
    
    def mode(self, mode):
        # 旋转模式  0-闪烁  1-顺时针  2-逆时针

    def alarm(self, count=None, freq=None):
        # 报警次数,频率
    
    def reset(self, lamp_freq=1, alarm_freq=1, mode=None):
        # 模式复位

示例:

import mcush
from mcush.linkong.ShellLab import ShellLabLamp
lamp = ShellLabLamp('COM10')  # 填入对应的串口号
lamp.color('red', freq=2)  # 设置红色快闪
lamp.alarm(count=3)  # 报警器响三下

下载

Shell Lab 测试台软件


CH341虚拟串口驱动(Windows)


应用

单灯闪烁效果

多灯闪烁效果

L1B信号灯,旋转模式


新改进版本,共20组灯,亮度更柔和

订制外壳和PCB


在无显示器的NAS上部署,用串口灯监测远程设备登录状态下载
#!/usr/bin/env python3
import mcush
import subprocess
import sys
import time

lamp_color = None
lamp_freq = None

def set_color( color, freq=1 ):
    global lamp_color, lamp_freq
    if color is None:
        color = 'black'
    if (color == lamp_color) and (freq == lamp_freq):
        return color
    try:
        print('switch to %s'% color)
        lamp = mcush.ShellLab.ShellLabLamp()
        if lamp_freq == freq:
            lamp.color( color )
        else:
            lamp.color( color, freq=freq )
            lamp_freq = freq
        lamp_color = color
        lamp.disconnect()
        del lamp
        return color
    except Exception as e:
        print( e )
        lamp_color = None
        lamp_freq = None
        return None

def main(argv=None):
    set_color('red',freq=2)
    time.sleep(0.5)
    set_color('green',freq=2)
    time.sleep(0.5)
    set_color('blue',freq=2)
    time.sleep(0.5)
    while True:
        ps_output = subprocess.check_output(['ps', 'x'])
        #print(ps_output)
        if 'proftpd' in ps_output:
            set_color('blue')
        elif 'unison' in ps_output:
            set_color('green')
        else:
            set_color('black')
        time.sleep(1)
 
if __name__ == '__main__':
    main(sys.argv) 

配置成上电RGBCMY颜色循环 下载
# this script runs in ShellLab Testbench Application
freq = 0.2  # hz
delay_ms = int(1000/freq)  # ms

fcfs = Utils.FCFS()
fcfs.appendFile("rgbcmy", '''\
a -c 0xFF0000
delay {delay_ms}
a -c 0x00FF00
delay {delay_ms}
a -c 0x0000FF
delay {delay_ms}
a -c 0x00FFFF
delay {delay_ms}
a -c 0xFF00FF
delay {delay_ms}
a -c 0xFFFF00
delay {delay_ms}
load /c/rgbcmy
'''.format(delay_ms=delay_ms))

fcfs.appendFile("init", '''\
delay
a -c 0 -f {freq}
load /c/rgbcmy
'''.format(freq=freq))

s = ShellLabLamp(PORT)
s.fcfsFormat()
s.fcfsProgram(fcfs.generate())
s.port.write('reboot\n')

连接树莓派控制

连接树莓派单步调试


连接海龟编辑器控制



使用mcush_util工具测试
#!/bin/sh
# Shell Lab L1 lamp controller demo with mcush_util
# download/compile/install mcush_util firstly
# Shanghai Linkong Software Tech. Co., Ltd.
# www.xrsoft.com
set -e
PORT=/dev/ttyUSB0

# model match
mcush_util -p$PORT -mShellLab-L1 -r

# basic colors
mcush_util -nq -p$PORT run "b" "a -f0.9" \
    "a -c0xff -C1" "delay" \
    "a -c0xff00 -C1" "delay" "a -c0xff0000 -C1" "delay" \
    "a -c0xffff -C1" "delay" "a -c0xffff00 -C1" "delay" \
    "a -c0xff00ff -C1" "delay" "a -c0xffffff -C1" "delay"

# police alarm light
mcush_util -nq -p$PORT run "a -f10 -c0xff" "delay" \
    "a -c0xff0000" "delay" "a -c0xff" "delay" \
    "a -c0xff0000" "delay" "a -c0xff" "delay" \
    "a -c0xff0000" "delay" "a -c0xff" "delay"

# end, turn off 
mcush_util -nq -p$PORT run "a -c0"