本文讲述了一个 3 分钟编写一个光环板扩展的方法,以 WS2812 扩展为模板进行说明。**
WS2812介绍
主要特点:
- 控制电路与 RGB 芯片集成在一个 5050 封装的元器件中,构成一个完整的外控像素点。
- 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
- 内置上电复位和掉电复位电路。
- 每个像素点的三基色颜色可实现 256 级亮度显示,完成 16777216 种颜色的全真色彩显示,扫描频率不低于400Hz/s。
- 串行级联接口,能通过一根信号线完成数据的接收与解码。
- 任意两点传传输距离在不超过 5 米时无需增加任何电路。
- 当刷新速率 30 帧/秒时,低速模式级联数不小于 512 点,高速模式不小于 1024 点。
- 数据发送速度可达 800Kbps。
- 光的颜色高度一致,性价比高。
用途:
其主要应用领域有LED全彩发光字灯串,全彩LED模组,LED像素屏,各种电子产品,电子设备跑马灯等。
WS2812 扩展设计准备工作
目标:实现光环板驱动 WS2812
知识点:
- 光环板的硬件核心是 ESP32。
- 软件核心是 MicroPython。
- WS2812 是 LED 灯带。
资料:MicroPython、NeoPixels、WS2812、mext
MicroPython:慧编程上传模式是将图形积木转换为 Python 语言,上传到光环板中运行。 有关语法、ESP32方面的资料,详见 MicroPython官方文档。
NeoPixels 库:用来驱动 WS2812 的库。 https://github.com/micropython/micropython/blob/master/ports/esp32/modules/neopixel.py
WS2812 驱动示例程序: http://docs.micropython.org/en/latest/esp8266/tutorial/neopixel.html?highlight=neopixel
WS2812手册: https://wenku.baidu.com/view/b18fbd6bddccda38376bafbd.html
- mext:是慧编程设计器生成的扩展文件后缀,本文生成的扩展文件见文末的附件。
准备工作:软件、硬件、资料准备妥当,先在慧编程 Python 代码区将 WS2812 驱动起来吧!Python 代码的调试就不进行详细说明了。
本文直接为你提供 Python 代码,见文末的附件。
代码调试成功以后就可以开始慧编程积木设计的 3 分钟了。
WS2812 扩展设计具体步骤
步骤1:登陆扩展设计器(第1分钟)
设计器运行在web界面,登录地址为: https://ext.makeblock.com
步骤2:新建扩展
**
在“我的插件”下,选择“我的扩展”,点击“新建扩展”,然后点击“通用模版”,点击确定之后,弹出基本信息填写框:
步骤3:填写基本信息
**
步骤4:添加分类和积木
**
在“我的插件”下,选择“我的扩展”,出现扩展列表,在操作栏点击编辑按钮,开始进入添加分类和积木的界面。
扩展的配置包含六个页签,对于 WS2812 扩展,公共代码配置、自定义组件、翻译设置这三项无需配置。基本信息已经设置。
1、点击“转码设置”页签,将“支持的转码语言”设置为 Python,然后点击“保存”。
2、点击“积木配置”页签, 点击“新增分类”。
在弹出的编辑区将分类名称设置为 WS2812,点击“保存”。
至此,1 分钟已经过去,继续下面的操作吧!
步骤5:设计语句块(第2分钟)
点击“积木列表”下方的“+”添加积木,然后选中积木,开始配置该积木详细信息。
:::tips
提示:
有关参数设置的详细说明,参见“设置内容”。
积木类型的相关描述,参见“积木类型”。
更多规范和约定,参见“积木设计规范”。
:::
步骤6:填写转码(第3分钟)
点击“上传转码”。 选中如下积木,点击“上传转码”标签,import 项、lib 项、loop 项无需填写,双击 code 项的黑色区域弹出代码输入界面。
代码输入界面
输入代码后点击右下角“确定”按钮即完成该积木的编辑工作。
:::tips 提示:上传转码与慧编程Python对应关系,引用变量语法:{lednumber}。 :::
本例中用不到 loop项,无需填写。至此,3分钟已到,接下来测试一下写好的扩展吧!
验证 WS2812 扩展
步骤1:下载扩展到本地,并拖拽 halo_ws2812.mext 到慧编程 PC 端中
1、 在积木界面的右上角点击“下载”按钮。
2、弹出的是打包界面,耐心等待打包完成。 打包成功后再点击“立即下载”。
3、找到下载完成的halo_ws2812.mext文件,拖放到慧编程PC界面内。
弹出更新成功提示即证明安装成功。
:::tips 提示:如果多次将同一扩展拖放到慧编程中,请等待弹出更新成功提示后,关闭慧编程,再重新打开,以便慧编程重新加载最新的mext文件。 :::
步骤2:验证积木块
1、拖放积木到编程区
将左下角的模式切换要在“上传”模式、拖入一个事件积木。 然后点击右侧边栏处的“</>”按钮弹出代码界面。
仔细核对积木块生成的代码。
技巧:选中代码区的代码并复制,粘贴到Python编辑界面,下载并观察反馈信息。
小结
扩展预览
学习积木扩展技巧
除了根据教程按部就班的学习外,快速入门就是找一份已经写好的扩展,导入到设计器,参考着学习。一步就可以搞定了!
导入成功后即可参看已有的扩展设计方法。详细操作,参见“将扩展导入到扩展设计器”。
WS2812扩展包下载
调试好的Python代码
#generated by mBlock5 for HaloCode
#codes make you happy
import time, machine, event, halo from esp import neopixel_write RED = (255, 0, 0) YELLOW = (255, 255, 0) GREEN = (0, 255, 0) AQUA = (0, 255, 255) BLUE = (0, 0, 255) PURPLE = (148, 0, 211) INDIGO = (75, 0, 130) ORANGE = (255, 127, 0) COLORS = (RED, YELLOW, GREEN, AQUA, BLUE, PURPLE) RAINBOWS = (PURPLE, INDIGO, BLUE, GREEN, YELLOW, ORANGE, RED) class NeoPixel: ORDER = (1, 0, 2, 3)
def __init__(self, pin, n, bpp=3, timing=1):
self.pin = pin
self.n = n
self.bpp = bpp
self.buf = bytearray(n * bpp)
self.pin.init(pin.OUT)
self.timing = timing
def __setitem__(self, index, val):
offset = index * self.bpp
for i in range(self.bpp):
self.buf[offset + self.ORDER[i]] = val[i]
def __getitem__(self, index):
offset = index * self.bpp
return tuple(self.buf[offset + self.ORDER[i]]
for i in range(self.bpp))
def fill(self, color):
for i in range(self.n):
self[i] = color
def fillone(self, ni, color):
self[ni] = color
def write(self):
neopixel_write(self.pin, self.buf, self.timing)
global neop neop = NeoPixel(machine.Pin(23), 10)
@event.start def on_start():
for color in RAINBOWS:
neop.fill(color)
neop.write()
time.sleep(5*0.1)