本文所介绍的内容基于树莓派瑞士军刀扩展板(SAKS),由于 SAKS 基于树莓派通用的 GPIO 设计,文中的原理和代码也适用于其他情况。
本文由树莓派实验室创作,遵循CC协议(署名-非商业性使用-禁止演绎-相同方式共享),欢迎树莓派爱好者们遵循协议内容转载传播。谢绝不遵守协议的转载和抄袭。
本节将通过 DIY 一个简单的警报器,来介绍 SAKS 扩展板上蜂鸣器的使用。设定一个时间,比如每到整点,蜂鸣器警报响起,同时黄色 LED 闪烁。之前的章节中已经对 SAKS 扩展板上 LED 的使用做了介绍。SAKS 扩展板上的蜂鸣器和 LED 同样,都是低电平开启。
需要说明的是,SAKS 扩展板上的蜂鸣器是有源蜂鸣器,操作简便,但只能发出一种频率的鸣叫声。而另有一种无源蜂鸣器,则需要通过方波来驱动其发声,可以控制方波的频率实现不同音阶的鸣叫声。
本例程中涉及到的 SAKS 扩展板引脚编号如下:
功能 |
注释 |
BOARD |
BCM |
wiringPi |
|
蜂鸣器 | BUZZER-B1 | 有源蜂鸣器 | 23 | 11 | 14 |
LED排灯 | LED-D8 | LED(黄) | 26 | 7 | 11 |
下面是实现上述功能的代码,同样够简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/usr/bin/env python # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import sys PIN_NO_BEEP = 11 PIN_NO_LED = 7 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_NO_BEEP, GPIO.OUT, initial = GPIO.HIGH) GPIO.setup(PIN_NO_LED, GPIO.OUT, initial = GPIO.HIGH) # 单次哔声和LED发光 def beep(seconds): GPIO.output(PIN_NO_BEEP, GPIO.LOW) GPIO.output(PIN_NO_LED, GPIO.LOW) time.sleep(seconds) GPIO.output(PIN_NO_BEEP, GPIO.HIGH) GPIO.output(PIN_NO_LED, GPIO.HIGH) # 多次哔声和LED发光封装函数,输入参数分别为“占空时间”以及重复次数 def beepAction(secs, sleepsecs, times): for i in range (times): beep(secs) time.sleep(sleepsecs) while True : # 以下代码获取系统时间、时、分、秒、星期的数值 t = time.localtime() h = t.tm_hour m = t.tm_min s = t.tm_sec w = time.strftime( '%w' ,t) #print h,m,s,w time.sleep( 0.3 ) # 判断是否为整点 if m = = 0 and s = = 0 : # 以下注释部分用于让报时的脚本跳过周六和周日(睡个懒觉放松下不容易) #if w==0 or w==6: # continue # 以下代码判断当时间在晚间22点至早间8点期间不报时以免影响睡眠 if h > 22 or h < 8 : continue # 小时数N大于12点的情况下,哔N-12次 if h > 12 : h = h - 12 beepAction ( 0.3 , 0.5 , h) time.sleep( 1 ) # 判断是否为30分 if m = = 30 and s = = 0 : if h > 22 or h < 8 : continue # 快节奏哔2声 beepAction ( 0.05 , 0.05 , 2 ) time.sleep( 1 ) |
代码说明参看注释即可秒懂。将完整代码保存为 chime.py 接下来运行。
1 | sudo python chime.py |
后面我们后面将开始介绍如何基于 SAKS 扩展板 DIY 各种有趣、实用的东西,欢迎持续关注!
本文属于《树莓派瑞士军刀扩展板(SAKS)DIY 教程》系列文章,查看系列文章目录,请访问:https://shumeipai.nxez.com/swiss-army-knife-shield-for-raspberry-pi-diy-tutorials
我为什么用python控制不了GPIO? 一切都正常,就是灯不亮 ,已经确认过灯是好的