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

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

[复制链接]
STMCU小助手 发布时间:2022-10-16 20:12
stm32利用语音识别与播报智能控制led灯
* W( N( I) Z( J5 f! G( t1 B% |+ i8 Q1 Z) y
上次写了一个语音识别的文章,但是那个模块是用串口进行通信的。这次要讲的是另一种识别与播报模块,这种模块相对于上次那种,功能更多,当然价格也更贵。这种识别模块与播报模块都是利用IIC进行传输的,所以本次利用了stm32f103c8t6控制板上面的两个IIC分别是PB6、PB7以及PB10、PB11。本文章主要实现的功能是: 根据说出的指令让识别模块识别到相应的词语后,做出相应的动作,并且利用播报模块说出对应动作是否完成。在这里我只是简单的控制led灯,当然你也可以控制其他东西,如家用电器等等。9 G0 B5 I! i2 l. z+ Z) }% |* G! J
其中语音识别模块有三种模式,循环模式:模块时刻处于语音识别状态;口令模式:当检测到口令时候进行语音识别;按键模式:当按下按键后处于语音识别模式,模块没有设置板载按键,通过主控板设置按键检测程序,检测到按键后通过 I2C 发送按键模式启动命令,该按键模式可以由自己定义任意的按键。1 n5 G$ U7 K" g+ U" ~
而语音模板模块支持任意中文、英文文本的合成,可以采用 GB2312、GBK、BIG5 和UNICODE 四种编码方式。每次合成的文本量最多可达 4K 字节。模块对文本进行分析,对常见的数字、号码、时间、日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理;对一般多音字也可以依据其语境正确判断读法;另外针对同时有中文和英文的文本,可实现中英文混读。支持多种控制命令如合成文本、停止合成、暂停合成、恢复合成、状态查询等。可设置对应字母的播报方式,如字母发音、单词发音等,还可以通过设置通过汉语拼音进行汉语播报。内置多个发音人物,可以通过设置选择对应的发音人进行语音播放,语音播报的语速、语调、音量等均可以设置。模块还有其他如数字符号等的特殊播报设置。6 ?. k/ g6 d$ {3 P
- y& O1 N# o, i
接下来分别给出两个模块的图片及链接* i" Z6 d' M- U* @+ O$ U
语音识别模块(本质是LD3320)
7 Y5 U/ k2 A1 u/ \) k+ y# f7 x. M% z8 X1 X
20210217162049333.png
7 e6 e6 t6 |1 F# v2 W. N4 z$ ~  ^+ n5 j6 e5 }' g5 c
语音播报模块4 r$ a9 L  r, h; C! U" I
* |  o( T# z, w* _3 I7 i$ L
20210217162145512.png 2 ?2 m1 Y2 v* d/ F
- u% i+ r) B0 F
8 Q) }1 ^$ W* Z9 d! @6 h; D
本文章是以stm32为主来控制这两个模块,在文章最下面的资源中包含了microbit、arduino、树莓派、51、32、jetson nano等例程都有。2 _6 ^' b+ Z) k/ b6 E, t8 P
上面两个模块的接线也相对比较简单,具体如下:# Q, X3 g5 g" b' J
语音识别模块 -----------语音合成播报模块
, I: G5 C! _7 G5 x" [9 I5 oIIC1 ------------------------IIC2
$ S; I( K% U- S0 T% R6 X8 d4 XVCC->单片机5V --------VCC->单片机5V& N( c( Z- ]3 v' ]% I2 T, `; U
SCL->单片机PB6 ------SCL->单片机PB102 s9 u# ?$ z( |6 E
SDA->单片机PB7 ------SDA->单片机PB11/ [0 }: q9 w2 \7 V$ H1 {4 s3 b2 I
GND->单片机GND ----GND->单片机GND; u5 z2 A$ M- ]" f' O' E8 M5 X! s

3 Z9 Z& q% q# ^8 ^9 }stm32语音识别与播报智能控制led灯
' M( n2 Q: O* \, c. V0 v9 Z  k6 H0 R6 T9 d
接在再附上主程序:
  V2 k# I; `/ [6 p5 O; T5 U! M- J! c  s1 O+ ~; i: Q# s
  1. #include "stm32f10x.h"
    ) o/ i6 i! r3 Y5 p( N) M6 y
  2. #include "bsp_i2c.h"
    ' d# l$ c# |: `( a: r3 V% @9 _
  3. #include "bsp_usart1.h"0 z' G" M0 e2 B- ^& A) g; F2 g
  4. #include  "led.h"; o- V) \) Z: H
  5. /*
    / _0 U' T6 F% w7 j2 P: U$ f  X
  6. 语音识别模块                        语音合成播报模块9 f; O4 [1 k, S! O1 S
  7. IIC1                                IIC2! d; `5 d( h, E
  8. VCC->单片机5V                VCC->单片机5V        
    , f5 _6 r* V9 ^0 n4 V% {% h  ?2 f
  9. SCL->单片机PB6                SCL->单片机PB10/ f( _! e+ I8 @, k3 }1 |
  10. SDA->单片机PB7                SDA->单片机PB11% O3 ]) J. q$ w! E9 y% k
  11. GND->单片机GND                GND->单片机GND, M8 k  v' X6 G5 Z  r
  12. */+ N" J/ ]: C8 d0 \
  13. * [  y$ e4 k; C! q( S$ D
  14. int main(void)
    7 j7 O( A* K* h, M6 E
  15. {
    # G) F# F0 y) G/ Z! Z/ I' q* O
  16.         u8 result = 0xff;
    2 G7 q4 m% |( K. z+ p8 Z9 t( T
  17.         LED_Init();                          //初始化与LED连接的硬件接口
    " h! x: l# s& G) }5 ^
  18.         //I2C初始化8 M+ D9 @+ `4 k3 q
  19.         I2C_Bus_Init();9 b& ^  `0 k8 p6 X- j# k$ _' U
  20.         NVIC_Configuration();; h- ?, V' q& b) c# ^
  21.         USARTx_Config();+ u( j1 o9 Q9 @* q
  22.         ! j3 ]' _0 H: u- Z" w  X' k0 L
  23. #if 1
    * R  |- K& \# k! U1 o
  24.         I2C_ByteWrite(ASR_CLEAR_ADDR,0x40);//清除掉电保存区,录入前需要清除掉电保存区
    + m1 I5 a" ]8 }4 {" Q7 L% m
  25.         LD3320_delay(150000);//flash擦除时间较长,需要较长的延时
    8 I0 K/ T  p! g
  26.         I2C_ByteWrite(ASR_MODE_ADDR,0x01);//设置检测模式;
    1 s1 G$ W! o$ Q+ a( _
  27.         AsrAddWords(0,"xiao ya");         
    4 m9 F: q) l; m' W+ t
  28.         AsrAddWords(4,"kai deng");   
    # o( W. L; W6 f9 W1 k
  29.     AsrAddWords(5,"guan deng");& h3 a) d: x9 X* K
  30. 6 Q' A  t  T6 M9 O9 e% U4 B0 y' R
  31. #endif
    2 Q5 A. ^$ @6 ^2 i( c0 d7 x' o: L1 J
  32.         I2C_ByteWrite(ASR_REC_GAIN,0x45);  //识别的灵敏
      @6 t' e" v. h' W& x( ^; F1 U
  33.         RGB_Set(255,255,255);" ?- @: c1 c0 M) @4 ]
  34.         LD3320_delay(10000);//flash擦除时间较长,需要较长的延时
    7 [7 b! [9 F/ q
  35.         RGB_Set(0,0,0);
    1 m+ h* B$ I$ }, n7 y; X
  36.         
    ! \/ \% {/ R. D" x2 S
  37.         SetVolume(10);                8 p0 c- h: F* U, N
  38.         SetReader(Reader_XiaoYan);& l% ^' }  C. H; b
  39.         while(1)
    " ]  Q8 z6 Y- u7 E7 s* V* v
  40.         {        ) w  m0 V& q! K1 E% N9 Y9 f9 h
  41.                 I2C_BufferRead(ASR_RESULT,&result,1);
    ( h0 J9 }/ K5 d" m- U
  42.                 printf("result = %d\n",result);9 u% s& h/ M  C$ ?1 o" \5 ]
  43.                 if(result==0)5 i+ X! U. @2 p2 O
  44.                 {
    , X5 z' D+ M) b) ]$ I4 a  P
  45.                 speech_text("[x1]sound204",GB2312);
    / I" n: h- M: ]5 Z- ]# ?* k+ A
  46.         while(GetChipStatus() != ChipStatus_Idle)
    4 F6 |) v+ t4 m7 u2 X  N5 W
  47.         {* y! U# k; H; u9 e1 Z# J4 _
  48.           delay(50);! ^2 x" l+ ?* w& C: {
  49.         }
    / k% N' q( ~* p$ V! P$ {" T" H
  50.                 }% r4 \9 V! V5 U/ q: L
  51.                 if(result==4)& o: `8 [( y8 V
  52.                 {4 l2 B! H( Y, Q1 ^$ ?3 U+ F
  53.                 GPIO_ResetBits(GPIOA,GPIO_Pin_1);                  //给PA1置0; ~5 o% Q5 W; }. j. D% @: m0 F
  54.                 speech_text("灯已经打开",GB2312);: |( I' _+ @, }5 l/ I9 E; r
  55.         while(GetChipStatus() != ChipStatus_Idle)9 g) X* i2 c2 K. {
  56.         {
      O: L  b1 u% Q; o- C
  57.           delay(50);1 Z% I6 v0 p+ F
  58.         }
    - F  F/ K5 E( a
  59.                 }
    ( K3 d' q7 O3 h' B9 }
  60.                 if(result==5)6 r4 X6 E* c; S9 [
  61.                 {
    : t$ s, n* }) r" G" `
  62.                 GPIO_SetBits(GPIOA,GPIO_Pin_1);                  //给PA1置1
    ' h, \3 R7 F! A/ D) i
  63.                 speech_text("灯已经关闭",GB2312);9 T6 M7 E5 n/ v  ?( ]; \
  64.         while(GetChipStatus() != ChipStatus_Idle)+ l" S/ N7 M: l4 _  d
  65.         {2 s& \% L2 I# P% I- z' i- s% C
  66.           delay(50);
    / b+ L  [( c. j- U/ A* G
  67.         }
    # d: O. D1 \4 B1 C7 Z
  68.                 }                . `1 z+ i( o) o0 M9 Z3 ~: G
  69.                 LD3320_delay(10000);        ' ~% r' N  j5 w( r+ q. H
  70.         }
    : g' N) Y5 R+ T" x' A
  71.                                 1 u5 E; o  G* g
  72. }
    - n8 X3 p. u& H7 @6 Y
  73. 3 Z. I/ M: \/ r) ^% w( i1 o  b
  74. /*********************************************END OF FILE**********************/
复制代码

" P9 |0 P' C% v: W) v( j$ s  s
5 v, C6 l0 z5 G( o! x如果想要更加详细的资料,可以在文章末尾处查看。4 L6 X* p& l% ^( v/ Z4 Q$ {
————————————————
+ n( p) q5 e- d. r8 m+ B7 T版权声明:i土豆
+ r4 A2 x- `' R; k& ?) r' K; ?

. O2 _: @% c: \/ w; q5 A, W6 H$ ?7 \, f
赞 收藏 评论0 发布时间:2022-10-16 20:12

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版