目录

前言

一、设备准备

二、改造USB宿舍书桌灯

1.原理

2.将控灯板子的护壳拆开

3.在控灯板子供电端的GND焊上一根杜邦线

4.将每个触发脚焊上杜邦线

三、代码讲解

1.首先初始化一下控灯的GPIO口;

2.编写几个控灯GPIO口的工作状态;

3.将灯的默认状态放入main函数的while循环内。

4.在相应的控灯语音部分添加控灯语句;


前言

前面几个章节,我们介绍了LD3320语音识别模块、SYN6288语音合成模块和DHT11温湿度传感器模块,并开发了基于STM32的语音识别查询温湿度小项目,但还是比较简单,所以我专门去淘宝买了一块USB的宿舍书桌LED灯,将其改造一波,让我们能够通过语音命令就能控制LED灯。


一、设备准备

STM32F103C8T6、LD3320语音识别、SYN6288语音合成模块、DHT11温湿度传感器、STLink下载器、胶水(有条件的用电烙铁)、杜邦线和淘宝购买的USB宿舍书桌LED灯(下图所示)。

二、改造USB宿舍书桌灯

1.原理

淘宝购买的USB宿舍LED灯的打开关闭、亮度调节、冷暖色调节都是由控灯芯片结合外部按键电路实现的,相应按键按下,控灯芯片实现相应功能,所以我们可以对控灯芯片外部电路做个小小改造一下,让STM32的IO引脚越过按键,直接给控灯芯片控制信号(一段低电平信号),如下图所示(PA2控制打开关闭,PA5提高灯光亮度,PA4降低亮度,PA3改变灯光颜色)

2.将控灯板子的护壳拆开

USB宿舍书桌灯的控灯电路板被外部护壳保护着(下图红色框),所以我们要将其拆开。

拆开后,电路板正面是这样子(忽略图中的焊接的杜邦线)。

背面是长这样子的(忽略图中焊接的杜邦线)。

3.在控灯板子供电端的GND焊上一根杜邦线

在供电端的GND引出的一根线(上图所示),有两个作用:

1.其是与STM32上的GND引脚相连接实现共地(不共地,STM32控制不了灯),

2.可以用这根引出的GND线去触碰控灯电路板上每个按键的四个脚,哪个按键脚被触碰时,灯的状态能做出相应改变,那么这个按键脚就是可以我们可以越过按键直接给控灯芯片控制信号的脚(后面我们称其为触发脚),按照下面视频方法找到触发脚。(LED灯要上电)

用GND线找到触发脚

4.将每个触发脚焊上杜邦线

找到每个按键的触发脚后,焊上杜邦线,如下图所示(说明:图中控制降低亮度的杜邦线断了)。

然后杜邦线的另一端直接与STM32的IO口相连接(如下图所示),这样,只要STM32相应IO口输出一段低电平,就可以实现相应的控灯效果了。

三、代码讲解

代码方面也是比较简单,只要在第四章的代码中增加几句控灯语句就可以了。(第四章链接STM32+LD3320+SYN6288+DHT11实现语音获取温湿度数值(下))

1.首先初始化一下控灯的GPIO口;

初始化与控灯芯片相连接的GPIO口,这里我用的是PA2、PA3、PA4和PA5,大家可以根据自己的实际情况做出更改。

void led_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; //PA2 PA3 PA4 PA5GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA}

2.编写几个控灯GPIO口的工作状态;

这里说明一下,任何时候与控灯芯片相连接的四个GPIO口最多只能有一个GPIO口输出低电平信号来控制控灯芯片。(这就好比你同时按两个或三个按键,这肯定是不正常的操作,正常只能按一个按键来控灯)。还有就是当PA2控制灯关闭后,其他三个GPIO口的控制是没有效果的,毕竟灯都关了,还怎么调节亮度和颜色。

//每个与控灯芯片连接的IO口默认输出高电平
void led_default(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_5);
}
//PA2输出500毫秒低电平,控制打开关闭
void led_onoff(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_2);delay_ms(500);
}
//PA3输出500ms低电平,提高亮度
void led_raise(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_3);delay_ms(500);
}
//PA5输出500ms低电平,降低亮度
void led_down(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_5);delay_ms(500);
}
//PA4输出500ms低电平,改变颜色
void led_change(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_4);delay_ms(1000);
}

3.将灯的默认状态放入main函数的while循环内。

