news 2026/5/30 13:37:06

基于树莓派Pico与MicroPython的RGB LED颜色控制实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于树莓派Pico与MicroPython的RGB LED颜色控制实践

1. 项目概述:用Pico玩转RGB LED的色彩魔法

如果你手头有一块树莓派Pico,又恰好对发光的东西感兴趣,那这个项目绝对能让你玩上半天。它的核心目标很简单:通过编写一段MicroPython代码,让你能用键盘输入一个像“#FF5733”这样的十六进制颜色代码,然后亲眼看着手边那块小小的RGB LED灯珠,精准地变幻出你指定的颜色。这不仅仅是点亮一个灯,而是实现了一种从数字世界到物理世界的、直观的色彩“翻译”。

听起来是不是有点像那些智能灯泡的雏形?没错,其背后的原理是相通的。这个项目的价值在于,它用一个非常低成本、易上手的硬件组合(Pico + RGB LED + 几根杜邦线),为你揭开了嵌入式系统中颜色控制PWM调光这两项核心技术的面纱。无论你是想为下一个创客项目添加酷炫的灯光效果,还是单纯想理解智能硬件是如何“听懂”颜色指令的,这个实践都能给你带来扎实的收获。它非常适合有一定Python基础,正准备踏入嵌入式开发大门的朋友,或者任何对硬件编程感到好奇的动手派。

2. 核心硬件解析与电路搭建

2.1 硬件清单与选型考量

要复现这个项目,你需要准备以下几样东西。清单虽小,但每一样的选择都有其道理:

  • Raspberry Pi Pico(1块):这是整个项目的大脑。选择Pico而非其他开发板,主要看中其极致的性价比和强大的MicroPython原生支持。它拥有丰富的GPIO引脚,且每个引脚都支持硬件PWM,这对于我们实现平滑无闪烁的LED调光至关重要。市面上也有Pico W(带Wi-Fi)版本,如果未来你想升级为无线颜色控制,可以直接替换,电路和基础代码完全兼容。
  • RGB LED(1个):这是项目的执行终端。这里有个关键细节:你需要的是一个**共阴极(Common Cathode)**的RGB LED。怎么判断?通常最长的那个引脚是公共端,接电源地(GND)。另外三个较短的引脚分别对应红(R)、绿(G)、蓝(B)芯片。共阴极意味着三个LED的负极是连在一起的,这是我们后面电路连接和代码驱动方式的基础。如果误用了共阳极LED,电路和代码逻辑都需要反向,会给初学者带来不必要的困惑。
  • 面包板(1块):实验阶段的“神器”,无需焊接,可以快速、无损伤地搭建和修改电路。建议使用400孔或830孔的中型面包板,空间充裕,布局清晰。
  • 杜邦线(若干):用于连接各组件。建议准备公对公的杜邦线至少6-7根。为了后续调试方便,最好能准备不同颜色的线,例如用红色线连接正极或PWM信号,黑色或蓝色线连接地线(GND),这样一目了然。
  • USB数据线(1根):用于为Pico供电和上传程序。注意需要是Micro-USB接口的数据线,而新款Pico 2可能使用USB-C接口,请根据你的板子型号准备。

注意:在购买RGB LED时,务必向卖家确认或通过万用表测量其类型(共阴/共阳)。一个简单的判断方法是:将LED的公共引脚通过一个220Ω电阻接到Pico的3.3V引脚,然后用导线分别短暂触碰其他三个引脚到GND,如果LED能点亮,则是共阳极;反之,如果将公共引脚接GND,用3.3V触碰其他引脚能点亮,则是共阴极。我们这个项目默认使用共阴极。

2.2 电路连接原理与实操图解

电路连接是整个项目的物理基础,连接错误轻则灯不亮,重则可能损坏LED或Pico的GPIO引脚。我们来一步步拆解:

1. 核心原理: RGB LED内部封装了红、绿、蓝三个独立的发光二极管。通过分别控制这三个二极管的亮度(从全暗到最亮),根据光学三原色(加色法)原理,它们混合后就能产生各种各样的颜色。Pico的GPIO引脚是数字引脚,只能输出高(3.3V)或低(0V)电平。要控制亮度,就需要用到**PWM(脉宽调制)**技术。PWM通过快速开关引脚,并改变一个周期内“开”(高电平)的时间比例(占空比),来模拟输出一个平均电压值。例如,50%的占空比,模拟出的平均电压就是1.65V,LED亮度就是最大亮度的一半。

