使用香蕉派M3驱动无源蜂鸣器

还记得我费尽周折用PRI.GPIO通过香蕉派M3点亮一个LED嘛?好吧,其实我家里并不缺灯泡,LED手电筒这种家用电器我也有好几个,况且现在手机啥的都有手电筒功能,所以点亮个LED其实并没有什么大用。

其实我是初衷是弄一个蜂鸣器当作报警器,我明明记得我有好几个那种一通电就哇哇响的蜂鸣器,可是找了半天没找到,只好先用LED代替了。

然而问题来了,当我成功点亮LED后,我还是没有找到那种通电哇哇响的蜂鸣器,这下可麻爪了。还好最终我找到一大堆所谓的无源蜂鸣器,看看如何用这个凑合吧。

原理

百度一下无源蜂鸣器:

无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。

百度一下声音的频率:

声音作为一种波,频率在20 Hz~20 kHz之间的声音是可以被人耳识别的。

所以要想让无源蜂鸣器的发声就得以20 Hz~20 kHz的频率通断电。

代码一

要做到这点也挺简单,只要用之前文章种控制GPIO的代码改改就可以实现了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)

def beep(pin, frq, duty):
c = 1 / frq
h = c / 100 * duty
l = c - h
GPIO.output(pin, GPIO.HIGH)
time.sleep(h)
GPIO.output(pin, GPIO.LOW)
time.sleep(l)

while True:
beep(11, 60000, 50)
#time.sleep(1)
#beep(11, 12000, 50)
#time.sleep(1)

代码2 PWM

如果就是驱动蜂鸣器,我们已经成功了,上述代码运行后,蜂鸣器会发出哔哔的声音。

可是如何我们想多做一些工作,比如说打开上述代码中注释掉的部分,发现代码并不如我们意料的那样工作,这是因为我们发出beep声音的是通过sleep控制周期实现的,而并非单独的硬件或者单独的线程

那么如果想实现类似上述功能该怎么办呢?我不知道香蕉派有没有硬件PWM,即便有我也不知道咋控制,我也懒得去写多线程代码,来实现复杂控制。

好在RPI.GPIO中实现了一个PWM功能(我不确定是软件方式还是硬件方式),使用PWM功能重新实现上述代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)

Buzz = GPIO.PWM(11, 6000)
Buzz.start(50)
while True:
Buzz.ChangeFrequency(6000)
time.sleep(1)
Buzz.ChangeFrequency(12000)
time.sleep(1)

不但功能好用了,代码也简洁不少呢!

补充说明

因为不是硬件PWM(我猜测的),所以估计精度不是那么准确,声音不太正。

如果去研究香蕉派M3的硬件PWM,先不说硬件是否支持,如何控制学起来估计也挺费劲的。

考虑直接用Arduino控制蜂鸣器,然后香蕉派通过GPIO给Arduino控制信号来决定关闭还是打开蜂鸣器,不过这样又多了一些工作量,纠结呀。

参考资料


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘使用香蕉派M3驱动无源蜂鸣器’

仰望星空

从什么时候开始,我们都成了低头一族了呢?无论是在等车时,还是在走路时。

我们甚至忘记了头顶还有一片星空,好吧,其实由于云彩的缘故,我只能看看寥寥的几颗星。

其实即便是漫天星光,我的手机也拍不出来,尽管有单反相机,但是除了傻瓜模式我根本不会用。

那就随便用手机拍几张照片假装我在仰望星空吧,假装过后,继续低头看手机😳。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘仰望星空’

香蕉派M3 GPIO点亮LED (下):一些补充内容

之前的两篇文章详细讲述了如何使用香蕉派版本的RPI.GPIO来控制香蕉派M3的GPIO点亮LED。

其实控制香蕉派的GPIO还有好多种方法,比如说使用香蕉派版本的Wiring Pi或者直接插入gpio-sunxi.ko内核模块后,直接读写设备来实现。

cd /lib/modules/3.4.39-BPI-M3-Kernel/kernel/drivers/gpio
sudo insmod gpio-sunxi.ko
cd /sys/class/gpio_sw

就可以看到一大堆类似如下的目录(链接)

进到针脚对应的目录,就可以直接操作data啦,至于这些都对应哪个针脚,要去对照原理图,我就不去细挖了。

学知识要避免两个极端,一是不求甚解,二是太求甚解。有时候研究研究就忘记了自己原本是要做什么,所以要牢记初心,避免自己走得太远偏离了方向。

其实香蕉派还是非常好玩的,我找到我以前玩香蕉派时的一些图片:

看了一下1602的时钟,竟然已经过了4年半啦,时间过得真快啊。

