【雕爷学编程】MicroPython动手做(13)——掌控板之RGB三色灯2

知识点:什么是掌控板?

掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED显示屏、RGB灯、加速度计、麦克风、光线传感器、蜂鸣器、按键开关、触摸开关、金手指外部拓展接口,支持图形化及MicroPython代码编程,可实现智能机器人、创客智造作品等智能控制类应用。



掌控板硬件特性:

ESP-32主控

处理器:Tensilica LX6双核处理器(一核处理高速连接;一核独立应用开发)

主频:高达240MHz的时钟频率

SRAM:520KB

Flash:8MB

Wi-Fi标准:FCC/CE/TELEC/KCC

Wi-Fi协议:802.11 b/g/n/d/e/i/k/r (802.11n,速度高达150 Mbps),A-MPDU和A-MSDU聚合,支持0.4us防护间隔

频率范围:2.4~2.5 GHz

蓝牙协议:符合蓝牙v4.2 BR/EDR和BLE标准

蓝牙音频:CVSD和SBC音频低功耗:10uA

供电方式:Micro USB供电

工作电压:3.3V

最大工作电流:200mA

最大负载电流:1000mA

掌控板载

三轴加速度计MSA300,测量范围:±2/4/8/16G

地磁传感器MMC5983MA,测量范围:±8 Gauss;精度0.4mGz,电子罗盘误差±0.5°

光线传感器

麦克风

3 颗全彩ws2812灯珠

1.3英寸OLED显示屏,支持16*16字符显示,分辨率128x64

无源蜂鸣器

支持2个物理按键(A/B)、6个触摸按键

支持1路鳄鱼夹接口,可方便接入各种阻性传感器

拓展接口

20通道数字I/O, (其中支持12路PWM,6路触摸输入)

5通道12bit模拟输入ADC,P0~P4

1路的外部输入鳄鱼夹接口:EXT/GND

支持I2C、UART、SPI通讯协议


6、RGB蓝色呼吸灯

python 复制代码
i = None

from mpython import *

import time
while True:
    for i in range(256):
        rgb.fill( (int(0), int(0), int(i)) )
        rgb.write()
        time.sleep_ms(1)
        time.sleep_ms(20)
    for i in range(255, -1, -1):
        rgb.fill( (int(0), int(0), int(i)) )
        rgb.write()
        time.sleep_ms(1)
        time.sleep_ms(20)

注解:

for...in...循环语句(简称为for循环)

for语句是microPython中的一个循环控制语句,任何有序的序列对象内的元素都可以遍历,比如字符串、列表list、元组等等。

简单的for循环代码格式:

python 复制代码
for i in [1,2,3,4,5]:
    print(i*5)

遍历列表[1,2,3,4,5],满足就循环执行i*5;

不要忘记for语句后面的英文冒号;

不要忘记print()函数前面的缩进。

12345

上述代码可这样理解:

¹. 一群人在排队办理业务,也就是列表[1,2,3,4,5];

². 它们中的每一个被叫到号的时候(for i in),就轮流进去一个空房间 i 办业务;

³. 每一个数字进去房间之后,都对计算机说:"我要办这个业务",也就是print(i),然后计算机为每一个数字提供了打印服务,将1,2,3,4,5都打印在了屏幕上。

for循环的3个要点即是:1.空房间;2.一群等着办业务的人;3.业务流程

for循环:空房间

上面代码中的i就是空房间,学名叫元素(item),你可以把它当成是一个变量。给房间取一个名字,也就是"变量名"。

for循环:一群排队办业务的人

列表、字典和字符串这类数据类型往往可理解为"一群排队办业务的人",而整数、浮点数不行。这个过程,在Python中的学名就叫做遍历。

mPthon 图形编程


7、板载三位变幻RGB彩虹灯

python 复制代码
#MicroPython动手做(13)------掌控板之RGB三色灯
#板载三位变幻RGB彩虹灯

from mpython import *
import neopixel
import time

my_rgb = neopixel.NeoPixel(Pin(Pin.P7), n=3, bpp=3, timing=1)

def make_rainbow(_neopixel, _num, _bright, _offset):
    _rgb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255), (0,0,255), (136,0,255), (255,0,0))
    for i in range(_num):
        t = 7 * i / _num
        t0 = int(t)
        r = round((_rgb[t0][0] + (t-t0)*(_rgb[t0+1][0]-_rgb[t0][0]))*_bright)>>8
        g = round((_rgb[t0][1] + (t-t0)*(_rgb[t0+1][1]-_rgb[t0][1]))*_bright)>>8
        b = round((_rgb[t0][2] + (t-t0)*(_rgb[t0+1][2]-_rgb[t0][2]))*_bright)>>8
        _neopixel[(i + _offset) % _num] = (r, g, b)


offset = 0
while True:
    make_rainbow(my_rgb, 3, 10, offset)
    offset = offset + 1
    my_rgb.write()
    time.sleep_ms(100)

mPythonX 图形编程

8、外接八位RGB彩虹灯环