2. 连接步骤详解: 请对照你的Pico板,找到以下引脚。Pico的引脚编号通常有两种:一种是物理引脚号(Pin Number),一种是GPIO编号(GPIO Number)。在MicroPython编程中,我们使用GPIO编号。以下连接均使用GPIO编号。

  • RGB LED的公共阴极(-) → Pico的GND引脚:这是电流的回路。找到LED上最长的那个引脚,用一根杜邦线将其连接到Pico上任意的GND引脚(例如物理引脚3, 8, 13, 18, 23, 28, 33, 38等)。我习惯连接到物理引脚38(也是GND),位置比较靠边,方便布线。
  • RGB LED的红色引脚(R) → Pico的GPIO2:通过一个220Ω的限流电阻连接。电阻的作用至关重要,它限制了流过LED的电流,防止因电流过大而烧毁LED或Pico的GPIO引脚。计算一下:Pico GPIO高电平为3.3V,红色LED正向压降约1.8-2.2V,假设我们想要约10mA的工作电流,根据欧姆定律 R = (3.3V - 2.0V) / 0.01A = 130Ω。选择220Ω是一个兼顾安全(电流更小)和亮度的常见值。连接方式:从LED的R脚引出一根线,接电阻一端,电阻另一端接杜邦线,再连接到Pico的GPIO2(物理引脚4)
  • RGB LED的绿色引脚(G) → Pico的GPIO3:同样串联一个220Ω电阻,连接到Pico的GPIO3(物理引脚5)
  • RGB LED的蓝色引脚(B) → Pico的GPIO4:同样串联一个220Ω电阻,连接到Pico的GPIO4(物理引脚6)

3. 连接检查清单

  • [ ] 确认使用的是共阴极RGB LED。
  • [ ] 确认每个颜色通道(R, G, B)都串联了限流电阻(220Ω)。
  • [ ] 确认杜邦线插接牢固,没有虚接。
  • [ ] 确认Pico通过USB线连接电脑,并已正确安装驱动(首次使用需安装,Windows系统可能会识别为一个U盘)。

3. MicroPython代码深度剖析与实现

3.1 开发环境搭建与初始化

在写代码之前,我们需要给Pico“灌入”MicroPython的解释器固件,并选择一个顺手的代码编辑工具。

  1. 刷入MicroPython固件

    • 前往树莓派基金会官网,下载最新版本的MicroPython固件(.uf2文件)。
    • 按住Pico板上的BOOTSEL按钮不放,同时将USB线插入电脑。松开按钮后,电脑会识别到一个名为RPI-RP2的可移动磁盘。
    • 将下载好的.uf2文件拖入该磁盘。Pico会自动重启,此时它就不再是一个存储设备,而是一个运行着MicroPython的微控制器了。
  2. 选择代码编辑器

    • Thonny:这是最推荐给初学者的选择。它集成了MicroPython环境管理、代码编辑、上传和串口交互功能,开箱即用。安装后,在右下角选择解释器为“MicroPython (Raspberry Pi Pico)”,并选择正确的串口端口即可连接。
    • VS Code with Pico-Go扩展:如果你习惯使用VS Code,可以安装Pico-Go扩展。它提供了类似Thonny的集成体验,功能更强大。
    • Mu Editor:另一个轻量级的选择,界面简洁。

连接成功后,你可以在Thonny的“Shell”交互窗口(REPL)看到>>>提示符,输入print(“Hello, Pico!”)并回车,如果能看到输出,说明环境搭建成功。

3.2 核心代码逐行解读与优化

原始项目提供的代码是一个很好的起点,但它有一些可以优化和必须理解的地方。我们下面提供一个增强版,并加入详细注释。

