【雕爷学编程】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

本实验场景图

相关推荐
可愛小吉9 分钟前
Python 课程10-单元测试
开发语言·python·单元测试·tdd·unittest
luckyluckypolar10 分钟前
STM32 -中断
stm32·单片机·嵌入式硬件·物联网
student.J15 分钟前
傅里叶变换
python·算法·傅里叶
Freak嵌入式1 小时前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
crownyouyou1 小时前
最简单的一文安装Pytorch+CUDA
人工智能·pytorch·python
鸽芷咕1 小时前
【Python报错已解决】libpng warning: iccp: known incorrect sRGB profile
开发语言·python·机器学习·bug
WenGyyyL1 小时前
变脸大师:基于OpenCV与Dlib的人脸换脸技术实现
人工智能·python·opencv
laofashi20151 小时前
AirTest 基本操作范例和参数解释(一)
python·自动化·automation
XyLin.1 小时前
Msf之Python分离免杀
开发语言·python·网络安全·系统安全
Snowbowღ2 小时前
OpenAI / GPT-4o:Python 返回结构化 / JSON 输出
python·json·openai·api·gpt-4o·pydantic·结构化输出