python 复制代码
#MicroPython动手做(13)------掌控板之RGB三色灯
#外接八位RGB彩虹灯环

from mpython import *
import neopixel
import time

my_rgb = neopixel.NeoPixel(Pin(Pin.P8), n=8, bpp=3, timing=1)

def make_rainbow(_neopixel, _num, _bright, _offset):
    _rgb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255), (0,0,255), (136,0,255), (255,0,0))
    for i in range(_num):
        t = 7 * i / _num
        t0 = int(t)
        r = round((_rgb[t0][0] + (t-t0)*(_rgb[t0+1][0]-_rgb[t0][0]))*_bright)>>8
        g = round((_rgb[t0][1] + (t-t0)*(_rgb[t0+1][1]-_rgb[t0][1]))*_bright)>>8
        b = round((_rgb[t0][2] + (t-t0)*(_rgb[t0+1][2]-_rgb[t0][2]))*_bright)>>8
        _neopixel[(i + _offset) % _num] = (r, g, b)


offset = 0
while True:
    make_rainbow(my_rgb, 8, 6, offset)
    offset = offset + 1
    my_rgb.write()
    time.sleep_ms(100)

mPython X 图形编程

9、24位流动RGB彩虹灯环

python 复制代码
#MicroPython动手做(13)------掌控板之RGB三色灯
#24位流动RGB彩虹灯环

from mpython import *
import neopixel
import time

my_rgb = neopixel.NeoPixel(Pin(Pin.P8), n=24, bpp=3, timing=1)

def make_rainbow(_neopixel, _num, _bright, _offset):
    _rgb = ((255,0,0), (255,127,0), (255,255,0), (0,255,0), (0,255,255), (0,0,255), (136,0,255), (255,0,0))
    for i in range(_num):
        t = 7 * i / _num
        t0 = int(t)
        r = round((_rgb[t0][0] + (t-t0)*(_rgb[t0+1][0]-_rgb[t0][0]))*_bright)>>8
        g = round((_rgb[t0][1] + (t-t0)*(_rgb[t0+1][1]-_rgb[t0][1]))*_bright)>>8
        b = round((_rgb[t0][2] + (t-t0)*(_rgb[t0+1][2]-_rgb[t0][2]))*_bright)>>8
        _neopixel[(i + _offset) % _num] = (r, g, b)


offset = 0
while True:
    make_rainbow(my_rgb, 24, 10, offset)
    offset = offset + 1
    my_rgb.write()
    time.sleep_ms(100)

mPython X 图形编程

10、neopixel --- WS2812 灯(环)带

NeoPixels也被称为WS2812 LED彩带(环),是连接在一起的全彩色led灯串。你可以设置他它们的红色,绿色和蓝色值, 在0到255之间。neopixel模块可通过精确的时间控制,生成WS2812控制信号。

构建对象

class NeoPixel(pin, n, bpp=3, timing=0, brightness=1.0)

pin :输出引脚,可使用引脚见下文

n ED灯的个数

bpp:

3:默认为3元组RGB

4:对于具有3种以上颜色的LED,例如RGBW像素或RGBY像素,采用4元组RGBY或RGBY像素

timing:默认等于0,为400KHz速率;等于1,为800KHz速率

brightness:亮度调节,范围0~1,默认为1.0

注意

NeoPixel可使用的pin引脚有掌控板的P5,P6,P7(板上RGB),P8,P9,P11,P13,P14,P15,P16,P19,P20,--实验接在P8

方法

python 复制代码
NeoPixel.write(),

把数据写入LED中。

示例:

python 复制代码
np[0] = (255, 255, 255) # 设置第一个LED像素为白色
np.write()
NeoPixel.fill(rgb_buf)

填充所有LED像素。

python 复制代码
rgb_buf :rgb

颜色

示例:

python 复制代码
np.fill( (255, 255, 255) )

NeoPixel.brightness(brightness)

亮度调节,范围0~1.0

本实验场景图

相关推荐
纪元A梦2 分钟前
华为OD机试真题——绘图机器(2025A卷:100分)Java/python/JavaScript/C++/C/GO最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
程序员小远14 分钟前
接口测试和单元测试详解
自动化测试·软件测试·python·测试工具·单元测试·测试用例·接口测试
Tech Synapse23 分钟前
电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
人工智能·python·tensorflow
聿小翼27 分钟前
selenium-wire 与 googletrans 的爱恨情仇
python
咖啡调调。29 分钟前
模板引擎语法-算术运算
python·django·sqlite
CodeCraft Studio29 分钟前
Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
java·python·excel
Doker 多克30 分钟前
Python-Django系列—部件
开发语言·python
Linux运维老纪32 分钟前
Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
linux·服务器·数据库·python·云计算·运维开发
Bruce_Liuxiaowei38 分钟前
MCP Python SDK构建的**SQLite浏览器**的完整操作指南
数据库·python·sqlite
q_q王39 分钟前
实时数字人——DH_LIVE
python·大模型·数字人·实时