
本文所介绍的内容基于树莓派瑞士军刀扩展板(SAKS),由于 SAKS 基于树莓派通用的 GPIO 设计,文中的原理和代码也适用于其他情况。
本文由树莓派实验室创作,遵循CC协议(署名-非商业性使用-禁止演绎-相同方式共享),欢迎树莓派爱好者们遵循协议内容转载传播。谢绝不遵守协议的转载和抄袭。
本节将以绚丽、有趣的流水灯功能为基础,来说明如何通过 GPIO 来玩转 SAKS 扩展板。
SAKS 扩展板配备了8个 LED,由一片74HC595芯片驱动,该芯片的使用方法查看这里。我们已经将该驱动封装在SAKS SDK中,要在SAKS上实现原文中的流水灯效果变得异常简易。而下面我们将介绍在不使用SDK的情况下如何驱动LED组以便大家能对LED组的操作原理有深入理解。
| 功能 |
BOARD |
BCM |
wiringPi |
|
| LED排灯 74HC595 |
DS | 31 | 6 | 22 |
| SHCP | 35 | 19 | 24 | |
| STCP | 33 | 13 | 23 |
完整代码如下:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
DS = 6
SHCP = 19
STCP = 13
def init():
GPIO.setup(DS, GPIO.OUT)
GPIO.setup(SHCP, GPIO.OUT)
GPIO.setup(STCP, GPIO.OUT)
GPIO.output(DS, GPIO.LOW)
GPIO.output(SHCP, GPIO.LOW)
GPIO.output(STCP, GPIO.LOW)
def writeBit(data):
GPIO.output(DS, data)
GPIO.output(SHCP, GPIO.LOW)
GPIO.output(SHCP, GPIO.HIGH)
#写入8位LED的状态
def writeByte(data):
for i in range (0, 8):
writeBit((data >> i) & 0x01)
#状态刷新信号
GPIO.output(STCP, GPIO.LOW)
GPIO.output(STCP, GPIO.HIGH)
try:
init()
while True:
#以下一组8个编码由一组二进制转换而成:
#00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000
#分别对应8个LED点亮状态
for i in [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80]:
writeByte(i)
time.sleep(0.1)
#LED组全开
#writeByte(0xff)
#time.sleep(0.1)
except KeyboardInterrupt:
print "except"
#LED组全关
writeByte(0x00)
GPIO.cleanup()
在终端运行下载本教程的源码库并进入到对应的源码目录,执行运行脚本的指令可看到效果:
sudo git clone https://github.com/spoonysonny/SAKS-tutorials.git cd SAKS-tutorials/water-lights sudo python waterlights.py
到这里,你已经发现只需要简单的几行代码,就能玩转 SAKS 的 LED 了!在黑夜里,流水灯效果是不是很赞?!
我们后面将介绍更多基于 SAKS 扩展板的有趣的内容,欢迎持续关注!
本文属于《树莓派瑞士军刀扩展板(SAKS)DIY 教程》系列文章,查看系列文章目录,请访问:https://shumeipai.nxez.com/swiss-army-knife-shield-for-raspberry-pi-diy-tutorials