【雕爷学编程】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蓝色呼吸灯
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循环代码格式:
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彩虹灯
#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彩虹灯环
#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彩虹灯环
#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
方法
NeoPixel.write(),
把数据写入LED中。
示例:
np[0] = (255, 255, 255) # 设置第一个LED像素为白色
np.write()
NeoPixel.fill(rgb_buf)
填充所有LED像素。
rgb_buf :rgb
颜色
示例:
np.fill( (255, 255, 255) )
NeoPixel.brightness(brightness)
亮度调节,范围0~1.0
本实验场景图