SmartSpeaker

这是一个基于云端语音识别的智能音箱,你可以理解为类似于亚马逊Echo或者小爱同学、天猫精灵的设备,与之不同的是它并非基于嵌入式Linux,而是仅仅基于单片机和FreeRTOS实现。

该设备的核心芯片为stm32f407vet6,wm8978,esp8266,这三者分别扮演主控,音频DA/ADC以及网络通信的角色。另外还需要SD卡来提供存储录音和音乐的功能。

该项目目前的瓶颈在于由于esp8266是一款物联网wifi芯片,其网络带宽有限,导致识别的速度偏低, PS:其实也还说的过去,毕竟录音的文件也不是很大:),并且导致在线播放音乐的功能无法实现(这是最伤的)。

但这应该也是目前基于单片机的最好的实现方案了,运行效果。

Description

Audio目录下主要存放音频相关的代码,比如wm8978的驱动,解码,播放以及录制音频的功能。其中包含了一个第三方的mp3解码库“HelixMP3Decoder"。

Fatfs目录下主要存放Fatfs文件系统的代码,它需要基于SD卡实现。

File目录下存放系统的原理图,同时还是有一个“SmartSpeaker”目录,需要将这个目录拷贝到SD卡根目录下,这个目录里都是些用来提示的wav文件。

FreeRTOS目录下存放的是FreeRTOS的代码。

Led目录下存放的是一个根据识别的结果操作Led的实例,在播放音乐的时候,还会对音乐进行频谱分析,从而改变Led的颜色。

Libraries目录下存放是是stm32f4系列的一些库文件。

MDK为工程文件的目录。

Network目录下存放的是与网络操作相关的代码,比如esp8266的串口驱动的封装,编解码,网络通信等等。

Peripherals目录下存放的是stm32f4相关的外设的驱动代码,其中一些与FreeRTOS结合相当紧密,例如串口的驱动。

Public目录下存放的是一些基础的功能函数,比如日志功能等。

Shell目录下存放的是一个简单的人机交互的实现,正因为有了这些代码,我们可以借助Xshell等通过串口登陆stm32,并且可以实现一些简单的命令操作,就像操作Linux系统一样。而且,移植这个Shell非常简单,你只需要底层提供getchar,putchar以及puts这三个功能函数。

Usage

为了连接WiFi,你需要在"network.c"文件中配置你的WIFI网络。

为了接入百度云的语音识别服务,你需要去注册百度语音的开发者账号,并且得到他的token,你需要在"netvoc.c"中配置这个token。

Flow

在硬件初始化完毕,FreeRTOS启动完毕后,wm8978开始收集环境中的音频信号。这里采用了一个基于短时过零率和声波能量的简易的VAD算法,用于实现自动录音。录音完毕后,将录制的语音文件发送至百度云的语音识别服务器进行识别,并接收识别的结果,然后根据结果执行相应的操作,比如播放一首音乐等,高度可拓展。

GitHub - ErnestChen1/SmartSpeaker: 一个基于云端语音识别的智能控制设备,类似于天猫精灵,小爱同学。采用的芯片为stm32f407,wm8978,esp8266。...相关推荐

  1. maven多模块项目部署到服务器,GitHub - baxias/foweb: 一个基于 Spring+SpringMVC+Mybatis 的Maven多模块项目。(实现前后端分离的服务器端)...

    Foweb Framework A multi-modules maven project base on Spring+SpringMVC+Mybatis. 一个基于 Spring+SpringMV ...

  2. 实现一个基于主存的虚拟块设备驱动程序_存储器的层次结构:寄存器、高速缓存、主存、本地磁盘...

    存储技术:不同存储技术的访问时间差异很大.速度较快的技术每字节的成本要比速度较慢的技术高,而且容量小. 一种组织存储器系统的方法,成为存储器层次结构(memory hierarchy).如下图所示,是 ...

  3. 天猫精灵 python 控制_一个让小白也能让HomeAssistant接到天猫精灵的组件

    [简介] 通过使用此组件可以实现用语音让天猫精灵控制家里已经连上HA的硬件. 本组件不会上传用户所绑定天猫精灵的手机号和密码到服务器上, 而是将其通过SHA1哈希算法生成token来与阿里平台交互, ...

  4. L3MON搭建(基于云端的远程安卓管理套件)

    免责声明 本文章只提供学习交流和技术分享,禁止用于进行一切不合法行为,软件本为开源,本人只是介绍安装技术,如果进行违法犯罪活动与本人无关,请大家遵纪守法,做合法公民,健康上网,远离犯罪. 软件介绍 L ...

  5. 实验六 实现一个基于内存映射的设备驱动程序

    实验六 实现一个基于内存映射的设备驱动程序 目录 实验六 实现一个基于内存映射的设备驱动程序 实验环境 一.实验目的 二.实验内容 三.实验步骤 四.实验总结 实验环境 操作系统版本:ubuntu-1 ...

  6. 自己动手做一个小爱同学温湿度传感器(成本八块左右)

    自己动手做一个小爱同学温湿度传感器 1.开发环境简介 2.开发思路 3.程序编写 (1)将点灯科技库文件和DHT11模块库文件导入Arduino的libraries文件夹. (2)下载点灯科技APP, ...

  7. 如何训练一个简单的语音识别网络模型---基于TensorFlow

    这篇文章是翻译自Google的教程:还有一部分没完成,但今天上去发现登录不了,只好先发这部分上来. 欢迎有兴趣学习的朋友,与我交流.微信:18221205301 如何训练一个简单的语音识别网络模型 准 ...

  8. Scaffold php,GitHub - yiiplus/scaffold: scaffold是一个基于Yii2高级项目模版工程化实现的应用程序...

    Yii 2 Scaffold Project Kit 易加-脚手架(scaffold)是一个基于Yii2高级项目模版工程化实现的应用程序,它将更加高效.规范和工程化的满足项目开发的需求. DIRECT ...

  9. WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

    最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架 ...

最新文章

  1. laravel多种安装方法
  2. git钩子放服务器_linux服务器布置git 并带钩子
  3. 内容处理和分发中的算法应用探究
  4. 明确需求与功能,优化小打卡的分享刺激点
  5. 【Linux】Linux-路径切换-相对路径和绝对路径快捷键记录linux 知识点记录
  6. Archive object standard check
  7. 小米蓝牙左右互联_解决不同品牌智能家居的兼容问题,小米米家智能多模网关发布...
  8. 【中生代技术社区内推】
  9. 基于vue-cli 将webpack3 升级到 webpack4 配置
  10. Oracle RMAN完全恢复案例(二)
  11. 浅谈串口DCB流控制设置
  12. 软件工程c语言课程设计的作用,C语言课程设计指导书2016版HNUST
  13. RT-Thread邮箱
  14. 智能化酒糟池测温技术方案
  15. adobe scout cc 2015中文版下载(附使用教程)
  16. Linux Shell查找下一个
  17. 在阿里云上搭建私有GIT仓库
  18. 去除android手机信号图标
  19. 【无标题】每个人女人,都需要一面黑色的镜子
  20. 软件工程作业---结对编程の九宫格拼图扩展

热门文章

  1. Nginx 404 500
  2. MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
  3. Assets和Raw区别
  4. (转载)Dig命令的用法
  5. 揭秘成为最牛程序员的五大要诀
  6. Lucene入门与使用(一) [转]
  7. Bailian4136 矩形分割【差分】
  8. HDU2564 词组缩写【文本】
  9. JSK-27 三值排序【贪心】
  10. 计算最大值和最小值(分治法)