你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32利用语音识别与播报智能控制led灯

[复制链接]
STMCU小助手 发布时间:2022-10-16 20:12
stm32利用语音识别与播报智能控制led灯  S( x& N/ w# R# \

# P) T' V( o: x  d6 h上次写了一个语音识别的文章,但是那个模块是用串口进行通信的。这次要讲的是另一种识别与播报模块,这种模块相对于上次那种,功能更多,当然价格也更贵。这种识别模块与播报模块都是利用IIC进行传输的,所以本次利用了stm32f103c8t6控制板上面的两个IIC分别是PB6、PB7以及PB10、PB11。本文章主要实现的功能是: 根据说出的指令让识别模块识别到相应的词语后,做出相应的动作,并且利用播报模块说出对应动作是否完成。在这里我只是简单的控制led灯,当然你也可以控制其他东西,如家用电器等等。
( l" D& ~/ Z/ v5 I其中语音识别模块有三种模式,循环模式:模块时刻处于语音识别状态;口令模式:当检测到口令时候进行语音识别;按键模式:当按下按键后处于语音识别模式,模块没有设置板载按键,通过主控板设置按键检测程序,检测到按键后通过 I2C 发送按键模式启动命令,该按键模式可以由自己定义任意的按键。
/ |. c5 o" ~% z: z而语音模板模块支持任意中文、英文文本的合成,可以采用 GB2312、GBK、BIG5 和UNICODE 四种编码方式。每次合成的文本量最多可达 4K 字节。模块对文本进行分析,对常见的数字、号码、时间、日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理;对一般多音字也可以依据其语境正确判断读法;另外针对同时有中文和英文的文本,可实现中英文混读。支持多种控制命令如合成文本、停止合成、暂停合成、恢复合成、状态查询等。可设置对应字母的播报方式,如字母发音、单词发音等,还可以通过设置通过汉语拼音进行汉语播报。内置多个发音人物,可以通过设置选择对应的发音人进行语音播放,语音播报的语速、语调、音量等均可以设置。模块还有其他如数字符号等的特殊播报设置。
! C. K3 [5 g! y1 {1 ]* v
. @5 H6 x) B( G' v0 D& X; N* B接下来分别给出两个模块的图片及链接
0 M8 a5 f9 S% Q7 s2 I语音识别模块(本质是LD3320)
8 N, Z3 n1 g- _" F8 ?6 C' T) C
. w) L3 ^. v4 C: f
20210217162049333.png ) S; Q4 _! u  T7 w/ P
, }2 C$ A, U2 j2 H) U; m5 l
语音播报模块
/ }/ J% V% }8 p- T* Y3 Z% u5 W( ?- O3 P4 U1 d. P, Q4 l* G
20210217162145512.png
& a. ?7 K0 T% C1 `) U/ c8 h- \2 }6 [, H8 |! O! ]( l
$ F9 t# X% K" G+ v1 {& x$ k
本文章是以stm32为主来控制这两个模块,在文章最下面的资源中包含了microbit、arduino、树莓派、51、32、jetson nano等例程都有。& J# d5 N' ~9 X' G. a  B
上面两个模块的接线也相对比较简单,具体如下:/ b9 I- e, ]$ y! ?% @
语音识别模块 -----------语音合成播报模块
! C* f" S9 }( P% D( EIIC1 ------------------------IIC2
4 T! w8 c  B6 t; pVCC->单片机5V --------VCC->单片机5V
5 ^' J1 j# E" D0 p0 MSCL->单片机PB6 ------SCL->单片机PB10: r; V' r  H0 S- ^* }" y
SDA->单片机PB7 ------SDA->单片机PB11
6 g7 }8 R2 S" h6 T! Y9 ^( RGND->单片机GND ----GND->单片机GND* h: @) j: E& D7 I( O

6 A" F9 c* D/ U0 X# H$ ~, Ustm32语音识别与播报智能控制led灯
$ G& V9 O: S  y! R, p! T: d- o6 `4 g
5 w2 t  s. t0 z: ~/ E: L接在再附上主程序:) R6 K2 P  K/ ~' _% _+ [! H8 v

) @8 |  H- v. F
  1. #include "stm32f10x.h"
    / ]; L% d# B6 g% D
  2. #include "bsp_i2c.h"" N" `- n6 v$ [. i2 N; i# X
  3. #include "bsp_usart1.h"- C; o  ^" h/ A0 V
  4. #include  "led.h"0 \1 D, T) x' _/ F7 w6 a3 Q4 b
  5. /*; s0 [3 L3 ~# P9 k
  6. 语音识别模块                        语音合成播报模块
    * x0 p2 J% P$ E) j* m' t6 ~
  7. IIC1                                IIC25 [% \; \6 N0 }& j( e% N7 w9 z# E% D
  8. VCC->单片机5V                VCC->单片机5V        
    ' C/ q7 v* t* s2 D  i7 l6 r
  9. SCL->单片机PB6                SCL->单片机PB10
    " G& d3 q$ D0 W9 I" L
  10. SDA->单片机PB7                SDA->单片机PB11; j9 z6 m2 B( c  A  A
  11. GND->单片机GND                GND->单片机GND& n; ?/ ^. U" p8 \  g
  12. */
    " L& O! @1 X" i* Z1 Q* Z. L, D
  13.   U. T0 s, p- J
  14. int main(void); k- d/ ]+ O: ]/ O. b- k) ?1 c+ v
  15. {9 n% d- [( [0 B' A9 U" d5 `4 ^
  16.         u8 result = 0xff;( [2 r3 j$ }  @! G* ?) D. ?
  17.         LED_Init();                          //初始化与LED连接的硬件接口
    . U" R1 b0 ]0 o% t1 Z
  18.         //I2C初始化
    4 n, s0 b( g9 ]  W  Q: n  O
  19.         I2C_Bus_Init();. }, p$ N1 z5 {, w/ X1 |
  20.         NVIC_Configuration();
    ! q9 L. T' F$ A- N* {* M* l" X
  21.         USARTx_Config();
    ( X2 j: C& |( f( n5 a$ ?# d
  22.         
    " C- t( {4 A. ~$ G
  23. #if 1
    0 {: u( M( l$ H, R& j6 a* E$ O
  24.         I2C_ByteWrite(ASR_CLEAR_ADDR,0x40);//清除掉电保存区,录入前需要清除掉电保存区
    3 x" E' i* z( }2 c
  25.         LD3320_delay(150000);//flash擦除时间较长,需要较长的延时+ X9 I: v, ?: y
  26.         I2C_ByteWrite(ASR_MODE_ADDR,0x01);//设置检测模式;2 P1 g- b; F& p9 J+ M
  27.         AsrAddWords(0,"xiao ya");         ( ]$ }6 N" p* i+ R( E# `3 m
  28.         AsrAddWords(4,"kai deng");   & [) h( H3 w. Z  Y% i( D
  29.     AsrAddWords(5,"guan deng");7 u& S1 \( p7 ?/ [
  30.   l; s, r9 i2 f# F( Q$ [
  31. #endif1 e( |$ Q: U) ]+ v# S
  32.         I2C_ByteWrite(ASR_REC_GAIN,0x45);  //识别的灵敏# C3 j; c# S% p6 }
  33.         RGB_Set(255,255,255);" R; {2 d+ {$ F7 W' K
  34.         LD3320_delay(10000);//flash擦除时间较长,需要较长的延时8 l8 |& ?2 _# H
  35.         RGB_Set(0,0,0);
    9 j/ F" l* p. K0 h) Z
  36.         
    ! D, E0 E" \9 y! R
  37.         SetVolume(10);                : f$ W& d1 M. n- y
  38.         SetReader(Reader_XiaoYan);
    ) }3 E) Y8 y" t
  39.         while(1)
    1 N# ~! Y+ I" Q) G' y3 ^  _
  40.         {        / m9 n- x9 W$ `; z& N* Q1 i
  41.                 I2C_BufferRead(ASR_RESULT,&result,1);
    ' ?5 @! K0 W# ?8 e8 s! J& K- F6 e
  42.                 printf("result = %d\n",result);# g3 }% y5 ]$ v* `+ m4 I3 U
  43.                 if(result==0)7 u+ ~5 C) Z  g
  44.                 {
    9 u; ?/ I: J/ }* E4 n
  45.                 speech_text("[x1]sound204",GB2312);9 ?+ o  X/ O9 w7 b
  46.         while(GetChipStatus() != ChipStatus_Idle), I0 a7 a0 X  O- H
  47.         {
    % d5 V  K. V1 }& A5 a
  48.           delay(50);
    5 K5 L: d$ \/ ]* y, P) ?% E6 R
  49.         }  R0 U7 r5 y) t4 w6 ^0 I/ y
  50.                 }
    9 E. H& o, Z# O1 K3 w
  51.                 if(result==4)* i/ K2 Y- q( {' s
  52.                 {
    $ S* H0 n' a9 t5 n* H2 a* t
  53.                 GPIO_ResetBits(GPIOA,GPIO_Pin_1);                  //给PA1置0
    8 U9 l4 F" n# f  S% C
  54.                 speech_text("灯已经打开",GB2312);7 F5 }/ F* r  y+ C* ~( C
  55.         while(GetChipStatus() != ChipStatus_Idle)
    # K; Q$ u8 `% Y0 R5 p" i2 N6 {# |& i
  56.         {
      w3 u' n  R; s- Y- h) o6 d
  57.           delay(50);
    7 ~& u! l) N1 ^% k: H
  58.         }. V6 B3 Z* c! F5 H  Y& O
  59.                 }
    " c( Z3 V  J9 N6 I+ y
  60.                 if(result==5)% m! g/ T3 |$ x
  61.                 {
    4 J- E( g& a( h: H
  62.                 GPIO_SetBits(GPIOA,GPIO_Pin_1);                  //给PA1置12 J0 l$ n" v& m, R! e2 X  E
  63.                 speech_text("灯已经关闭",GB2312);# G7 O& r0 X' @" m* J% l/ L/ h; O# E
  64.         while(GetChipStatus() != ChipStatus_Idle); t6 P9 ?% p, O  L/ \& ?; J) x
  65.         {+ p* P# g$ Q. W3 b
  66.           delay(50);
    & ~6 f. D: P5 S% @! T# l
  67.         }+ g  ?/ ?: q' V9 t' Y  b
  68.                 }               
    ) x+ f( K5 \, x9 M9 A" j
  69.                 LD3320_delay(10000);        
    # U* U0 k* ]& S& X& I/ P. o
  70.         }
    1 {! }3 |  A& Z7 h
  71.                                 
    0 H# Z; `$ I$ {+ n* `
  72. }! {( \- v5 b; O+ e& I$ H

  73. ! J; Y/ R  m& P0 X4 T# D% p2 T
  74. /*********************************************END OF FILE**********************/
复制代码
6 ?& ^- k* X  P: k! \3 |5 `

4 U% N, q9 M0 [' ?如果想要更加详细的资料,可以在文章末尾处查看。5 F7 K" V5 ~( ^( o) e& f
————————————————! `5 u0 `. `# i' W( ~1 T+ D' X4 E
版权声明:i土豆
* Z6 d0 v. o# s: y
1 h+ P3 [* n" [1 v7 a
% a* ~5 P. W$ e+ N& B# p+ ?
收藏 评论0 发布时间:2022-10-16 20:12

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版