没有控制LED灯时,与控灯芯片相连接的四个GPIO口保持高电平。

while(1){led_default();  //没有控制按键时,保持默认状态switch(ASR_Status){case LD_ASR_RUNING:                          case LD_ASR_ERROR:                          break;                      case LD_ASR_NONE:{ASR_Status=LD_ASR_RUNING;if (RunASR()==0) {ASR_Status = LD_ASR_ERROR;}break;}case LD_ASR_FOUNDOK:                                                                                 {nASR_Res = LD3320_GetResult();     //获取结果                                              User_Modification(nASR_Res);ASR_Status = LD_ASR_NONE;break;}case LD_ASR_FOUNDZERO:default:{ASR_Status = LD_ASR_NONE;break;}} }

4.在相应的控灯语音部分添加控灯语句;

在识别码 CODE_1KL1、CODE_1KL2、CODE_1KL3、CODE_1KL4下添加相应控灯语句。(为什么在这几个识别码下添加,可看第三章 LD3320语音识别模块的使用)

void User_Modification(uint8_t data)
{if(data == CODE_CMD)               // CODE_CMD:"xiao jie"的识别码{flag=1;SYN_FrameInfo(0, "[v16][m0][t5]主人,我在");}else if(flag){flag=0;switch(data)              {case CODE_DMCS:                // CODE_DMCS:"ni hao ya"的识别码    SYN_FrameInfo(0, "[v16][m0][t5]你好");break;case CODE_CSWB:           // CODE_CSWB:"zai gan ma ne"的识别码SYN_FrameInfo(0, "[v16][m0][t5]在学习");break;                     case CODE_1KL1:     //CODE_1KL1:"kai deng"的识别码,往下以此类推//执行开灯操作,并回答“已为你打开灯” led_onoff();SYN_FrameInfo(0, "[v16][m0][t5]已为你打开灯");break;case CODE_1KL2:   //执行关灯操作,并回答“已为你关闭灯”led_onoff();SYN_FrameInfo(0, "[v9][m0][t5]已为你关闭灯");break;case CODE_1KL3: //执行调亮操作,并回答“已为你提高亮度”led_raise();SYN_FrameInfo(0, "[v9][m0][t5]已为你提高亮度");break;case CODE_1KL4:   //执行变色操作,并回答“已为你改变颜色”led_change();SYN_FrameInfo(0, "[v9][m0][t5]已为你改变颜色");break;case CODE_2KL1:  //回答“温度是XX摄氏度”Read_DHT_Data(wendu,shidu);   //读取温湿度值Tempconverspeech(wendu,shidu,0x01);break;case CODE_2KL2:    //回答“湿度是百分之XXRH”Read_DHT_Data(wendu,shidu); //读取温湿度值Tempconverspeech(wendu,shidu,0x02);break;case CODE_2KL3:    //执行打开风扇操作,并回答“已为你打开风扇”SYN_FrameInfo(0, "[v9][m0][t5]已为你打开风扇");break;case CODE_2KL4: //执行关闭风扇操作,并回答“已为你关闭风扇”SYN_FrameInfo(0, "[v9][m0][t5]已为你关闭风扇");break;                                case CODE_3KL1: //执行开门操作,并回答“已开门”SYN_FrameInfo(0, "[v9][m0][t5]已开门");break;case CODE_3KL2:   //执行开门操作,并回答“已关门”SYN_FrameInfo(0, "[v9][m0][t5]已关门");break;case CODE_5KL1:   break;default:break;}}
}

怕有些同学看文章了之后不知道怎么添加到第四章的代码中,所以我把写好的代码放在我的公众号里了,关注下方公众号发送语音控灯就可以获取资料链接了。按照资料链接里的接线图把每个模块用杜邦线连接好,然后把代码烧录进入就愉快的玩耍了。

效果视频:(忘记使用语音指令“太暗了”,有兴趣的可以买模块自行尝试)

控灯


第五章 STM32+LD3320语音识别控制淘宝USB宿舍书桌灯相关推荐

  1. 【正点原子STM32连载】第五章 STM32基础知识入门 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  2. 开源大师章文嵩打造低碳淘宝 称技术人才创新很重要

    [url]http://job.taobao.com/zhaopin/channelScreen.php?channelId=18#detail-7[/url] 开源大师章文嵩打造低碳淘宝 称技术人才 ...

  3. 淘宝、小红书回归“真实”,虚假营销会否成为过去式?

    评价,或许是在网购平台购物.本地生活消费,都能碰见的一种现象. 但大多数用户觉得麻烦.或是不方便,便没有对消费进行评价,而面对商家的"蝇头小利".返现.或是赠送等等,不少用户还是忍 ...

  4. 第四章 STM32+LD3320+SYN6288+DHT11实现语音获取温湿度数值(上)

    前面三章,我们介绍了LD3320.SYN6288和DHT11温湿度传感器,并把代码资料一一分享给大家了,拿到代码后,我们就可以做一个简单的语音识别毕设了,即通过语音命令获取当前环境的温湿度数值,(但还 ...

  5. KnockoutJS 3.X API 第五章 高级应用(2) 控制后代绑定

    注意:这是一种高级技术,通常仅在创建可重用绑定的库时使用. 默认情况下,绑定仅影响它们应用到的元素. 但是如果你想影响所有的后代元素呢? 为此,只需从绑定的init函数中返回{controlsDesc ...

  6. 中科大郑烇、杨坚《计算机网络》课程 第五章笔记

    第5章:网络层控制平面 本章目标:理解网络层控制平面的工作原理  传统路由选择算法  SDN 控制器  ICMP:Internet Control Message Protocol  网络管理 ...

  7. 淘宝章文嵩:开源价值很大,但我也算不出来有多大

    在今年12月4日的Velocity China Web性能与运维大会上,阿里集团的章文嵩博士(淘宝正明)再次以大会主席的身份在台上进行了分享,今年分享的主题是阿里集团的开源成果以及开源流程的介绍.借着 ...

  8. 揭秘淘宝286亿海量图片存储与处理架构,互联网营销

    [IT168 专稿]8月27日下午,在IT168系统架构师大会存储与系统架构分论坛上,淘宝网技术委员会主席,淘宝网核心工程师章文嵩向我们详细介绍了淘宝网图片处理与存储系统的架构.章文嵩博士的演讲日程包 ...

  9. 2019年为什么都说现在的淘宝客越来越难做?很多人都说谁做淘客谁傻?

    首先我们来分析下原因吧!有很多人都先入为主,对淘客期望过高: 淘客的疯涨大概也就是这两年的事吧!这个行业感觉被大家推成了一个众人皆知的网赚行业. 1.投入低:因为无需本金投入,无需售后,佣金不俗,只需 ...

最新文章

  1. 图片识别文字, OCR
  2. python计算两个数乘积_如何用PYTHON使两个数字总和变成乘积
  3. Nginx模块之SessionSticky
  4. 【渝粤教育】 国家开放大学2020年春季 1039高级财务会计 参考试题
  5. 动手学CV-目标检测入门教程3:锚框(anchor)
  6. jdbc的小结 mysql
  7. 7-3 服务器统一出错处理
  8. Linux 批量创建用户及设置随机密码
  9. Chrome电脑免安装多个浏览器版本号共存
  10. 这3款在线PS工具,得试试
  11. Android面试题4
  12. Matlab图片预处理——截取图片中有效部分保存在其余文件夹下
  13. Bootstrap级联下拉菜单,你肯定用得到
  14. html播放本地flv
  15. ios-唯一标识符及Keychain共享
  16. RESTful HTTP中对POST,PUT,PATCH的区别
  17. 海康威视工业相机海康机器人 Python开发采集数据、保存照片PyQt显示
  18. clamav Java_杀毒软件包clamav部署-CentOS6.5
  19. 怎样反汇编bzImage
  20. 下载android版本到手机通讯录,和通讯录下载-和通讯录 安卓版v6.0.4-PC6安卓网

热门文章

  1. grafana使用教程之API key
  2. 从keystore中导出私钥key
  3. 迁移jira后,confluence不能登录解决方法
  4. 打印机通过手机实现打印 (共享办公外部用户使用指引) 这里介绍到 苹果手机 安卓手机 手机打印复印 内外部用户打印复印扫描
  5. Adobe有哪些软件?除了这些软件外,对于Adobe您还了解多少?
  6. 互联网漫画2022年全球行业分析报告
  7. 在html 背景图片的大小,网页背景图片的大小的代码是什么
  8. 华为OD题目: 相同数字的积木游戏1
  9. 测试行业本科应届生薪资大概是多少?外行人15k垫底25k是人均水平...
  10. 批量检测六间房直播状态