龙空技术网

树莓派控制LED灯实现闪烁:软硬结合才是硬核

IT男 156

前言:

此刻同学们对“树莓派报警器”可能比较关注,兄弟们都想要知道一些“树莓派报警器”的相关内容。那么小编在网络上搜集了一些有关“树莓派报警器””的相关知识,希望你们能喜欢,朋友们一起来学习一下吧!

这是一篇很跨界的技术文章。我自幼喜欢文学,大学专业选了嵌入式工程,工作岗位搞起人工智能软件。

一直以来,我都在考虑人工智能的落地应用。

AI那么多能力,又是图像识别,又是文字分类,企业拿它来卖钱,那你能拿它干啥呢?它又能给我们普通人带来什么呢?

树莓派是什么?

我收拾房间,找到了一个小盒子。这是一个旧版本的树莓派(raspberry pi)设备。

这个手掌大小的设备,通俗地讲就是一个小电脑主机。一些智能小车啥的,一般会拿它当“大脑”来用。

这个设备还是一个叫“楼神”的同事送我的。因为我比较喜欢做一些小发明,发到朋友圈。比如下面这个,这是一个特殊的小灯:只要有光它就亮,没有光它绝对不亮

很搞笑是吧!但是,如果我把小灯换成警报器呢?它就变成只要有人拿手电照它,它就会报警。因此,看事情要看技术。

几年前,楼神离职,他把这个树莓派就放到了我工位。他留言说:“赠与有缘人,是个好归宿!”

后来,我又买了一些配件,比如摄像头、电阻、电容等。

玩转树莓派设备

嵌入式出身的我,搞一些基本操作还是无压力的。

你让它显示1、2、3,不借助框架,绝对不是print(1)print(2)print(3)那么简单。

恰巧我也懂软件。所以就结合软件,做了一些小玩意儿。

人员闯入通知

此系统实现了这样功能:只要感应到有人经过,就会拍照并给我发邮件,我的微信就能收到消息

其实它很简单,有三个部分组成:

红外人体感应器:我们人类(有生命)时刻会发出红外辐射。这个设备能捕获到这个辐射。不要觉得很高级,其实像温度计一样简单,它才几块钱一个。如果它感应到有人存在,会通过信号线告诉主机。摄像头:这个贵,几十块钱一个。它插入到主机后,主机可以调用摄像头进行拍照、录像。树莓派主机:它本身就是一个系统,能联网,能读取输入、控制输出。我在里面写了一些python程序。如果它收到红外感应器发来的信息,就调用摄像头拍照。拍照后,再通过邮件把照片发送到我的邮箱。邮箱是QQ邮箱,因为绑定了微信,所以就能收到微信通知。

这里面没啥高级技术。红外感应器和摄像头是硬件,都是模块化,插线就能用。

调用它们也很简单,都有对应的库。拿拍照来说,几行代码就能搞定:

import timefrom picamera import PiCamera # 导入库camera = PiCamera()try:    # 等待摄像头启动    time.sleep(2)    # 拍照保存为photo.jpg    camera.capture('photo.jpg')finally:    camera.close()

复杂一点的东西……自动发送邮件算吗?似乎也就下面这点python代码:

import smtplib # 导入库from email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagedef send_email(sender, receiver, subject, message, image_path):    # 创建一个多类型结果    msg = MIMEMultipart()    msg['Subject'] = subject    msg['From'] = sender    msg['To'] = receiver    # 添加文本内容    msg.attach(MIMEText(message, 'plain'))    # 添加图片内容    with open(image_path, 'rb') as f:        image = MIMEImage(f.read())    image.add_header('Content-Disposition', 'attachment', filename='image.png')    msg.attach(image)    # 发送邮件    try:        smtp_obj = smtplib.SMTP('smtp.example.com', 587)  # SMTP服务器地址和端口号        smtp_obj.starttls()  # 启用TLS加密        smtp_obj.login('your_username', 'your_password')  # SMTP服务器的用户名和密码        smtp_obj.sendmail(sender, receiver, msg.as_string())        smtp_obj.quit()    except smtplib.SMTPException as e:        print("邮件发送失败:", e)sender = 'sender@example.com'  # 发件人邮箱receiver = 'receiver@example.com'  # 收件人邮箱subject = '远程照片'  # 邮件主题message = '远程照片'  # 邮件内容image_path = 'photo.jpg'  # 图片路径# 发送send_email(sender, receiver, subject, message, image_path)

上面的代码,想要跑通,需要将发送邮箱做一下配置,因为自动发送需要开权限。

物品名称播报

后来,我将树莓派和人工智能结合了一下,做了个小玩意。

