【光环板扩展】为光环板编写扩展只需3分钟

背景简介 本人小白,通过几天的摸索,找到了3分钟写一个光环板扩展的方法,现分享给大家。谢绝鲜花与鸡蛋!本教程是以WS2812扩展为模板进行说明,既然是3分钟,那肯定不会面面俱到的讲。本教程只讲重点,后附WS2812扩展的文件供大家进行观摩。

WS2812介绍

主要特点:

●控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
●内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
●内置上电复位和掉电复位电路。
●每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
●串行级联接口,能通过一根信号线完成数据的接收与解码。
●任意两点传传输距离在不超过5米时无需增加任何电路。
●当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式不小于1024点。
●数据发送速度可达800Kbps。
●光的颜色高度一致,性价比高。

用途:

其主要应用领域有LED全彩发光字灯串,全彩LED模组,LED像素屏,各种电子产品,电子设备跑马灯等。

图片

WS2812扩展设计准备工作

目标:实现光环板驱动WS2812

知识点: 1、光环板的硬件核心是ESP32。 2、软件核心是micropython。 3、WS2812是LED灯带。

资料:micropython、NeoPixels、Ws2812、mext

1、micropython:慧编程上传模式是将图形积木转换为Python语言,上传到光环板中运行。 有关语法、ESP32方面的资料详见micropython官方文档, 链接:http://docs.micropython.org/en/latest/esp32/quickref.html

2、NeoPixels库:用来驱动WS2812的库。 https://github.com/micropython/micropython/blob/master/ports/esp32/modules/neopixel.py

3、WS2812驱动示例程序: http://docs.micropython.org/en/latest/esp8266/tutorial/neopixel.html?highlight=neopixel

4、WS2812手册: https://wenku.baidu.com/view/b18fbd6bddccda38376bafbd.html

5、mext 是慧编程设计器生成的扩展文件后缀,本文生成的扩展文件见文末的附件。

准备工作:软件、硬件、资料准备妥当,先在慧编程 Python 代码区将 WS2812 驱动起来吧! Python 代码的调试就不进行详细说明了。

这里就直接帮大家贴上 Python 代码吧,见文末的附件。

那么调试成功以后就可以进入慧编程积木设计的3分钟实现环节了。

WS2812 扩展设计具体步骤

步骤1:登陆扩展设计器(第1分钟)

设计器运行在web界面,登录地址为:

https://ext.makeblock.com 图片

步骤2:新建扩展

在“我的插件”下,选择“我的扩展”,点击“新建扩展”,然后点击“通用模版”,点击确定之后,弹出基本信息填写框:

图片

图片

*步骤3:填写基本信息

图片

以上红框4项必须设置。点确定进入下一步骤。

步骤4:添加分类和积木

图片

在“我的插件”下,选择“我的扩展”,出现扩展列表,在操作栏点击编辑按钮,开始进入添加分类和积木的界面,这一步开始可要细心一点哦。 下图有6个标签页,其中公共代码配置、自定义组件、翻译设置三个标签在WS2812这个扩展里用不到。基础信息页上一步已经填过了。还剩两个标签转码设置和积木配置,先搞定转码设置,只留积木配置慢慢玩! “支持的转码语言”项请选择 Python,点击左下角“确定”搞定。

图片

点击积木配置标签 点击“新增分类”。如图设置即可,1分钟足够了,是不是?那就点确定进入下一步吧。

图片

步骤5:设计语句块(第2分钟)

点击“积木列表”中的积木,开始配置该积木详细信息。

图片

提示:参数设置学习链接:https://www.mblock.cc/doc/zh/developer-documentation/design-blocks-4.html#42-%E7%A7%AF%E6%9C%A8%E7%B1%BB%E5%9E%8B 类型积木请参考积木设计规范,链接https://www.mblock.cc/doc/zh/developer-documentation/design-blocks-4.html。 积木上内容,建议参考官方已有积木,保持与官方一样的风格,便于使用者快速上手。积木设计规范,链接:https://www.mblock.cc/doc/zh/developer-documentation/design-blocks-5.html 提示:可一次性将所需的积木添加完毕,然后再集中添加代码。 翻翻资料1分钟过去了,接着进行最后1分钟吧!

步骤6:填写转码(第3分钟)

上传转码标签,先做个简单的。 针对如下积木,点击“上传转码”标签,import项、lib项、loop项无需填写,双击code项的黑色区域弹出代码输入界面。

图片

代码输入界面

图片

输入代码后点击右下角“确定”按钮即完成该积木的编辑工作。 提示:上传转码与慧编程Python对应关系,引用变量语法:{lednumber}。

图片

本例中用不到loop项,故为空。OK,3分钟已到,接下来测试一下写好的扩展吧!

验证 WS2812 扩展 步骤1:下载扩展到本地,并拖拽 halo_ws2812.mext 到慧编程 PC 端中

1.1在积木界面的右上角点击“下载”按钮**

图片

1.2 弹出的是打包界面,耐心等待打包完成。 打包成功后再点击“立即下载”。

图片

1.3找到下载完成的halo_ws2812.mext文件,拖放到慧编程PC界面内。

图片

弹出更新成功提示即证明安装成功。 提示:如果多次将同一扩展拖放到慧编程中,请等待弹出更新成功提示后,关闭慧编程,再重新打开,以便慧编程重新加载最新的mext文件。

图片

步骤2:验证积木块

2.1 拖放积木到编程区 必须完成的操作: 左下角的模式切换要在上传模式、积木上必须有一个事件积木。 然后点击右侧边栏处的“</>”按钮弹出代码界面

图片

仔细核对积木块生成的代码。

图片

技巧大放送:选中代码区的代码并复制,粘贴到Python编辑界面,下载并观察反馈信息。

图片

小结 扩展预览截图 图片

学习积木扩展技巧

除了根据教程按部就班的学习外,快速入门就是找一份已经写好的扩展,导入到设计器,参考着学习。一步就可以搞定了!

图片

图片

导入成功后即可参看已有的扩展设计方法。 可以参考教程《如何导入一个已经存在的 .mext 格式的慧编程扩展到扩展设计器》一文。

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)

参考示例

如何给 microbit 设备开发扩展

results matching ""

    No results matching ""