相关链接

相关资料


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘香蕉派M3 GPIO点亮LED (下):一些补充内容’

大学校园走一走

大学校园走走,随手拍些照片,还是很美的嘛。

不多说了,上照片。



This page is synchronized from the post: ‘大学校园走一走’

香蕉派M3 GPIO点亮LED (中): 点亮LED

昨天的帖子中,我们已经介绍了如何安装香蕉派版本的RPI.GPIO,今天我们继续来看看如何使用RPI.GPIO点亮LED。

在点亮LED之前,我们先来看看如何接线,在接线之前,我们需要知道哪跟针可以用来做输出,比如如果我错误的选用电源针或者接地的针,那是万万不可以做为输出的。

M3 GPIO

还好香蕉派官网的页面里提供了香蕉派M3的GPIO的图示:

然而新问题来了,这个图示是40针没错,香蕉派M3上也是40针没错,但是是从哪个方向数起呢?

这时需要我常用的一副M3实物图立功啦,看到下图左上部分天线接口旁边的一个小三角号图标吗?哪个指向的针脚就是GPIO图示中的1。

LED连接

知道了怎么数之后,上边GPIO示意图中的绿色针脚我们就可以随便使用了。当然也不是其它颜色的针脚不可以作为输出,但是一般它们可能会有一些特定的用途比如用作UART或者SPI之类的,另外就是电源和地是不用用做输入输出的。

为了方便我们选择11针作为输出,之所以选择这个,是因为它旁边的9号针就是地,方便接线。我们将一只LED与一只220欧姆的电阻串联(之所以串联电阻是避免电流过大烧毁LED),并接到11号针以及9号针之间,注意LED的正极(长的脚)接11号针。

代码

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python`
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)

试着执行一下:

BPI: gpioLayout(25)
BPI: name[bpi-m3] gpioLayout(25)
enter to sunxi_setup
Traceback (most recent call last):
File “./test2.py”, line 7, in
GPIO.setup(11, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!

啥,竟然要root权限?好吧,或许需要root权限才更合理,否则随便哪个用户都可以控制岂不是乱套了。

sudo 与virtualenv的问题

因为我使用的是virtualenv,所以直接sudo python xxx的方式会调用系统python,导致找不到香蕉派版本的RPI.GPIO。

所以需要这样执行sudo指令:

sudo venv/bin/python test2.py

执行后输出类似如下内容:

也就是说会在11针交替(间隔一秒)输出高低电平,这时再去看我们的LED,是不是一闪一闪的啦?

相关链接

相关资料


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘香蕉派M3 GPIO点亮LED (中): 点亮LED’

维权维权

之前提过在京东第三方店铺预约了一台西门子的洗碗机,并花一元钱购买了店铺的一个链接商品,按店铺客服的说法,这样就可以在618当天享受不超过4299的抢购价格。


(图源 :pexels.com)

因为当晚比较累,要睡过头影响抢购,我特意咨询客服是否618当天都享受同样的优惠价格,客服表示一样的,这样我就放心地去睡了。

结果早晨起床一看,商品价格已经上调至5499,加上各种优惠也需要4699,联系客服,客服说只有在618前一小时才享受4299抢购的价格。

我当场拆穿客服的谎言,并将之前与在线客服聊天记录截图给客服,然后在线客服就不理我了。后来媳妇几分钟内淘宝下单了一台同款洗衣机,价格也不过是4299。

这事原本就想忍气吞声,不过想想就是我们经常性的忍气吞声导致这些奸商越发地肆无忌惮,于是最终还是去京东后台投诉了一下。

除了上述描述的情况外,添加了如下内容:

本人出于对京东的信任,选择在京东购买商品。

本人已经按商家的要求完成预约,理应享受商家承诺的优惠价格,商家胡乱调价,完全不顾预约形成的约定。在问题发生后,商家敷衍搪塞甚至不予理会。

商家行为辜负了我的信任,浪费了我的时间,严重伤害了我的情感,也影响了京东的声誉,应予以处理,避免再有类似恶劣行为发生!

商家继续敷衍了事,告诉我可以退我一元钱。😡 我是差一元钱的人吗?咋的也得赔我二元钱啊!

最后我申请京东介入,交易纠纷员给我打电话过来,向我表示了歉意,并表示会对商家予以处罚,并赠送了20元的京券。


(图源 :pexels.com)

讲真,京券啥的真无所谓,但是京东的态度还是让人很满意的,尤其是说到要处理商家(也不知道真假)。但愿真的会去处理一下,这样对消费者对京东甚至长远来看对商家都是好事。


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘维权维权’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×