# 导入必要的模块 import machine import time # 1. 引脚定义 - 使用GPIO编号,对应我们之前的硬件连接 RED_PIN = 2 # 物理引脚4,连接红色LED(通过电阻) GREEN_PIN = 3 # 物理引脚5,连接绿色LED BLUE_PIN = 4 # 物理引脚6,连接蓝色LED # 2. 初始化PWM对象 # machine.Pin() 将GPIO配置为输出模式 # machine.PWM() 在该引脚上启用PWM功能 # freq=1000 设置PWM频率为1000Hz。这个值很重要: # - 太低(如100Hz):人眼可能会察觉到闪烁。 # - 太高(如10kHz):虽然无闪烁,但可能导致Pico的PWM分辨率下降或功耗微增。 # 1000Hz是一个在无闪烁和保持较好分辨率之间的常用平衡点。 red_pwm = machine.PWM(machine.Pin(RED_PIN), freq=1000) green_pwm = machine.PWM(machine.Pin(GREEN_PIN), freq=1000) blue_pwm = machine.PWM(machine.Pin(BLUE_PIN), freq=1000) # 3. 核心函数:将16进制颜色码和亮度值转换为PWM占空比 def set_led_color(hex_color, brightness=1.0): """ 根据16进制颜色代码和亮度设置RGB LED颜色。 参数: hex_color: 整数形式的16进制颜色值,例如 0xFF5733。 brightness: 亮度系数,范围0.0到1.0。1.0为最亮,0.0为熄灭。 """ # 3.1 颜色分量提取 # 0xFF5733 >> 16 = 0xFF (红色分量) # 0xFF5733 >> 8 = 0xFF57 & 0xFF = 0x57 (绿色分量) # 0xFF5733 & 0xFF = 0x33 (蓝色分量) # 每个分量范围是0-255 red_raw = (hex_color >> 16) & 0xFF green_raw = (hex_color >> 8) & 0xFF blue_raw = hex_color & 0xFF # 3.2 应用亮度调节 # 将原始分量乘以亮度系数,并确保结果为整数 red = int(red_raw * brightness) green = int(green_raw * brightness) blue = int(blue_raw * brightness) # 3.3 映射到Pico的PWM范围 # Pico的PWM duty_u16()方法接受0-65535的16位整数。 # 我们需要将0-255的颜色分量值,线性映射到0-65535。 # 公式:PWM值 = 颜色分量值 * 257 # 为什么是257?因为 65535 / 255 ≈ 256.96,取整257能几乎用满整个PWM范围,控制更精细。 # 使用 min() 函数确保值不超过65535,这是一个良好的防御性编程习惯。 red_pwm_value = min(red * 257, 65535) green_pwm_value = min(green * 257, 65535) blue_pwm_value = min(blue * 257, 65535) # 3.4 输出PWM信号 red_pwm.duty_u16(int(red_pwm_value)) green_pwm.duty_u16(int(green_pwm_value)) blue_pwm.duty_u16(int(blue_pwm_value)) # 可选:打印调试信息,便于理解当前设置 print(f"Color: #{hex_color:06X}, Brightness: {brightness}, PWM(R,G,B): ({int(red_pwm_value)}, {int(green_pwm_value)}, {int(blue_pwm_value)})") # 4. 测试函数:快速验证LED和电路是否正常工作 def test_leds(): """依次点亮红、绿、蓝三色,然后显示白色,用于硬件测试。""" print("Testing Red...") set_led_color(0xFF0000) # 红色 time.sleep(1) print("Testing Green...") set_led_color(0x00FF00) # 绿色 time.sleep(1) print("Testing Blue...") set_led_color(0x0000FF) # 蓝色 time.sleep(1) print("Testing White...") set_led_color(0xFFFFFF) # 白色(全亮) time.sleep(1) print("Test complete. Turning off.") set_led_color(0x000000) # 黑色(全灭) # 5. 主循环:交互式颜色输入 def main(): print("RGB LED Color Controller Started!") print("Enter hex color code (e.g., #FF5733 or FF5733). Type 'test' to test LEDs, 'quit' to exit.") # 先运行一次硬件测试 test_leds() while True: try: # 获取用户输入并去除首尾空格 user_input = input(">> ").strip().lower() # 转换为小写方便判断 if user_input == 'quit': print("Exiting...") # 退出前关闭所有LED set_led_color(0x000000) break elif user_input == 'test': test_leds() continue # 处理颜色输入 hex_color_str = user_input # 允许用户输入带#或不带#的格式 if hex_color_str.startswith('#'): hex_color_str = hex_color_str[1:] # 检查是否为有效的6位16进制字符串 if len(hex_color_str) == 6: # 将16进制字符串转换为整数 hex_color_int = int(hex_color_str, 16) # 调用函数设置颜色,默认亮度1.0 set_led_color(hex_color_int) else: print("Error: Please enter a valid 6-digit hex code (e.g., FF5733 or #FF5733).") except ValueError: print("Error: Invalid hex value. Please enter something like 'FF5733'.") except KeyboardInterrupt: # 捕获Ctrl+C,优雅退出 print("\nProgram interrupted by user. Turning off LED.") set_led_color(0x000000) break # 程序入口 if __name__ == "__main__": main()

