【1024平头哥开发套件开发体验】- sc5654 高级使用
函数:void aui_asr_register_mit(aui_t *aui, aui_asr_cb_t cb, void *priv);
位置:Packegs ->aui_aliyunnls
函数:void aui_tts_register_mit(aui_t *aui, aui_tts_cb_t cb, void *priv);
位置:Packegs ->aui_aliyunnls
i: 解析方式:使用json解析函数解读返回数据
ii: 解析函数:cJSON_Parse
iii: 解析后调用相关处理函数,实现功能
(int aui_nlp_proc_mit(cJSON *js, const char *json_text);)
i: 文件位置:aui_nlp_proc_mit.c
函数主要对语音转化的文字获取后经行读取,识别,然后根据识别到的内容进行判断,执行相应的功能,主要分为获取返回内容或者获取内容中的动词进而实现相应的动作。
比如:
if (strcmp(ac
tion->valuestring, "Action://audio/set_volumn") == 0) {
ret = aui_nlp_action_set_volume(js, &need_resume);
done = 1;
} else if (strcmp(action->valuestring, "Action://audio/pause") == 0) {
need_resume = 0;
done = 1;
判断返回的json数据中action值,实现音量控制
函数主要实现了将从阿里云TTS 服务中获取到json的语音包,然后解析出json中的重要数据,传给TTS语音播放函数,实现云端语音处理,将文字转化为语音。
函数中最主要的就是mit_tts_audio(); 函数主要实现了将云端语音数据转化为语音播放而出。
二. 工程实现语音控制设备
1. 主要思想:
唤醒设备后,使用阿里云NLP将语音转化为文字,如果不考虑复杂语义,可直接将需要判断的内容和词条比较,实现功能
唤醒设备,如果语义复杂,可使用阿里云语义解析,解析出动词,名词,属性,进而实现复杂判断,笼统判断。
结束任务可调用阿里云TTS服务,将想要播放的文字转化为语音。
2. 注意事项:
a) 不同任务之间需要队列来传递消息,不能直接传递
b) 如果功能简单,不想使用队列来实现可直接使用gpio等驱动函数直接控制
3. 实现具体方法:
a) 思考需要控制的类型,建立任务函数,任务消息队列
b) 创建任务函数,实现任务功能(控制3色LED,和一个舵机或电机)
i:舵机的控制:2根
电源线一根接3.3v,一根接gnd 1根数据线(pwm信号控制,控制时序如下图)
注意:如果使用pwm任务优先级需要开高一点。
舵机的控制时序
i+:电机控制:
注意事项:
需要使用驱动来控制电机,驱动和主控需要隔离,防止电机反冲电流烧坏芯片。
ii: led 控制:直接使用gpio控制
iii:控制函数:
PWM:
电机:
c) 语音识别函数处理
i:获取识别的内容
在int aui_nlp_proc_mit(cJSON *js, const char *json_text)函数中修改,读取识别到的关键字
ii:比较内容和关键字(PWM)
电机:
iii: 将对比消息传递给消息队列函数,控制任务函数
注意:此函数需要包含头文件:#include "kernel.h"
最后就是编译,下载,演示效果
三. 效果展示
文章转载自:平头哥芯片开放社区 作者:辰玖
24694765127045850725255425904