其他分享
首页 > 其他分享> > 第三篇 树莓派的串口通信和语音识别模块

第三篇 树莓派的串口通信和语音识别模块

作者:互联网

目录

一、串口(UART)

二、 wiringPi提供的串口API

三、语音识别模块

1、阅读模块代码 

①代码阅读工具:Souces Insight4.0安装、激活、汉化等

②语音识别(口令模式)源码框架(按main.c的顺序阅读)

2、修改代码


一、串口(UART)

全双工: 通信允许数据在两个方向上同时地双向传输。

半双工:数据传输指数据可以在两个方向上传输,但不同时。

(串口通信属于全双工通信)

        ①主串口(/dev/serial0):可以通过引脚实现通信

        ②辅助串口(/dev/serial1):不能使用GPIO通信(默认分配给蓝牙)

                (默认mini是禁用状态,无论指定为主uart还是辅助uart)

树莓派3/4B的外设包括两个串口 :

        ①串口设备(/dev/ttyAMA0):由硬件实现,有单独的波特率时钟源,性能高且可靠。

        ②mini串口设备(/dev/ttyS0):性能较低,功能简单

                                                         (官网提供图片)

二、 wiringPi提供的串口API

函数原型参数或功能解释返回值
int serialOpen (char *device ,int baud)

device:串口设备文件

  (/dev/ttyAMA0)

baud:波特率

成功:返回所打开的文件描述符fd;

失败:返回-1

void serialClose (int fd)fd:文件描述符无返回值
void serialPutchar (int fd, unsigned char c)发送一个字符到串口无返回值
void serialPuts (int fd, char *s)

发送字符串到串口

(字符串s要以' \0 '结束)

无返回值

int  serialDataAvail (int fd)获取串口中可读数据的字节数

成功:串口中可以读取的字节数;

失败:返回-1

int serialGetchar (int fd)

读取串口的数据

(读取之前判断是否有数据)

返回值:实际读取到的字节数

另外,Linux下的标准I/O函数也可使用(需包含头文件 inlcude<unistd.h>)

size_t write (int fd,const void * buf,size_t count)

size_t read(int fd,void * buf ,size_t count)


三、语音识别模块

1、阅读模块代码 

①代码阅读工具:Souces Insight4.0安装、激活、汉化

提取码:48a3(含安装、激活、汉化教程)

语音识别(口令模式)源码框架(按main.c的顺序阅读)

a.基本的初始化

Led_test( ) ;  //单片机指示灯闪烁3次

MCU_init( );  //初始化单片机I/O口特殊功能寄存器p0~p4,置为高电平;

                       //设置LD_MOOE为低电平,并行模式读写;

                       //打开中断控制寄存器。

LD_Reset( );//复位LD模块

UartIni(); //串口初始化

 接着赋值表示ASR状态的变量nAsrStatus=LD_ASR_NONE;

此时没有在做ASR识别。 

b.实现主要功能的代码

switch(nAsrStatue)执行各分支语句:

①case LD_ASR_RUNING:

    case LD_ASR_ERROR:     

        break;

(正在识别和识别错误时,不作处理)

②case LD_ASR_NONE:(表示ASR空闲中)

执行:将ASR状态赋值为running;再启动识别,调用runASR( )

runASR( )的主要功能:初始化ASR,添加关键词,启动ASR运算,内部大致包括:LD_AsrStart( )、LD_AsrAddFixed( )、LD_AsrRun( )、LD_GetResult( )。(初始化、添加关键词、启动运行、获取识别结果。LDChip.c中),ASR启动成功后,asrflag=1,等待LD3320的中断信号

③case LD_ASR_FOUNDOK:(表示识别完成)

执行:调用LD_GetResult( )获取识别结果,对获取的结果根据用户需要实现对应功能User_handle( ),处理完后再将ASR的状态置为LD_ASR_NONE(空闲状态)

④case LD_ASR_FOUNDZERO:(表示没有识别出结果)

执行:将ASR的状态置为LD_ASR_NONE

2、修改代码

阅读完模块代码,了解其基本架构后,即可根据需求进行修改。

示例:通过语音识别开、关灯

(由于我的树莓派凉了,此处略)

标签:ASR,树莓,第三篇,int,LD,fd,串口,识别
来源: https://blog.csdn.net/weixin_54429787/article/details/122456069