它实现了这样的功能:摄像头会识别所拍摄到的物体,并把识别结果通过扬声器进行语音播报(图上右下角有一个小音箱)。

受限于体积和成本,树莓派的性能毕竟不强大。物体识别我采用的是TensorFlow的Lite版本。语音合成调用的第三方API接口。

这里面,其实也没有太多高级的东西。我们都是无脑集成商。

两种实现LED闪烁的方法

研究树莓派的过程中,我发现了一个问题:硬件慢慢地被软件所蚕食,尤其是逻辑方面的东西

记得以前学电路的时候,想要实现一个LED灯的闪烁效果,那是相当费劲的。需要LED、电阻、三极管、电容等组成一个逻辑电路,像下面这样。

它的原理是利用电容循环充电、放电,实现闪烁。如果你想要开关,还得再加上开关元件。当时我以为这是最简单的方式了。即便你加芯片进行控制,那也只是将这类结构缩小到芯片里去了。它的基本逻辑在那里,你改变不了。

后来,我发现树莓派很容易就能实现“闪烁”这个功能。

所需要的元件只有树莓派加一个LED灯。其他的控制逻辑,都可以写到树莓派的代码里面,让系统去控制。

def flicker(): # 闪烁    PIN_NO = 12    GPIO.setmode(GPIO.BOARD)    GPIO.setup(PIN_NO, GPIO.OUT)    for x in range(20): # 循环20次闪烁        GPIO.output(PIN_NO, GPIO.HIGH)        time.sleep(0.5) # 每次间隔0.5秒        GPIo.output(PIN_NO, GPIO.LOW)        time.sleep(0.5)    GPIO.cleanup()def on(): # 打开    PIN_NO = 12    GPIO.setmode(GPIO.BOARD)    GPIO.setup(PIN_NO, GPIO.OUT)    GPIO.output(PIN_NO, GPIO.HIGH)def off(): # 关闭    PIN_NO = 12    GPIO.setmode(GPIO.BOARD)    GPIO.setup(PIN_NO, GPIO.OUT)    GPIO.output(PIN_NO, GPIO.LOW)    GPIO.cleanup()flickBtn = tkinter.Button(top, text="闪烁", command=flicker)flickBtn.pack() # 闪烁按钮onBtn = tkinter.Button(top, text="开", command=on)onBtn.pack() # 开按钮offBtn = tkinter.Button(top, text="关闭", command=off)offBtn.pack() # 关闭按钮

树莓派有40个小触手。就是下图红框处的那两排小针。

这些小针,我们可以通过代码控制,可以读取,也可以写入。

上面的例子,我就是操作的第12号针,因此PIN_NO = 12

GPIO.setup(PIN_NO, GPIO.OUT)是设置输出。

GPIO.HIGH是高电平,GPIO.LOW是低电平。

第12号针,循环间隔一高一低,就实现了闪烁的效果。

看!逻辑全在软件里面了。硬件被蚕食得只剩下了一个“大脑”和一个LED灯。

从硬件到软件,重返硬件

农业时代,机械的出现,大大提高了生产力水平。

比如下面这个是一个计算器。嗯!你没看错,它确实是计算器,能进行数学运算,它叫“机械计算器”。

当你计算69+32时,他的内部真的是在通过齿轮和传送带去计算两者的和。

后来,电子计算器出现了。它是通过集成电路去实现的,计算逻辑已经电子化了。这种设备可以装在口袋里。

再后来,又进步了。计算器可以看得见,但是摸不着。它就是计算器软件。你不用花钱,免费用。访问一个网页链接或者打开一个APP,就可以使用它强大的功能。

当然,要使用它,你得有智能手机或者电脑,还得有电,得有网,符合以上条件的同时,智能设备也得在身边。

机械计算器有设备就能计算,电子计算器开始额外要求有电池,到软件计算器,依赖更加严重了。

软件很厉害,他能将大化小,把有变无。甚至能将一个图书馆装到口袋里面去。但是它毕竟是软件,太软,严重依托于系统,其本质只是数据。就像你的财富,只是银行卡里的一串数字。脱离了系统,它嘛也不是。

看那些纯机械的计算器,经过几十年,现在依然能用。但是,你的iphone4现在还能开机吗?

科技确实在发展和进步,更在进行虚拟化、数字化。但奇怪的是,纯互联网的风口已经慢慢远去。而今,很难靠一个网站就能拉来投资。招投标也慢慢重视你有哪些配套的硬件设备。几支智能笔?几个音响?几个扫描仪?大家又开始相信看得见摸得着的东西了。

目前是一个由硬到软,再由软慢慢返硬的时代。

我觉得这是理性的。就像生物界,要想像人类一样强大,不仅要有聪明的大脑,还得有灵活可控的肢体。

标签: #树莓派报警器