300|5

2823

帖子

6

TA的资源

五彩晶圆(初级)

楼主
 

我的树莓派入门(1):让LED灯像波浪一样流动起来! [复制链接]

本帖最后由 xutong 于 2026-4-8 22:14 编辑

hello uu们,有没有在家吃灰派(树莓)派准备用起来吗?为了后面的工作做铺垫我准备把我的派用起来,我的需求是用Python 完成对芯片的读写,然后把读写的数据存在excel表格里面最后导出来。

 

📌咱们定一个阶段性目标:写入24CXX读取24CXX,将读取的数据存成log或者表格。

软件准备

首先我们先从简单的开始,我使用的是树莓派 Zero 2W,这个比较便宜,我也不知道会吃灰多久买个便宜的准没错。如果需要读写IO 树莓派支持的库有很多,比如wiringPiRPi.GPIOpigpiogpiozero但是使用Python对后面文件系统的读写调用会方便很多,所以我选择使用基于Python的RPi.GPIO

既然我们选择了RPI.GPIO 那用 Pip list 看下是否已经安装了这个库,如果没有那么可以在控制台输入

#使用清华源安装国内的网络会快1..
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ RPi.GPIO 
#使用默认源安装
pip install RPi.GPIO

硬件准备

硬件方面我们需要知道要用那几个Pin就行,需要注意的是树莓派排针的方向。那里是1脚可别接错了,因为我用3D打印加了个外壳,所以更加难辨认,另外为了不带MicroUSB线我又焊接了一个Type-C的母座,这样调试起来会更加得心应手。

40PIN对照表

 

 

实物排针朝向

 

 

实验平台

 

 

 

 

 

开始干活

既然已经知道库,那么应该从库的API看起他是怎么整的,所以我们需要看下 RPI.GPIO 的wiki,链接如下:

raspberry-gpio-python / Wiki / Examples

方便大家看我直接将Wiki的信息拷贝到这里:

 

 

📢任务分解

  1. 选择GPIO
  2. 设置GPIO的模式
  3. 设置GPIO的输出高或者低

🧐代码实现

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
# 使用 BOARD 编号
GPIO.setmode(GPIO.BOARD)

# 定义四个 LED 引脚 (请根据实际情况修改)
pins = [11, 12, 13, 15]  # Example pins: GPIO 18, 19, 21, 22 (BOARD numbers)
# pins = [7, 11, 12, 13] # Alternative example: GPIO 4, 17, 18, 21 (BOARD numbers)

# 设置所有引脚为输出模式
for pin in pins:
    GPIO.setup(pin, GPIO.OUT)
    GPIO.output(pin, GPIO.LOW) # 初始化为低电平

def cleanup():
    """清理 GPIO 设置"""
    for pin in pins:
        GPIO.output(pin, GPIO.LOW)
    GPIO.cleanup()

def pattern1_single_chaser():
    """花样1: 单灯顺向追逐"""
    for i in range(len(pins)):
        # 关闭所有灯
        for j in pins:
            GPIO.output(j, GPIO.LOW)
        # 点亮当前灯
        GPIO.output(pins[i], GPIO.HIGH)
        time.sleep(0.2)

def pattern2_double_chaser():
    """花样2: 双灯顺向追逐"""
    for i in range(len(pins)):
        # 关闭所有灯
        for j in pins:
            GPIO.output(j, GPIO.LOW)
        # 点亮当前灯和下一个灯 (循环)
        GPIO.output(pins[i], GPIO.HIGH)
        GPIO.output(pins[(i + 1) % len(pins)], GPIO.HIGH)
        time.sleep(0.2)

def pattern3_back_chaser():
    """花样3: 单灯反向追逐"""
    for i in reversed(range(len(pins))):
        # 关闭所有灯
        for j in pins:
            GPIO.output(j, GPIO.LOW)
        # 点亮当前灯
        GPIO.output(pins[i], GPIO.HIGH)
        time.sleep(0.2)

def pattern4_bounce():
    """花样4: 来回弹跳"""
    sequence = list(range(len(pins))) + list(reversed(range(len(pins)-1)[1:]))
    for i in sequence:
        # 关闭所有灯
        for j in pins:
            GPIO.output(j, GPIO.LOW)
        # 点亮当前灯
        GPIO.output(pins[i], GPIO.HIGH)
        time.sleep(0.2)