代码优化点解析

  1. 增加了亮度参数:原代码的brightness参数在函数内计算有误(直接乘以0-255的值),新版修正为先提取原始分量,再乘亮度,最后映射PWM,逻辑更清晰。
  2. 增强了PWM映射:明确使用了* 257的映射方式,并解释了原因,充分利用了16位PWM的分辨率,使得颜色控制更加细腻。
  3. 添加了硬件测试函数test_leds()函数非常实用。在你完成电路连接后,首先运行这个测试,可以快速判断R、G、B三个通道的电路连接是否正确,LED是否完好。这是硬件调试的标准步骤。
  4. 改进了用户交互:支持输入test进行测试,输入quit或使用Ctrl+C优雅退出程序。对输入格式也更宽容(可带#可不带),并提供了更清晰的错误提示。
  5. 加入了调试输出set_led_color函数中的print语句会输出计算出的PWM值,这对于深入学习PWM原理和调试复杂颜色问题非常有帮助。

3.3 代码上传与运行实操

在Thonny中操作:

  1. 将上述完整代码复制粘贴到Thonny的编辑窗口中。
  2. 点击工具栏的“保存”按钮。Thonny会问你要保存到“此电脑”还是“MicroPython设备”。务必选择“MicroPython设备”
  3. 将文件命名为main.py。这是关键!Pico上电后会自动寻找并执行名为main.py的文件。如果命名为其他名字,你需要每次手动运行。
  4. 保存后,按一下Pico板上的复位按钮(RUN/RESET),或者点击Thonny的“停止/重启后端”按钮。程序就会自动运行。
  5. 观察Shell窗口,你会看到提示信息。现在,你可以按照提示输入颜色代码了。试着输入FF0000(红色)、00FF00(绿色)、0000FF(蓝色)、FFFF00(黄色)、FF00FF(品红)、00FFFF(青色),以及FFFFFF(白色)。看看LED是如何响应的。

4. PWM调光原理与颜色混合的深入探讨

4.1 PWM技术细节揭秘

前面我们提到了PWM是通过占空比来模拟电压。但具体到Pico上,是如何实现的呢?

  • 频率(Freq):我们代码中设置的freq=1000,意味着PWM信号每秒钟完成1000个完整的“开-关”周期。每个周期的长度是1/1000秒,即1毫秒。在这个周期内,高电平所占的时间比例就是占空比。
  • 分辨率(Resolution)duty_u16()方法要求一个0-65535的整数。这个范围对应了16位的分辨率(2^16 = 65536)。这意味着我们可以将占空比细分为65536级。对于LED调光来说,这已经远远超出了人眼能分辨的级别(通常认为100-256级就够了),因此可以实现极其平滑的亮度渐变。
  • 为什么不用简单的模拟电压?像Pico这样的微控制器,其GPIO是数字引脚,本身不具备输出任意电压的能力。虽然有些MCU有真正的数模转换器(DAC)引脚,但Pico没有。PWM是一种利用数字引脚“模拟”出模拟效果的经典且高效的方法,几乎所有的微控制器都支持。

占空比与亮度感知:人眼对光强的感知并非线性,而是近似对数的。这意味着,PWM占空比从10%增加到20%,带来的亮度提升感觉,比从80%增加到90%要明显得多。在一些高级的灯光控制中,会使用“伽马校正”来对PWM值进行非线性映射,使得亮度调节在人眼看来是均匀的。我们的简单线性映射(颜色值 * 257)对于基础应用已经足够,但了解这一点有助于你未来做更专业的灯光设计。

4.2 从Hex代码到真实颜色的转换逻辑

十六进制颜色码(如#FF5733)是Web和图形设计中的标准。它如何对应到物理世界的LED?

  1. 解码#FF5733可以拆分为三组两位的十六进制数:FF(红),57(绿),33(蓝)。每组范围是00FF,对应十进制0到255。
  2. 映射:我们的set_led_color函数做的就是解码和映射工作。FF(255)代表该颜色通道最亮,00(0)代表该通道熄灭。
  3. 混合:LED灯珠上红、绿、蓝三个发光点距离极近,当它们同时以不同亮度发光时,人眼在正常观看距离下无法分辨三个独立的光点,视觉系统会将它们混合,感知为一种单一的颜色。这就是加色混合原理。

一个有趣的实验:输入#FFFF00(黄色)。你会发现,红色和绿色LED以最大亮度点亮,蓝色熄灭。这与你在电脑屏幕上看到的黄色在物理原理上是一致的。你可以尝试输入#808080(中灰色),三个通道都以一半的亮度(128)发光,混合出灰色。

4.3 项目扩展思路与实践

基础功能实现后,这个项目可以作为一个平台,扩展出许多有趣的应用:

  1. 呼吸灯与渐变效果:修改主循环,不再等待用户输入,而是让颜色自动变化。例如,实现一个呼吸灯效果(亮度周期性平滑变化)。

    import math def breathing_led(color_hex, cycle_seconds=3): """让指定颜色以正弦波形式呼吸。""" for i in range(1000): # 使用正弦函数生成0~1之间周期性变化的亮度系数 brightness = (math.sin(i * 2 * math.pi / 100) + 1) / 2 # 映射到0-1 set_led_color(color_hex, brightness) time.sleep(cycle_seconds / 1000) # 控制循环速度 # 调用 breathing_led(0xFF5733) 可以看到珊瑚色的呼吸效果
  2. 色彩循环与彩虹灯:在HSV(色相、饱和度、明度)色彩空间中进行循环,可以产生非常平滑的彩虹渐变效果,这比直接在RGB空间循环要自然得多。

  3. 外部控制

    • 电位器调色:用三个电位器分别连接到Pico的ADC(模拟转数字)引脚,旋转电位器来实时调节R、G、B的值,实现一个物理调色台。
    • 光线传感器自动调光:根据环境光强度,自动调节LED的整体亮度(brightness参数)。
    • 升级到Pico W实现网络控制:使用Pico W,创建一个简单的Web服务器。你可以在手机或电脑的浏览器上输入颜色代码,甚至通过一个网页调色盘来实时控制远端的LED灯。这是迈向物联网智能照明的一小步。
  4. 多LED与灯带控制:原理相同,但需要更多GPIO引脚或使用诸如WS2812B(NeoPixel)这类集成控制芯片的智能灯带。控制智能灯带需要特定的时序协议,有现成的库(如neopixel)可以简化操作。

5. 常见问题排查与调试心得

在实际操作中,你几乎一定会遇到一些问题。下面是我在多次实践中总结的排查清单和心得。

5.1 硬件连接问题

现象可能原因排查步骤
LED完全不亮1. 电源未接通。
2. 公共端接错(共阴接成了3.3V)。
3. LED或Pico损坏(罕见)。
1. 检查USB线是否插好,Pico电源指示灯(LED)是否亮起。
2.重点检查:用万用表通断档或一根杜邦线,确认LED最长引脚是否确实连接到了Pico的GND。尝试将其直接接到Pico的GND引脚。
3. 运行test_leds()函数,看Shell是否有输出。若无,可能是代码未运行。
只有一个颜色不亮(如红色不亮)1. 该颜色通道的杜邦线、电阻虚焊或接触不良。
2. 该颜色的LED芯片损坏。
3. 代码中对应的GPIO引脚号写错。
1. 重新插拔该通道的杜邦线和电阻,确保接触牢固。
2.交换测试:将连接红色LED的线(包括电阻)暂时接到已知正常的绿色引脚(GPIO3)上。在代码中临时设置绿色为全亮,如果红色LED亮了,说明LED和电阻是好的,问题在GPIO2引脚或代码;如果不亮,可能是LED或这段线路问题。
3. 检查代码RED_PIN的定义是否与物理连接一致。
LED颜色暗淡或亮度不一致1. 限流电阻阻值过大(如用了1kΩ)。
2. 不同颜色的LED芯片本身正向电压有差异。
3. PWM频率设置不当。
1. 确认使用的是220Ω电阻。如果追求高亮度,可以尝试减小到150Ω,但需注意总电流不要超过单个GPIO引脚的驱动能力(Pico约12mA)。
2. 这是正常物理现象。可以通过软件进行“白平衡”校准:在显示白色(#FFFFFF)时,微调各通道的映射系数,使混合光看起来是纯白而非偏色。
3. 尝试将PWM频率freq从1000改为500或2000,观察是否有改善。频率过低会导致闪烁。
输入颜色代码后无反应,但Shell有输出1. 代码逻辑错误,PWM值计算或设置未成功。
2.main.py文件中有语法错误,导致程序中途停止。
1. 仔细查看set_led_color函数中的print调试输出,确认计算出的PWM值是否在0-65535范围内。检查映射公式是否正确。
2. 在Thonny中直接按F5运行当前脚本(而非重启Pico),Thonny会报告具体的语法错误行。

5.2 软件与代码问题

  • NameError: name 'machine' isn't defined:这说明你的开发环境没有正确连接到MicroPython,或者文件没有在Pico设备上运行。确保在Thonny中选择了“MicroPython (Raspberry Pi Pico)”解释器,并且代码文件是保存到设备上的main.py
  • 颜色显示与预期不符:比如输入黄色却显示成了蓝色。这极有可能是R、G、B三个引脚接错了。再次强调:仔细核对原理图,确保GPIO2接红色,GPIO3接绿色,GPIO4接蓝色。一个有效的测试方法是,在test_leds()函数中,单独点亮一个颜色时,用手稍微遮挡其他两个颜色的灯珠,确认发光的确实是目标颜色。
  • 程序无法退出或卡住:我们的主循环使用了try...exceptKeyboardInterrupt捕获,通常可以优雅退出。如果卡住,可以尝试在Thonny中点击红色的“停止”按钮,或者直接拔插USB线重启Pico。

5.3 实操心得与进阶技巧

  1. 先测试,后集成:永远遵循“分模块测试”的原则。先只连接红色通道,写几句代码让它亮、灭、半亮,确认硬件和基础驱动没问题。然后再连接绿色,测试红绿混合出黄色是否正确。最后接上蓝色。这能帮你快速定位问题是出在硬件、接线还是代码上。
  2. 善用打印调试:MicroPython的print()是你最好的朋友。在关键步骤,比如计算出PWM值后、进入循环前,打印出变量的值,能让你清晰地知道程序在“想什么”。
  3. 理解Pico的引脚复用:Pico的某些引脚有特殊功能(如ADC、UART)。虽然我们用的GPIO2,3,4是普通的数字IO,但如果你未来项目需要更多LED,要注意避开这些特殊功能引脚。官方引脚图是必备参考资料。
  4. 电源考量:虽然单个RGB LED电流不大(每个通道约10mA,全白约30mA),但如果你驱动多个LED或多个灯珠,总电流可能会超过USB口或Pico的供电能力。此时需要考虑外接电源,并通过晶体管或MOSFET来驱动LED,Pico的GPIO仅提供控制信号。
  5. 代码版本管理:当你尝试扩展功能(如呼吸灯、网络控制)时,建议将不同功能的代码保存为不同的文件,例如main_basic.py,main_breathing.py,main_web.py。在需要时,将目标文件重命名为main.py再上传,避免代码混乱。

这个基于Raspberry Pi Pico的RGB LED控制项目,麻雀虽小,五脏俱全。它串联了硬件识别、电路搭建、PWM原理理解、MicroPython编程、调试排错等多个嵌入式开发的核心环节。当你看到自己输入的一串字符,精准地化为眼前一抹绚烂的光彩时,那种跨越数字与物理世界的创造感,正是硬件编程最迷人的地方。希望这份详细的拆解,能成为你探索更广阔嵌入式世界的一块坚实跳板。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 13:31:27

浙江高铁独有浪漫✨浙笺漂治愈所有赶路人!

穿行于诗画浙江的高铁线上,旅客们借清洁袋书写心语、随轨漂流,让无声的温情在陌生人之间传递,尽显“浙里”的文化诗意与文明温度。这份藏在高铁上的小众极致浪漫,就是爆火的浙笺漂,体验一次就彻底沦陷,谁能…

作者头像 李华
网站建设 2026/5/30 13:30:26

谷歌搜索AI升级后频现拼写问题,根源是LLM结构性缺陷,修复代价大

谷歌搜索AI升级后频现拼写问题AI虽有用却有不少黑历史,像算不准Strawberry中r的数量、知道马嘉祺却叫不出名字,还有AI幻觉问题也一直困扰着用户。如今,谷歌搜索又出了新问题。有用户发现,近日升级了AI能力的谷歌搜索,面…

作者头像 李华
网站建设 2026/5/30 13:29:11

基于Arduino Nano ESP32与步进电机的物联网机械翻牌时钟制作全解析

1. 项目概述与核心思路最近在工作室里捣鼓出了一个挺有意思的小玩意儿——一个会自己“翻牌”的滑动拼图时钟。它不像普通的电子钟那样用数码管或者屏幕显示时间,而是通过四个独立的机械模块,像老式火车站的车次翻牌显示器一样,用实体的塑料“…

作者头像 李华