声控灯
声控灯是通过声音控制开灯的技术,适用于使用声音控制开灯的场景,特别是楼宇、住宅楼的公共场合,例如楼梯间、走廊、大厅等场所,它可减少人工开关电灯的麻烦,解放您的双手,可避免您的双手接触公共开关,降低接触细菌的可能,同时把灯的状态上报至云端,灯的管理者可实时查看灯的状态信息。
简介
本案例介绍的声控灯是通过声音控制开灯一个解决方案,具备使用简单、开发成本低、节能环保等特点。本案例为了更好玩使用了RGB LED,每次开灯颜色都会变化,并把灯开关的状态上报至云端,云端可以实时查看灯的状态。
背景知识
声音传感器是充当收音的作用,用来接收声波,使话筒内的驻极体薄膜震动导致电容的变化,产生0-5V的微小电压,经过A/D转换被数据采集器接收。
RGB LED是红绿蓝三色混光而成,在光的混色上,具备更多元的特性。
准备
ESP32开发板一套
声音传感器一个
RGB LED一个
母对母杜邦连接线若干
涉及到的硬件购买链接如下,仅供参考,不负责商家发货的品质保障等问题!
名称 数量 参考链接
ESP32开发板 1套 ESP32开发板一套
RGB LED 1个 RGB LED
声音传感器 1个 声音传感器一个
母对母杜邦线 7根 母对母杜邦线 请选用10cm长即可
硬件连线图
硬件连线图如下图所示:
物联网平台开发
开通公共实例
对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。
在物联网平台中,左上角选择“华东2-上海”,点击“公共实例”,即可开通。
开通物联网平台功能之后,需要完成下面的3个步骤完成云端设备的设定:
创建云端产品
创建产品属性(物模型)
创建云端设备(获取三元组)
创建云端产品
点击上图中的“公共实例”,即可进入控制台进行产品创建。然后,点击创建产品按钮,如下图所示。
选择之后,点击“确认”按钮,即可完成产品创建。如下图所示
创建产品属性(物模型)
点击前往定义物模型后,调整至下面页面,如下图所示。
点击编辑草稿,导入物模型文件点击下载物模型文件,直接导入后选择发布上线,如下图所示。
创建云端设备(获取三元组)
在产品列表页面中,点击“管理设备”,就会进到设备管理页面。
在“设备”页面点击“添加设备”按钮,在“添加设备”页面中设定“deviceName”,这里开发者可以自己填入自己想设定的设备名称,如下图所示。
设备添加完成后,如下图所示。
获取设备三元组
如下图所示,在设备列表中点击“查看”按钮,就可以看到设备的三元组信息。
设备三元组是指产品Key(productKey)、设备名称(DeviceName)、设备秘钥(DeviceSecret)。
三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。设备三元组在后面设备端开发时会用到,请注意保存。
设备端开发
开发环境
在进行下一步之前请确保ESP32开发环境已经搭建完毕。详情请参考ESP32开发环境的说明。
创建解决方案
如下图所示,打开VS Code之后在新建一个基于helloworld的python工程,设定好工程名称(“sound_led”)及工作区路径之后,硬件类型选择nodemcu32s,点击立即创建,创建一个Python轻应用的解决方案。
下载本案例代码并解压将所有文件复制后覆盖“sound_led”工程根目录原有文件,然后进行如下设定完成设备端代码的开发。
Python脚本的详细说明请参考脚本内嵌的文字注释
修改路由器名称及密码
修改sound_led工程里main.py中SSID和PWD的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在''符号中间)。
# Wi-Fi SSID和Password设置
SSID='Your-AP-SSID'
PWD='Your-AP-Password'
修改完成之后connect_wifi函数就会连接读者自己设定的路由器。
修改设备的三元组信息
把“获取设备的三元组”章节中获取的三元组信息填入main.py中:
# HaaS设备三元组
productKey = "Your-ProductKey"
deviceName = "Your-devicename"
deviceSecret = "Your-deviceSecret"
修改LED灯颜色
在sound_led工程里main.py,set_color_reference函数里,修改gLedColor值即可达到修改灯颜色目标。
# RGD灯颜色设置
gLedColor = 0xff0000
调整开灯的声音阈值
在sound_led工程里main.py,sound_thread()函数里,修改gDecibelValue值即可达到调整开灯灵敏度,代码里的值是根据工作环境定义的经验值,开发者可根据自身情况定制修改。
调整开灯的时长
在sound_led工程里main.py,sound_thread()函数里,修改led_open()函数下面的utime.sleep_ms(6000)来控制每次亮灯时间(1000代表1秒钟)。
# 声音采集线程
# 声音采集线程
def sound_thread():
global gOpenLed
print('启动声音采集线程')
decibelValue = 0
while True:
# 采集声音
decibelValue = get_decibel()
# 判断分贝
if decibelValue > gDecibelValue and gOpenLed == False:
print("声波转换后的值%s"% (decibelValue))
gOpenLed = True
# 开灯
led_open(set_color_reference())
# 亮灯6秒
utime.sleep_ms(6000)
# 关灯
led_close()
gOpenLed = False
# 监听获取声音的频率,间隔不能太长,延迟大会导致不精确
utime.sleep_ms(10)
运行程序
推送此脚本到设备之后,串口会周期性的打印日志,设备上通过串口打印的信息如下图所示。
Wi-Fi is connecting...
Wi-Fi is connected
IP: 192.168.3.226
NTP start
NTP done
establish tcp connection with server(host='a1HOXQ1AMTs.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
link platform connected
启动声音采集线程
声波转换后的值1540
开灯
属性上报成功
关灯
属性上报成功
云端查看
进入阿里云官网,用阿里云账号登录物联网平台查看状态
到此为止,声控灯案例就已经完成了。如果想学习更多实验,请参考HaaS案例实践详解。
后记
笔者这里以一个声控灯为例进行介绍,建议读者可以尝试把多个声控灯的状态一起上报,使用IoT Studio制作一个控制面板对所有灯的状态进行展
来这里探索更多有趣案例
HaaS开发框架
HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。
https://haas.iot.aliyun.com/solution
————————————————
版权声明:本文为CSDN博主「HaaS技术社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HaaSTech/article/details/124228671