def pattern5_all_flash():
    """花样5: 全部闪烁"""
    for _ in range(5): # 闪 5 次
        for pin in pins:
            GPIO.output(pin, GPIO.HIGH)
        time.sleep(0.1)
        for pin in pins:
            GPIO.output(pin, GPIO.LOW)
        time.sleep(0.1)

def pattern6_alternating_half():
    """花样6: 一半亮一半暗交替"""
    for _ in range(3): # 交替 3 次
        # 奇数组亮,偶数组暗
        for i, pin in enumerate(pins):
            if i % 2 == 0:
                GPIO.output(pin, GPIO.LOW)
            else:
                GPIO.output(pin, GPIO.HIGH)
        time.sleep(0.3)
        # 偶数组亮,奇数组暗
        for i, pin in enumerate(pins):
            if i % 2 == 0:
                GPIO.output(pin, GPIO.HIGH)
            else:
                GPIO.output(pin, GPIO.LOW)
        time.sleep(0.3)


patterns = [
    ("单灯顺向追逐", pattern1_single_chaser),
    ("双灯顺向追逐", pattern2_double_chaser),
    ("单灯反向追逐", pattern3_back_chaser),
    ("来回弹跳", pattern4_bounce),
    ("全部闪烁", pattern5_all_flash),
    ("一半亮一半暗交替", pattern6_alternating_half),
]

try:
    while True:
        for name, func in patterns:
            print(f"\n--- 正在运行: {name} ---")
            start_time = time.time()
            # 每个花样持续大约 3 秒
            while time.time() - start_time < 3:
                func()
            # 花样结束后短暂暂停
            time.sleep(0.5)

except KeyboardInterrupt:
    print("\n程序被用户中断")

finally:
    cleanup()
    print("GPIO 已清理,程序退出")

⬇️将代码传入树莓派

1.ssh登录后再桌面新建lesson1的文件夹,并且新建led.py文件

 

 

2.打开Py文件将代码拷贝到led.py中

 

 

3.运行led.py文件

 

 

运行这段代码跳转到文件所在的目录 cd /home/xutong/Desktop/lesson1/
运行这段代码运行Python程序 python led.py

在使用第二行代码的时候可以直接使用回车来完成,因为当前目录只有一个led.py

 

 

测试结果:

 

 

因为我没有焊板子所以我用逻辑分析仪来读取流水灯的变化,所以我使用逻辑分析仪去捕捉。看不同的阶梯波就是不同的流水灯方式。

 

如果我们不想在运行这个了,也可以在界面中按Ctrl+C退出,也可以在控制台用方向键在去运行刚刚的Python代码。

 

 

结语:流程跑通已经成功了一半,自己动手试试吧! 

 

此帖出自编程基础论坛

最新回复

楼主写的很好,,硬件2W选的也好,,Python选的库也合适,,看来很有开发经验。。   详情 回复 发表于 2026-4-10 10:36
点赞 关注
个人签名

希望做一些大家觉得好用的东西!

 

回复
举报

8617

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

帖子的中间和后面好多配图看不到

此帖出自编程基础论坛

点评

我来改进下  详情 回复 发表于 2026-4-8 22:07
 
 
 

回复

2823

帖子

6

TA的资源

五彩晶圆(初级)

板凳
 
Jacktang 发表于 2026-4-8 20:59 帖子的中间和后面好多配图看不到

我来改进下

此帖出自编程基础论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

9445

帖子

9

TA的资源

版主

4
 

树莓派 Zero 2W才是物联网首选    

此帖出自编程基础论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

4078

帖子

0

TA的资源

五彩晶圆(中级)

5
 

楼主写的很好,,硬件2W选的也好,,Python选的库也合适,,看来很有开发经验。。

此帖出自编程基础论坛

点评

第一次开发树莓派你信  详情 回复 发表于 2026-4-10 20:21
 
 
 

回复

2823

帖子

6

TA的资源

五彩晶圆(初级)

6
 
tagetage 发表于 2026-4-10 10:36 楼主写的很好,,硬件2W选的也好,,Python选的库也合适,,看来很有开发经验。。

第一次开发树莓派你信

此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

小广播

更多活动
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 3

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表