草庐IT

硬件开发——语音模块开发 (包含语音识别模块代码等资料包 )

Refuel.CONG 2023-04-08 原文

一、语音模块以及硬件模块开发的行情

硬件模块的开发——常用:语音模块

语音模块STC11L08XE

比如

  • 人脸识别打卡器——虹膜识别(购买方式)
  • 语音识别(购买方式)
  • 车牌识别(购买方式)
  • 华为手机(购买方式)

拿到硬件开发,首先要资料

一、语音识别模块参数

  • 型号:YS-LDV7
  • 名称:一体化语音识别模块
  • 规格:43*29.7MM
  • 供电电压:5V (内部工作电压 3.3V)
  • 待机电流:30MA
  • 识别时电流:45MA
  • IO 口输出:高电平为 3.3V
  • 通信方式:串口通信5V TTL 电平,不可直接接 RS232、RS485)
  • 单片机参数:型号 –>STC11L08XE 、flash–>8k、SRAM–>1280、eeprom–>32k
  • 识别词条个数:50句
  • 工作温度:-20 至 60℃

单片机参数:STC11L08XE

二、模块结构介绍

本模块实际原理为 1 片 STC11 单片机+1 片 LD3320 组合形成的一款语音识别模块,语音识别部分已写好驱动程序,用于只需要对 STC 单片机进行编程加入自己的识别语句和控制程序即可,语音识别部分无需理会和做编程处理。
本模块具备 1 个 5V TTL 串口16 个单片机 IO 口的引出,可与外部单片机进行通 信交互信息亦可控制继电器等设备。

三、串口连接图

本模块的串口如下图所示,从下至上的 5 根针分别为 GND、RXD、TXD、 5V、3.3V,其中 RXD 和 TXD 为实际内部单片机的串口接收和发射端口,故与 外部串口设备连接时要注意 RXD 接 TXD 的交叉接法。3.3V 的口为输出口, 可用于外部设备的供电利用,一般未用上直接忽略不用即可。
下图为 USB 转 TTL 与语音模块的连接方法,如与其他单片机 或者其他设备的连接时注意串口电平需要为 5V,与语音模块电平一致,如电平不一致可加入串口电平转换模块否则将导致通信异常甚至损坏设备端口。

四、验货测试方法

本模块在出厂前已经下载了口令模式版本的程序,收到货后可进行初步的测试。
口令模式需要先按一级口令识别成功后才能继续喊二级口令以此循环
内部默认的口令如下:
一级口令:小杰
二级口令:代码测试

  • 开发板验证

  • 开灯

  • 关灯

  • 北京

  • 上海

  • 广州

详细测试流程如下:

  1. 首先在电脑上安装“USB 转 TTL 驱动
  2. 根据以上串口连接图将 USB 转 TTL 模块与语音模块连接好
  3. 插入电脑 USB 口(注意不要加 USB 延长线直接插到主机的 USB 口)
  4. 打开“STC-ISP 下载软件”里面的串口助手
  5. 根据下图选择好各个选项:其中串口号可通关查看–我的电脑–设备管理器–端口)


另外我们打开软件串口后,我们可以拔下 GND 再把 GND 插上,这样重新上电可以看到接收串口会打印出相关的识别口令。

  1. 以上步骤都准备好后,我们距离模块的麦克风 50cm 左右,以正常的发音速度和音量进行识别,
  2. 第一句喊口令为:小杰 如识别正确,则模块 D1 指示灯将亮起,软件也将输出”收到”二字。
  3. 如没有 任何反应可以尝试再次发音,注意手不要碰到模块的线路。可以夹 住板边

最强代码阅读器sourceInsight工具

二、语音识别模块代码分析

语音识别模块资料包
链接:https://pan.baidu.com/s/1xkwbDIDrUeOck4Q6E4bC2w
提取码:jkdj

我们要想让语音模块识别我们想要的命令,就要改变固件代码。或者AT指令

总结主函数

void ExtInt0Handler(void) interrupt 0 中断处理函数
	当LD3320识别成功后,会引发IO口中断
	nAsrRes = LD_GetResult();		/*获取结果*/
	User_handle(nAsrRes);//用户执行函数 


main{
	Led_test(); 开机闪灯3MCU_init(); 单片机本身初始化,开启中断
	LD_Reset(); ld3320初始化
	UartIni(); /*串口初始化*/
}
	while(1){
		RunASR(); 启动识别
			LD_AsrStart();
				LD_Init_ASR();厂家提供的启动时序代码
		LD_AsrAddFixed(); 向LD模块添加关键词
		LD_AsrRun();  	运行ASR 启动ASR运算(“开始识别”)
			ProcessInt0();  判断识别是否有结果
	}

1. LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c

2. 识别出结果后,把数据从语音模块发出来!void 	User_handle(uint8 dat)  main

修改代码

1.修改 LD_AsrAddFixed(); 向LD模块添加关键词 在LDchip.c


2. 修改 识别出结果后,把数据从语音模块发出来!void User_handle(uint8 dat) 在main.c里

然后编译成功,我们插入模块,打开STC进行烧录代码,(记得烧录时候,拔开GND,在插入,重新上电),打开串口助手,进行测试。

有关硬件开发——语音模块开发 (包含语音识别模块代码等资料包 )的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  7. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  8. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  9. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  10. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

随机推荐