用户工具

站点工具


首页

Micropython驱动ESP32-S3上的RGB-LED灯(WS2812)

MicroPython 的 neopixel 库是一个用来控制 NeoPixel LED(基于 WS2812 或类似协议的 RGB LED)的模块。它提供了一种简单的方法来管理这些 LED 的颜色和亮度。

记录一下成功测试的代码:

import machine
import neopixel
import time

# 配置 RGB LED
PIN = 48  # GPIO38
NUM_LEDS = 8  # LED 灯珠的数量,根据实际情况调整
LED_COUNT = 8 
# 初始化 Neopixel
np = neopixel.NeoPixel(machine.Pin(PIN), NUM_LEDS)

def set_color(index, r, g, b, brightness=1.0):
    """
    设置指定 LED 的颜色
    :param index: LED 的索引(从 0 开始)
    :param r: 红色值(0-255)
    :param g: 绿色值(0-255)
    :param b: 蓝色值(0-255)
    :param brightness: 亮度调整系数(0.0-1.0)
    """
    r = int(r * brightness)
    g = int(g * brightness)
    b = int(b * brightness)
    np[index] = (g, r, b)  # Neopixel 是 GRB 排序
    np.write()  # 将数据写入 LED

def rainbow_cycle(delay_ms=50):
    """
    循环显示彩虹效果
    :param delay_ms: 每次循环的延迟时间(毫秒)
    """
    for j in range(256):  # 循环 256 次
        for i in range(NUM_LEDS):  # 每个 LED 单独计算颜色
            pixel_index = (i * 256 // NUM_LEDS) + j
            np[i] = wheel(pixel_index & 255)
        np.write()
        machine.sleep(delay_ms)

def wheel(pos):
    """
    生成彩虹颜色
    :param pos: 位置(0-255)
    :return: (g, r, b) 格式的颜色元组
    """
    if pos < 85:
        return (pos * 3, 255 - pos * 3, 0)
    elif pos < 170:
        pos -= 85
        return (255 - pos * 3, 0, pos * 3)
    else:
        pos -= 170
        return (0, pos * 3, 255 - pos * 3)
    
def set_all_red():
    """
    将所有 LED 设置为红色。
    """
    for i in range(LED_COUNT):
        np[i] = (255, 0, 0)  # 红色 (R, G, B)
    np.write()  # 更新 LED 显示
    
def set_all_white():
    """
    将所有 LED 设置为白色。
    """
    for i in range(LED_COUNT):
        np[i] = (255, 255, 255)  # 白色 (R, G, B)
    np.write()  # 更新 LED 显示

def turn_off_all_leds():
    """
    关闭所有 LED。
    """
    for i in range(LED_COUNT):
        np[i] = (0, 0, 0)  # 设置每颗 LED 的 RGB 值为 (0, 0, 0)
    np.write()  # 更新 LED 显示

# 测试代码
#set_color(0, 255, 0, 0)  # 第一个 LED 显示红色
#time.sleep(2)
#set_color(1, 0, 255, 0)  # 第二个 LED 显示绿色
#time.sleep(2)
#set_color(2, 0, 0, 255)  # 第三个 LED 显示蓝色
#time.sleep(2)
set_all_red()
time.sleep(2)
set_all_white()
time.sleep(2)
turn_off_all_leds()
#rainbow_cycle()  # 显示彩虹效果


2024/12/24 12:03 · owl

从什么编程语言开始学习

在开始学习一门编程语言之前,我们来参考下程序员社区流行的一张编程语言选择地图。需要注意的是,一个优秀的程序员必须至少了解几种编程语言,以便用不同语言来解决不同问题。随着技术的进步,优秀的人们也在不断学习和成长。这张图只是编程之旅的开始,只需选择一种语言,现在就开始探索吧!

学什么编程语言

从这张图我们可以看到,Python具有广泛的应用场景:从自我提升到找工作和鸡娃学习,从Web开发到人工智能和自动化运维等领域,Python都发挥着重要的作用。由于其简单易学、代码可读性高、拥有丰富的库和框架等优点,Python将继续在未来的科技领域中发挥重要的作用。

在美国电气和电子工程师协会(IEEE Spectrum)的第10届年度编程语言排行榜中(如下图),Python不仅在的普通“Spectrum”排名(加权以反映典型IEEE成员的兴趣)中继续保持第一,而且还扩大了其领先优势。它已成为多面手语言,甚至垄断了一些专业领域,例如人工智能;其强大而广泛的库使其无处不在。尽管摩尔定律对于高端计算正在逐渐减少,但低端微控制器仍然从性能提升中受益,这意味着现在廉价的物联网CPU(如ESP32)上就有足够的计算能力让Python成为嵌入式开发的有力竞争者。并且Python似乎也在巩固其长期地位:现在许多儿童和青少年使用Python编写他们的第一个游戏或点亮闪烁他们的第一个LED。然后他们可以无缝地进入更先进的领域,甚至用同一种语言找到工作——这就是Python语言的生态优势。

2023最流行编程语言排行榜

2023/12/10 18:11 · owl

波士顿动力(Boston Dynamics)Atlas人形机器人近况

昨天(2023年1月19日),波士顿动力(Boston Dynamics)名为Atlas的人形机器人最近展示了与目标物体互动,更改现实环境,抓举、抛起重物等功能;见视频。

→ 阅读更多...

机电工程师网3.0上线

在2023年这个寒假,刚好有时间把机电工程师网站做一个改版,作为一个新的起点。

  1. 1.0时期网站后台为dedecms.
  2. 2.0时期网站为mediawiki。
  3. 3.0版本更新为dokuwiki系统。

网站将继续更新科技相关学习资料与新闻。

2023/01/19 21:34 · owl
首页.txt · 最后更改: 2023/12/05 08:49 由 127.0.0.1